私は最近、FLV を iOS デバイスに直接ストリーミングすることに依存するプロジェクトを開始しました。最も有名なように、私は ffmpeg (および iOS ラッパー - kxmovie ) を使用しました。驚いたことに、iPhone 4 では SD の低ビットレート FLV ビデオでさえも再生できません。私が使用している現在の実装は、dispatch_async while ループでビデオ/オーディオ/サブ フレームをデコードし、YUV フレーム データをオブジェクトにコピーします。オブジェクトは 3 つのテクスチャに解析されます - Y/U/V (RGB カラーの場合)スペース - データを解析するだけ)、画面にレンダリングされます。多くの試行錯誤の末、レンダリング パイプライン全体を停止し、avcodec_decode_video2関数のみを実行することにしました。驚いたことに、FPS は向上せず、ビデオはまだ再生できません。
私の質問は: avcodec_decode_video2のパフォーマンスを向上させるために何ができますか?
注: いくつかの商用アプリを試してみましたが、50 ~ 60% の CPU 使用率で同じファイルを完全に再生できます。
ライブラリは 1.2 ブランチに基づいており、これはビルド引数です。
'--arch=arm',
'--cpu=cortex-a8',
'--enable-pic',
"--extra-cflags='-arch armv7'",
"--extra-ldflags='-arch armv7'",
"--extra-cflags='-mfpu=neon -mfloat-abi=softfp -mvectorize-with-neon-quad'",
'--enable-neon',
'--enable-optimizations',
'--disable-debug',
'--disable-armv5te',
'--disable-armv6',
'--disable-armv6t2',
'--enable-small',
'--disable-ffmpeg',
'--disable-ffplay',
'--disable-ffserver',
'--disable-ffprobe',
'--disable-doc',
'--disable-bzlib',
'--target-os=darwin',
'--enable-cross-compile',
#'--enable-nonfree',
'--enable-gpl',
'--enable-version3',
また、Instruments によると、次の関数はそれぞれ約 30% の CPU 使用率を占めています。
Running Time Self Symbol Name
37023.9ms 32.3% 13874,8 ff_h264_decode_mb_cabac
34626.2ms 30.2% 9194,7 loop_filter
29430.0ms 25.6% 173,8 ff_h264_hl_decode_mb