2016-10-18 3 views
2

iOS에서 OpenGL ES 2.0을 사용하여 비디오를 재생하려고합니다. 나는 이것을 달성하는 방법의 샘플 코드 나 시작점을 얻을 수 없다. 아무도 이걸 도와 줄 수 있니?iOS에서 OpenGL을 사용하여 비디오를 재생하는 방법은 무엇입니까?

+1

Google에서 검색했습니다. 언급 한 링크는 이미지 또는 3D 모델을 표시하는 방법 만 보여줍니다. OpenGL을 사용하여 비디오를 재생하고 싶습니다. 기본적으로 OpenGL Shaders에 텍스처로 비디오 프레임을 전달하고 싶습니다. @AmitSrivastava –

+0

조차 이것을 해결하는 방법을 찾을 수 없습니다. – Parth

+1

@ R.Jari : 성공적으로 성공 했습니까? openGL에서 ios 비디오를 재생합니까? 그렇다면 코드를 공유 하시겠습니까? 미리 감사드립니다. – loki

답변

2

당신이 찾고있는 것은 실시간으로 비디오의 원시 버퍼를 얻는 것입니다. AVFoundation을 조사하고 어떻게 든 CVPixelBufferRef을 추출해야한다고 생각합니다. 내가 올바르게 기억하면 몇 가지 방법이 있습니다. 하나는 특정 시간에 수요가 있고, 다른 하나는 블록에서 프레임의 빠른 반복을 얻는 처리를위한 것이고, 아마도 당신이 필요로하는 것은 프레임을 실시간으로 수신하는 것입니다. 그래서 이것을 사용하여 텍스쳐에 푸쉬 된 다음 렌더링 버퍼에 그려야하는 raw RGB 버퍼를 추출 할 수 있습니다.

텍스처를 한 번 (비디오 당) 만들고 가능한 한 작게 만들고 비디오 프레임이 맞는지 확인하십시오. 그래서 텍스처 크기가 비디오 다음 큰 것으로 예상된다

GLInt textureWidth = 1.0f; 
while(textureWidth<videoWidth) textureWidth <<= 1; // Multiplies by 2 

: 당신은 당신이 뭔가를 필요로하므로 비디오 폭의 질감 치수를 얻기 위해 텍스처 (두 전원) 냄비를해야 할 수도 있습니다. 데이터를 텍스처로 푸시하려면 텍스처 서브 이미지 glTexSubImage2D을 사용해야합니다. 어느 쪽이 원시 데이터 및 사각형 매개 변수에 포인터가 올지 데이터가 저장 될 곳은 (0, 0, sampleWidth, sampleHeight)입니다. 또한 범위 좌표 [0, 1]가 아닌 x : [0, sampleWidth/textureWidth]에 대해 텍스처 좌표가 계산되어야합니다.

은 그럼 그냥 모두 함께 넣어해야합니다

  • 비디오 원료 샘플 버퍼를 생성 유지하는 시스템을 가지고
  • 새로운 샘플 업데이트에 비디오 크기
  • 에 맞게 텍스처를 생성 glTexSubImage2D을 사용하는 텍스처
  • 텍스처에 데이터를로드 한 후 텍스처를 전체 화면 사각형으로 그립니다 (스레드를 조심하십시오).

동영상 방향, 변형에주의해야 할 수도 있습니다. 따라서 가능한 경우 장치에 여러 방향으로 녹화 된 몇 개의 비디오로 시스템을 테스트하십시오. 이미 올바르게 지향 된 버퍼를 수신 할 수있는 지원이 있다고 생각합니다. 그러나 기본적으로 샘플은 적어도 "잘못"사용되었습니다. 세로로 기록 된 비디오는 여전히 랜드 스케이프의 샘플을 가졌지 만 변환 매트릭스 또는 오리엔테이션은 자산과 함께 제공됩니다.

관련 문제