最近发现线上华为云机器出现拉流失败的日志,拉取的是 flv 流,即走的是 http 协议:
错误日志:
[tcp @ 0x49f85c0] Failed to resolve hostname proxy-hls.duowan.com: Name or service not known

通过在机器上抓包 dns 数据发现,在 dns 响应到达之前 ffmpeg 出现了上述错误,
显然 ffmpeg 中出现了超时,从抓包数据看,dns 响应超过 2 秒 ffmpeg 就会出现超时;
dns query request:
dns query response:

翻阅 ffmpeg 文档发现 tcp 里面有一个 timeout 选项,以微秒为单位,
因此尝试在拉流参数中添加 -timeout 10000000 选项,后续发现错误的出现频率有降低,
但仍然存在,但此时是 4 秒超时,也就是 -timeout 参数并非 dns 超时时长;
继续阅读文档,发现 http 协议里面有个 reconnect_delay_max 选项,在 dns 解析超时后可以
继续重试,将该参数的值设为 10 ,并在 mac 上设置 dns 延迟到 8 秒,发现可以成功,说明该
参数起作用了,后续继续观察线上的情况。