【问题标题】:FFMPEG - RTMP to HLS no audio outputFFMPEG - RTMP 到 HLS 没有音频输出
【发布时间】:2016-05-22 08:14:50
【问题描述】:

我目前正在为我们的 livecam 应用程序开发一个动态 HLS 分段器。 因此,我捕获了外部 RTMP 流并使用 ffmpeg 将其转换为片段。

以下命令有效:

ffmpeg -i rtmp://"$serverip"/"$application"/mp4:"$stream_name".f4v -c:v libx264 -profile:v baseline -level 5.1 \
-c:a aac -strict experimental -flags +global_header -f mpegts - | ffmpeg -i - -c copy -map 0 -f segment \
-segment_list /tmp/hls/"$id"/"$stream_name".m3u8 -segment_format libmp3lame -segment_time 10 \
-segment_wrap 4 /tmp/hls/"$id"/"$stream_name"%03d.ts

但是使用这个命令,我在直播和 HLS 输出之间确实有很大的延迟(大约 1-2 分钟!)。

所以我尝试了另一个命令,导致延迟为 20-30 秒!我唯一的问题是,音频流无法识别,也没有放入 HLS 文件(意味着我只有视频,但根本没有音频):

ffmpeg -probesize 50k -i rtmp://"$serverip"/"$application"/mp4:"$stream_name".f4v \
-c:v libx264 -b:v 128k -g 90 -c:a aac -strict experimental -flags -global_header -map 0 \
-f segment -segment_time 3 -segment_list /tmp/hls/"$id"/"$stream_name".m3u8 -segment_list_flags +live \
-segment_list_type m3u8 -segment_list_size 5 -segment_format mpegts /tmp/hls/"$id"/"$stream_name"%d.ts

我想,-c:a aac 标志也应该完成混合音频的工作。

您对第二个命令出了什么问题有什么建议吗?我当然也必须对音频流进行分段!

提前致谢

更新:

FFMPEG 命令的一些输出:

我启动了命令(2),并得到了音频输出,但似乎不是每次都有效。

工作命令 2 的输出,音频正在工作: http://pastebin.com/bhxfNQBg

工作命令 2 的输出,音频不工作(没有改变): http://pastebin.com/engEuSdn

对我来说奇怪的是,这条线:

[flv @ 0x1eed900] New audio stream 0:1 at pos:716680 and DTS:0s

只有在 hls 端的音频不工作时才会出现这种情况。

任何帮助将不胜感激

更新 2:
在流已经发布后启动 ffmpeg 命令时似乎出现问题。
如果我按照这些步骤操作,一切正常:
1. 启动 Stream(nc 与 AMS 的连接已建立)
2. 启动 FFMPEG 命令(它会一直空闲直到流发布)
3. 开始发布

但如果我这样做(我们将需要),则不会出现音频:
1. 开始直播
2. 用户加入,开始发布
3.触发ffmpeg命令

【问题讨论】:

  • 第二个命令的控制台输出是什么?
  • @Mulvya 越来越奇怪了——为了得到你的输出,我再次开始了我的第二个命令,最后我也得到了音频!再次直接启动命令,我没有声音。在输出中,您可以看到第二次,Stream #0:0 不像以前那样是音频流。但是我不知道为什么它有时会起作用。我的流总是同时流式传输(我可以在客户端听到播放我尝试使用 ffmpeg 获取的流的音频)

标签: audio ffmpeg rtmp http-live-streaming muxer


【解决方案1】:

因为越来越多的人必须实现 HLS 功能,所以我很快想发布我对原始问题的“答案”。

我发现问题与probesize有关。

正如您在文档中看到的,probesize 定义了 ffmpeg 在开始分段之前等待流信息的时间。

在正在运行的实时流中,我必须将其设置为 1000k 左右才能正确获取音频流。

并非一切都按预期工作。 但请注意,更大的探针大小会导致更高的延迟!

【讨论】:

  • 你能添加一个使用probesize的例子吗?
  • @chovy 只是在我的原始帖子中看到第二个 ffmpg 语句并将 ffmpeg -probesize 50k 替换为 ffmpeg -probesize 1000k
猜你喜欢
  • 2019-03-25
  • 2021-10-28
  • 1970-01-01
  • 2019-03-06
  • 2020-01-03
  • 2019-09-05
  • 2018-07-14
  • 2018-12-18
  • 2016-10-18
相关资源
最近更新 更多