나는 성능에 대해 언급,하지만 당신이 원하는 것은 없습니다
- 는이
AVAssetWriter
(수신 샘플을 채취하고 H.264에서 그들을 기록 할 수있는 만들고, 다른 파일 형식이 보이지 않는다
AVAssetWriterInput
을 자산 라이터에 첨부하여 비디오 프레임을 제공하십시오 (자산 작성자가 각각 자산의 다른 측면을 제공하기 위해 하나 이상의 입력을 취함).
- 자산 라이터 입력에
AVAssetWriterInputPixelBufferAdaptor
을 첨부하면 입력에서 픽셀 버퍼를 밀어 넣을 수 있습니다. 실시간으로 미디어 데이터를 예상한다는 것을 저작자 입력에 알리고 자 할 것입니다. 그렇게하면 항상 입력 준비가되어 있습니다. 프레임을 제공 할 때와 프레임 타이밍을 지정하므로 나머지 코드에는 성능 요구 사항이 적용되지 않습니다.
거기에서 CVImageBuffers를 픽셀 버퍼 어댑터로 푸시하면됩니다. OS X에는 편리한 Core Video OpenGL 버퍼 유형이 있지만 iOS에는없는 것으로 보입니다. 대신 과 CVPixelBufferCreate
등이 필요하며 픽셀 버퍼를 잠그고 기본 주소에 직접 쓰는 것이 좋습니다. 그 사이에 바이트를 섞어 놓지 않고도 OpenGL에 직접 전달할 수있는 무언가를 얻을 수 있기를 바랍니다.
iPhone에 전용 H.264 인코더가 있다고 가정하면 주요 성능 병목 현상이 glReadPixels 일 수 있습니다. 프레임 버퍼에있는 모든 요소가 CPU로 전송되고 다시 포맷되어야합니다. 모든 것을 설정하고 결과가 느린 것 같으면 먼저 조사하겠습니다.
'glReadPixels'과'CVPixelBuffer'는 꽤 잘 작동합니다. 내가 가지고있는 유일한 문제는 "꺼짐"인 색입니다. CVPixelBuffer'와 함께 사용되는'glReadPixels'과 BGRA에 전달되는'GL_RGBA' 때문인 것 같습니다. 이 픽셀 형식에 대한 의견이나 해결 방법은 무엇입니까? – MrDatabase
사양을 읽었을 때, Apple의 BGRA 확장은 BGRA 업로드를 추가하는 것으로 보이지만 다운로드하지는 않습니다. GL_BGRA에게'glReadPixels'을 한 장 줄 수는 있지만 낙천적이지는 않습니다. 내가 AV Foundation에 버퍼를 전달하기 전에 채널 스왑을해야한다고 생각하지는 않습니다. 아마도 GPU에서 그렇게하는 것이 가장 저렴 할 것입니다. 아마도 텍스쳐로 렌더링하여 사용자에게 보여주고 r과 b를 뒤집기 위해 도시되지 않은 버퍼로 렌더링하면됩니다. 그것은 복잡하게 들리지만 다른면에서는 iOS 5에서 CoreVideo 이미지를 OpenGL로 쉽게 가져 오는'CVOpenGLESTexture'가 추가되었습니다. – Tommy