ムービー プレーヤーを 64 ビットに移行しています。
現在、QuickTime API と FFmpeg の両方でムービーをデコードできます。
QuickTime API でデコードするには、QTOpenGLTextureContext
を提供するを作成し、 を使用してQTVisualContextRef
タイプのデコードされたフレームを取得します。CVOpenGLTextureRef
QTVisualContextCopyImageForTime
アプリを 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*
あなたが私を助けてくれることを願っています!