dei*_*mus 2 iphone streaming ffmpeg objective-c ipad
我正在使用ffmpeg在iDevice上播放udp流.它确实成功播放了视频和音频.
我在这里遇到的唯一问题是以下函数调用确实需要很长时间
avformat_find_stream_info
Run Code Online (Sandbox Code Playgroud)
完成此功能的执行大约需要10秒.我正在播放的媒体具有以下属性:
MPEG-4 VIDEO v3 (DIV3)
RESOLUTION : 640x480
Frame rate : 25
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决这种延迟?
我意识到这是一个老问题,但我最近遇到了这个问题,所以虽然这可能对OP没有帮助,但我会为了后人的缘故给出答案.
简短的回答:
将AVFormatContext字段设置为probesize和/或max_analyze_duration小于默认值的字段,即
std::string url_path = "...";
AVFormatContext *format_ctx = NULL;
avformat_open_input(&format_ctx, url_path.c_str(), NULL, NULL);
format_ctx->max_analyze_duration = 50000;
avformat_find_stream_info(format_ctx, NULL);
Run Code Online (Sandbox Code Playgroud)
对于更长的答案:
avformat_find_stream_info从输入数据流中读取并尝试AVFormatContext根据它看到的数据包填写.它可以达到结构中max_analyze_duration设置的值AVFormatContext.
比方说,本地视频文件通常非常快,但对于网络流,这可能需要很长时间(特别是如果流被损坏).这是漫长的等待时间avformat_find_stream_info发挥作用的地方.默认值为max_analyze_duration5000000(以AV_TIME_BASE为单位),这意味着假设avformat_find_stream_info可以从输入流中采样数据包达到该持续时间(IIRC AV_TIME_BASE相当于微秒,因此默认的最长等待时间为5秒).
通过设置max_analyze_duration更小的东西,比如50,000(~500ms),我们强制avformat_find_stream_info选择AVFormatContext具有较少信息的字段,同时将最坏情况的等待时间限制为更合理的情况.根据我的经验,这并没有造成任何问题(尽管这可能取决于您的视频源的方式).该probesize字段确定avformat_find_stream_info可以从流中读取的字节数.请注意,如果将此值设置得太低,则可能无法获得准确的编解码器信息
| 归档时间: |
|
| 查看次数: |
2401 次 |
| 最近记录: |