我最近開始了一個項目,它依靠直接將FLV流式傳輸到iOS設備。正如我最熟悉的ffmpeg(和一個iOS包裝 - kxmovie)。令我驚訝的是,iPhone 4無法播放SD低比特率的FLV視頻。我使用的當前實現是在dispatch_async while循環中解碼視頻/音頻/子幀,並將YUV幀數據複製到對象,其中對象被解析爲3個紋理 - Y/U/V(在RGB顏色的情況下空間 - 只是解析數據)並在屏幕上呈現。經過大量的試驗和錯誤之後,我決定殺死整個渲染管線,並且只保留運行的代碼功能。令人驚訝的是,FPS沒有改善,視頻仍然無法播放。iOS SDK avcodec_decode_video優化
我的問題是:我能做些什麼來改善的性能avcodec_decode_video2?
注: 我試了幾個商業應用程序,他們玩的相同的文件完美罰款,不超過50-60%的CPU使用率。
該庫是基於離1.2分支,這是是構建ARGS:
'--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',
並根據儀器以下功能採取每次約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
實際上,它們使用FFMpeg(或內部demuxers)解析文件,並將數據流提供給AVAssetReader或在流不兼容時使用ffmpeg的解碼視頻。因此,您甚至可以播放30fps的高清視頻(不受MPMovieController支持)。 –