IOS4: как использовать видеофайл в качестве текстуры OpenGL?

Я пытаюсь отобразить содержимое видеофайла (скажем, без звука сейчас) на трехмерном 3D-объекте с UV-покрытием в OpenGL. Я отлично поработал в OpenGL, но понятия не имею, с чего начать в обработке видеофайлов, и большинство примеров там, кажется, для получения видеокадров с камер, что не то, что мне нужно.

В настоящий момент я чувствую, что могу получить отдельные кадры видео как CGImageRef, которые я бы установил, поэтому мне интересно, как это сделать? Возможно, есть даже лучшие способы сделать это? Где я должен начать и какой самый прямой формат файла для воспроизведения видео на iOS?.mov?

Ответ 1

Apologies; набрав на iPhone, поэтому я буду немного кратким.

Создайте AVURLAsset с URL вашего видео - это может быть локальный URL-адрес файла, если хотите. Все, что может сделать QuickTime, прекрасно, поэтому MOV или M4V в H.264, вероятно, лучший источник.

Запросить актив для дорожек типа AVMediaTypeVideo. Вы должны получить только один, если ваше исходное видео не имеет нескольких углов камеры чего-то подобного, поэтому простое принятие objectAtIndex: 0 должно предоставить вам AVAssetTrack, который вы хотите.

Используйте это для создания AVAssetReaderTrackOutput. Возможно, вы хотите указать kCVPixelFormatType_32BGRA.

Создайте AVAssetReader с использованием актива; прикрепите выходной дорожку считывателя активов в качестве выхода. И вызвать startReading.

В дальнейшем вы можете вызвать copyNextSampleBuffer на выходе трека, чтобы получить новый CMSampleBuffers, поставив вас в такое же положение, как если бы вы делали ввод с камеры. Таким образом, вы можете заблокировать это, чтобы получить содержимое пикселя и нажать на OpenGL через расширение Apple BGRA.

Ответ 2

Вам, вероятно, придется использовать слой игрока и сгладить его содержимое в растровом контексте. См. Документацию для AVPlayerLayer. Производительность может быть очень плохой.