其他分享
首页 > 其他分享> > 视频 – 有没有办法在两个RTMP流之间混合(取决于哪个),使用像FFMPEG这样的东西?

视频 – 有没有办法在两个RTMP流之间混合(取决于哪个),使用像FFMPEG这样的东西?

作者:互联网

(对问题标题抱歉,不太清楚如何说出来)

所以我正在为一个本地LAN派对开发一个交钥匙流媒体解决方案/服务器,使用梦幻般的nginx-rtmp来处理来自我们主要PC的输入RTMP流,并向Twitch和其他此类流媒体服务提供(希望)不间断的信号.

我想要实现的主要功能之一就是让服务器切换到本地网络摄像头(或其他流),如果我们不向它发送任何内容,这将完善我的零停机时间方法把目标放在.我已经研究过使用ffmpeg,参数如下:

ffmpeg -i "rtmp://127.0.0.1/in/stream" -i "rtmp://127.0.0.1/webcam/stream" -vcodec copy -acodec copy rtmp://127.0.0.1/out/stream

但是ffmpeg拒绝开始输出,除非它接收到两个输入,并且如果丢失输入则完全停止输出.

问题是我想不出任何替代方案,缺少:

>挂钩到nginx-rtmp的on_publish_done挂钩并触发一个脚本或其他东西来触发网络摄像头流在短暂延迟后启动(然后使用控制界面停止该流),或者
>让另一个系统运行Open Broadcaster Software并处理混合

如果有人有任何想法,无论多么愚蠢,我都会非常感激,因为我很难过!

解决方法:

据我所知,您的工作流程无法在FFmpeg中完成.该工作流可以在Wowza Streaming Engine上使用名为Loop until Live的模块在服务器端完成.

https://www.wowza.com/docs/how-to-loop-a-pre-roll-until-a-live-stream-starts-loopuntillive

基本逻辑.

>流1是“备份”流.这可以是VOD预卷文件或直播流.
> Stream 2是主流.
>如果仅流1正在运行,则呈现流1.当流2存在时,然后切换到关键帧上的流2.
>如果流2停止,则切换到关键帧上的流1.

我没有在FFmpeg中找到那个逻辑.

请注意,从一个流切换到另一个流时,所有流都是相同的.

视频:编解码器,宽度,高度,FPS,关键帧距离(GOP)和比特率.
音频:编解码器,通道,频率和比特率.

FFmpeg是一个依赖于顺序的过滤器链,它接受输入,修改它,然后产生输出.您可以放入图像或视频并输出图像或视频.音频是类似的,你可以放入一个编解码器,修改它,并以你选择的音频格式将其转储出来.

您可以拥有多个输入和多个输出.在多个输入的情况下,可以将它们复用到单个输出流中.

来自不同来源的音频和视频创建一个输出.

ffmpeg -i video.input -i audio.input -[modifications] -output

音频和视频来自一个来源但转到多个输出.我在博客的帖子中介绍了这一点.

https://videoblerg.wordpress.com/2016/08/16/how-to-create-abr-content-with-ffmpeg-in-one-pass/

FFmpeg设计简单,我在代码中找不到任何可以支持您工作流程的内容.但这并不意味着我没有错过它.

我知道这不是您想要的答案,但是您可以将代码添加到FFmpeg以支持此功能,或者创建一个工具来在FFmpeg之外执行此功能.创建的任何代码也应该是输入中性的,并支持RTSP,RTMP,MPEG-TS,RTP / SDP,HLS和循环文件.由于这不能解决您的问题,我没有期望收到您的50个代表的赏金.

标签:video-encoding,nginx,ffmpeg,video
来源: https://codeday.me/bug/20190812/1642288.html