iphone - ffmpeg : playing udp stream

标签 iphone objective-c ipad ffmpeg streaming

我正在使用 ffmpeg 在 iDevice 上播放 udp 流。 它确实成功播放了视频和音频。

我遇到的唯一问题是以下函数调用确实需要很长时间

avformat_find_stream_info

完成该函数的执行大约需要10秒。 我正在播放的媒体具有以下属性:

MPEG-4 VIDEO v3 (DIV3)
RESOLUTION : 640x480
Frame rate : 25

有什么想法可以解决这个延迟吗?

最佳答案

我意识到这是一个老问题,但我最近遇到了这个问题,所以虽然这可能对OP没有帮助,但为了后代,我会写下一个答案。

简短的回答:

probesize 和/或 max_analyze_durationAVFormatContext 字段设置为小于默认值的值,即

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);

对于更长的答案:

avformat_find_stream_info 从输入数据流中读取并尝试根据它看到的数据包填充AVFormatContext。它可以在 AVFormatContext 结构中设置的 max_analyze_duration 值内执行此操作。

例如,本地视频文件通常会非常快,但对于网络流,这可能需要很长时间(特别是如果流损坏)。这就是 avformat_find_stream_info 的漫长等待时间发挥作用的地方。 max_analyze_duration 的默认值为 5000000(以 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 可以从流中读取的字节数。请注意,如果将此值设置得太低,您可能无法获取准确的编解码器信息

关于iphone - ffmpeg : playing udp stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11766430/

相关文章:

ios - NSString 的值返回 null,但不确定为什么?

ipad - 如何在 PC 上使用 Apple SDK?

iphone - 监视区域但位置图标在应用程序被杀死时消失

iOS 一分钟内杀死在后台运行的 CallKit VoIP 应用程序

iPhone - 如何为 CAKeyframeAnimation 制作圆形路径?

ios - 如何自定义tableView编辑模式ios

iphone - ABPersonViewController 不保存更改

ios - 在 iOS 中,使用 UIViewController 构建通用 UI 组件是一个好习惯吗?

javascript - iPad 版 Chrome 中不显示嵌入式 Google map

ios - swift 3 : How to get language code from a country code?