我目前正在为我们的 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(与 AMS 的 nc 连接已建立)
2. 启动 FFMPEG 命令(它将空闲直到流发布)
3. 开始发布
但是如果我这样做(我们需要),则不会出现音频:
1. 启动 Stream
2. 用户加入,开始发布
3. 触发 ffmpeg 命令