2

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

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

我希望你能帮帮我!

4

1 回答 1

1

QuickTime 的替代品是 AVFoundation。它可能不包含您目前需要的所有内容,但这是未来。

于 2011-09-19T11:42:06.883 回答