2013-07-04 73 views
1

我最近開始了一個項目,它依靠直接將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 

回答

1

事實證明,即使在支持NEON的情況下,FFmpeg仍然在CPU上執行,因此無法更快地解碼。有些應用程序使用ffmpeg和HW解碼器,我最好的猜測是他們會去掉標題並向Apple的AssetReader提供原始h264數據。

+0

實際上,它們使用FFMpeg(或內部demuxers)解析文件,並將數據流提供給AVAssetReader或在流不兼容時使用ffmpeg的解碼視頻。因此,您甚至可以播放30fps的高清視頻(不受MPMovieController支持)。 –

0

您應該使用 - -enable-asm優化參數來提升性能達到10%-15%以上。 此外,您必須安裝最新的gas-preprocessor.pl