我正在将我的电影播放器迁移到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*
我希望你能帮助我!
答案 0 :(得分:1)
QuickTime的替换是AVFoundation。它可能不包含您目前所需的全部内容,但这是未来。