我正在将我的电影播放器迁移到 64 位。
目前它能够使用 QuickTime API 和 FFmpeg 解码电影。
为了使用 QuickTime API 进行解码,我创建了一个QTOpenGLTextureContext
提供 aQTVisualContextRef
然后我CVOpenGLTextureRef
使用QTVisualContextCopyImageForTime
.
现在我想让我的应用程序是 64 位的,因此我不能再使用 QuickTime API,因为这些函数不是 64 位的。
所以我传递给 QTKit 并开始使用frameImageAtTime:withAttributes:error:
提供各种图像格式的解码帧的方法来解码帧。目前我让它返回 aCVOpenGLTextureRef
以便使用我的显示例程的所有实际结构。该方法确实有效,我可以摆脱 32-bit QTVisualContextRef
。
问题是这种方法非常慢!!它无法实时播放 Apple h264 电影预告片。它需要旧方法所需时间的 4 倍来输出CVOpenGLTextureRef
!
我尝试了所有其他可以在输出中处理的图像类型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*
我希望你能帮帮我!