微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有中间文件的 FFmpeg 直播流

如何解决带有中间文件的 FFmpeg 直播流

现在我正在使用 rtmpdump 进行实时流并将其发送到 ffmpeg 而不是 Nginx 作为 m3u8。这个 rtmpdump 有时会在中途失败,需要重新启动,我会自动执行,但这需要大约 10-15 秒。在此期间 ffmpeg 停止向 Nginx 发送数据,因此最终用户错误地进行流剪切。我正在寻找一种方法来使其完全连续,以便最终用户不会断开连接。

我是 ffmpeg 和流媒体的完全新手,所以如果您知道更好的方法,请告诉我,但我想做的是创建一个命名管道,其中主要 ffmpeg 不断侦听并将数据发送到 Nginx。当流开始时,我将开始向该管道发送 loading.mp4,当我收到 rtmpdump 数据时,我将停止它并发送 rtmpdump,当 rtmpdump 失败时,我将立即开始发送 loading.mp4 数据,因此基本上不会有停机时间流,至少我希望不会有。就像我说的,我是流媒体的新手,但作为一名程序员,我认为这种方法应该有效......

现在我正在尝试使用我从在线文档中查看的选项来修改代码,可能有我正在使用的完全不必要的选项......

mkfifo /var/streams/test
ffmpeg -re \
    -f live_flv -fflags +igndts -fflags flush_packets -fflags discardcorrupt \
    -y -i "/var/streams/test" -c:v copy -map 0:0 -c:a copy -map 0:1? \
    -fflags +genpts -frame_drop_threshold 1.0 -preset ultrafast \
    -f flv -flvflags no_duration_filesize "rtmp://localhost:12345/hls/test" \
    -async 1 -vsync 2

当我运行这个命令时,主要的 ffmpeg 开始监听管道,然后我运行

ffmpeg -y -re -stream_loop -1 -i "/var/updating.mp4" -c:v copy -map 0:0 -c:a copy -map 0:1? \ 
-f flv -flvflags no_duration_filesize "/var/streams/test"

到这里一切正常,并开始将数据发送到管道,然后再发送到 Nginx,我可以在 VLC 上查看,我的问题就从这里开始......当我停止发送 update.mp4 的第二个 ffmpeg 实例时,重新启动它,主要 ffmpeg 实例抛出“[live_flv @ 0x558799fe0f80] 数据包不匹配”错误,这与我开始发送的视频完全相同,因此编解码器和所有其他内容都相同。我尝试在网上寻找“数据包不匹配”错误,但找不到解决方案...

谁能告诉我我在这里做错了什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。