iOS4: как использовать видеофайл в качестве текстуры OpenGL? - PullRequest
23 голосов
/ 11 апреля 2011

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

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

Ответы [ 2 ]

32 голосов
/ 12 апреля 2011

Извинения; набрав на iPhone, так что я буду немного кратким.

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

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

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

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

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

0 голосов
/ 11 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...