1

我最近开始了一个项目,该项目依赖于将 FLV 直接流式传输到 iOS 设备。作为最著名的我使用了 ffmpeg(和一个 iOS 包装器 - kxmovie)。令我惊讶的是,iPhone 4 甚至无法播放标清低比特率 FLV 视频。我正在使用的当前实现是在 dispatch_async while 循环中解码视频/音频/子帧,并将 YUV 帧数据复制到一个对象,其中对象被解析为 3 个纹理 - Y/U/V(在 RGB 颜色的情况下)空间 - 只需解析数据)并呈现在屏幕上。经过多次试验和错误,我决定终止整个渲染管道,只保留avcodec_decode_video2函数运行。令人惊讶的是,FPS 没有提高,视频仍然无法播放。

我的问题是:我能做些什么来提高avcodec_decode_video2的性能?

注意:我尝试了一些商业应用程序,它们可以完美地播放相同的文件,CPU 使用率不超过 50-60%。

该库基于 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
4

3 回答 3

1

事实证明,即使有 NEON 支持,FFmpeg 仍然在 CPU 上执行,因此它无法更快地解码。有些应用程序使用 ffmpeg 和硬件解码器,我最好的猜测是它们会剥离标题并向 Apple 的 AssetReader 提供原始 h264 数据。

于 2013-07-05T12:43:01.163 回答
0

只是为了好玩看看你从中得到什么样的性能,它似乎播放flv的速度很快但我没有在iPhone 4上测试过

https://github.com/mooncatventures-group/WebStreamX_flv_demo

于 2013-07-09T15:07:09.487 回答
0

您应该使用 --enable-asm 优化参数来提高 %10-15 的性能。此外,您必须安装最新的 gas-preprocessor.pl

于 2013-08-06T10:56:53.157 回答