我目前正在为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: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.启动流(建立与AMS的连接)
2.启动FFMPEG命令(它将空闲直到流发布)
3.开始发布
但如果我这样做(我们需要),则不会出现音频:
1.开始流
2.用户加入,开始发布
3.触发ffmpeg命令
答案 0 :(得分:0)
由于越来越多的人必须实施HLS功能,我很快就想发布我的回答"我的原始问题。
我发现问题必须与probeize有关。
正如您在文档中看到的,probesize定义了ffmpeg在开始分段之前等待流信息的时间。
在正在运行的直播中,我必须将其设置为大约1000k才能正确获取音频流。
没有一切按预期工作。 但请注意,更高的探测强度会导致更高的延迟!