FFMpeg 在流式传输到 YouTube 时在直播和文本视频之间切换

FFMpeg 在流式传输到 YouTube 时在直播和文本视频之间切换

我已经运行 Youtube 直播一段时间了,我正在开发一个解决方案,以便我可以通过浏览器远程运行直播。我的计划是让一个 ASP.net core web api 项目运行后台服务,当我将直播信息发送给它时,它会启动 FFMpeg 来直播 USB 网络摄像头。我还需要能够按下按钮来“静音”直播,这样它就会显示一个带有一些文本覆盖的空白视频(即“技术难题”)。

到目前为止,我的解决方案是使用两个 FFMpeg 实例。切换模式时,我会终止一个进程并启动另一个进程。我已经让它工作了一点,但是当我在“静音模式”和“流媒体模式”之间来回切换时,Youtube 似乎在更改流媒体时出现阻塞。我怀疑这是因为当我从静音模式切换回流媒体模式时,youtube 无法识别静音模式已结束。此外,静音模式会像我想要的那样显示文本,但它会导致 Youtube 播放器停止“直播”,因此,如果我确实让常规流媒体再次运行,用户必须单击“直播”按钮才能保持最新状态。

以下是两种模式的命令行:

流模式:

ffmpeg.exe -f dshow -i video="<webcam name>" -f dshow -i audio="<microphone name>" -vcodec libx264 -pix_fmt yuv420p -preset veryfast -r 30 -g 60 -b:v 3500k -f flv rtmp://a.rtmp.youtube.com/live2/<stream key>

静音模式(blank.mp4 是一段3秒长的空白视频):

ffmpeg.exe -stream_loop -1 -i ./FFMpeg/blankvid.mp4 -vf "drawtext=fontfile=C\\:/Windows/Fonts/Arial.ttf:text='Technical Difficulties':fontcolor=white:fontsize=60:box=1:[email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2" -vcodec libx264 -pix_fmt yuv420p -preset veryfast -r 30 -g 60 -b:v 3500k -f flv -flvflags no_duration_filesize rtmp://a.rtmp.youtube.com/live2/<stream key>

最后说明:我知道可能有一种方法可以使用颜色过滤器来创建黑色视频,而不是使用空白视频.mp4。如果您还知道如何获取该参数,那将非常有帮助。

答案1

因此,经过大量的搜索和反复尝试,我似乎现在可以正常工作了。不确定所有参数是否都是必要的,但问题出在“静音”命令上。我还弄清楚了如何使用颜色过滤器而不是空白视频。我最终将其更改为

ffmpeg -re -stream_loop -1 -f lavfi -i "color=black:s=1280x720" -f lavfi -i anullsrc -vcodec libx264 -pix_fmt yuv420p -preset veryfast -r 30 -g 60 -b:v 3500k -vf "drawtext=fontfile=C\\:/Windows/Fonts/Arial.ttf:text='Technical Difficulties':fontcolor=white:fontsize=60:x=(w-text_w)/2:y=(h-text_h)/2" -f flv rtmp://a.rtmp.youtube.com/live2/<stream key>

相关内容