Snow Leopard:QuickTime API的64位替代品

时间:2011-09-17 08:36:56

标签: 64-bit quicktime playback qtkit core-video

我正在将我的电影播放器​​迁移到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位?有没有?

我无法更改媒体播放器的主要结构,因此我必须获取CVOpenGLTextureRefCVPixelBufferRefCIImage*

我希望你能帮助我!

1 个答案:

答案 0 :(得分:1)

QuickTime的替换是AVFoundation。它可能不包含您目前所需的全部内容,但这是未来。