Я перевожу мой видеоплеер на 64-битную версию.
В настоящее время он способен декодировать фильмы как с QuickTime API, так и с FFmpeg.
Для декодирования с помощью QuickTime API я создаю QTOpenGLTextureContext
с QTVisualContextRef
, а затем получаю декодированный кадр типа CVOpenGLTextureRef
, используя QTVisualContextCopyImageForTime
.
Теперь я хочу сделать мое приложение 64-битным, и поэтому больше не могу использовать API QuickTime, потому что эти функции не являются 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*
Надеюсь, вы мне поможете!