2

ムービー プレーヤーを 64 ビットに移行しています。

現在、QuickTime API と FFmpeg の両方でムービーをデコードできます。

QuickTime API でデコードするには、QTOpenGLTextureContextを提供するを作成し、 を使用してQTVisualContextRefタイプのデコードされたフレームを取得します。CVOpenGLTextureRefQTVisualContextCopyImageForTime

アプリを 64 ビットにしたいので、この関数が 64 ビットではないため、QuickTime API を使用できなくなりました。

そこで、QTKit に渡しframeImageAtTime:withAttributes:error:、さまざまな画像形式でデコードされたフレームを提供するメソッドを使用して、フレームのデコードを開始しました。CVOpenGLTextureRef現在、表示ルーチンの実際の構造をすべて使用するために、 a を返すようにしました。メソッドは実際に機能し、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*

あなたが私を助けてくれることを願っています!

4

1 に答える 1

1

QuickTime の後継は AVFoundation です。現時点で必要なものがすべて含まれているとは限りませんが、これは将来のことです。

于 2011-09-19T11:42:06.883 に答える