Я перехожу на 64-битный проигрыватель фильмов.
В настоящее время он может декодировать фильмы как с помощью QuickTime API, так и с помощью FFmpeg.
Для декодирования с помощью QuickTime API я создаю QTOpenGLTextureContext
, предоставляя QTVisualContextRef
, а затем получаю декодированный кадр типа CVOpenGLTextureRef
с помощью QTVisualContextCopyImageForTime
.
Теперь я хочу сделать свое приложение 64-битным, и поэтому я больше не могу использовать QuickTime API, потому что эти функции не 64-битные.
Итак, я перешел на QTKit и начал декодировать кадры, используя метод frameImageAtTime:withAttributes:error:
, который дает декодированный кадр в различных форматах изображения. В настоящее время я сделал это, чтобы вернуть CVOpenGLTextureRef
, чтобы использовать всю фактическую структуру моей процедуры отображения. Метод действительно работает, и я могу избавиться от 32-битного QTVisualContextRef
.
Проблема в том, что этот метод Чрезвычайно МЕДЛЕННЫЙ !! Невозможно воспроизвести трейлер фильма Apple h264 в реальном времени. Для вывода CVOpenGLTextureRef
! Требуется в 4 раза больше времени, чем требуется старым методом.
Я пробовал все другие типы изображений, которые frameImageAtTime:withAttributes:error:
может обрабатывать на выходе, но безуспешно ... иногда они даже медленнее ...
Данные атрибуты:
[_imageAttr setObject:QTMovieFrameImageTypeCVOpenGLTextureRef forKey:QTMovieFrameImageType];
[_imageAttr setObject:[NSValue valueWithPointer:[openGLContext CGLContextObj]] forKey:QTMovieFrameImageOpenGLContext];
[_imageAttr setObject:[NSValue valueWithPointer:[openGLPixelFormat CGLPixelFormatObj]] forKey:QTMovieFrameImagePixelFormat];
[_imageAttr setObject:[NSNumber numberWithBool:YES] forKey:QTMovieFrameImageSessionMode];
[_imageAttr setObject:[NSNumber numberWithBool:YES] forKey:QTMovieFrameImageHighQuality];
[_imageAttr setObject:[NSNumber numberWithBool:YES] forKey:QTMovieFrameImageDeinterlaceFields];
Какая реальная замена QuickTime API 64-битной? Есть ли?
Я не могу изменить основную структуру медиаплеера, поэтому мне нужно получить CVOpenGLTextureRef
, CVPixelBufferRef
или CIImage*
Я надеюсь, что вы можете помочь мне!