使用FFmpeg将IP摄像头对接YouTube的技术问题咨询
解决FFmpeg推流YouTube的两个问题
先修正你原脚本里的两处错误:
-pix_fmt +是无效参数,YouTube要求视频采用yuv420p像素格式,需改为-pix_fmt yuv420p-vcodec libx264和-c:v copy冲突,二者只能选其一;考虑到断连切换图片的需求,必须用编码而非直接复制流,所以删除-c:v copy
问题1:断连时保持推流并显示默认图片
要实现RTSP断连时不中断YouTube推流,同时播放默认图片,可借助FFmpeg的自动重连参数+滤镜切换流的方案,脚本如下:
rtsp_url="rtsp://xxxxxx" rtmp_url="rtmp://xxxxxx" default_img="/绝对路径/默认图片.jpg" ffmpeg \ # 开启RTSP自动重连 -reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 10 \ -rtsp_transport tcp -i "$rtsp_url" \ # 无限循环播放默认图片 -stream_loop -1 -i "$default_img" \ # 滤镜实现平滑切换:RTSP断连时切到图片,恢复时切回 -filter_complex " [0:v]fade=t=out:st=2:d=1[v_rtsp]; [1:v]fade=t=in:st=0:d=1[v_img]; switch=eval=frame:cases='eof(0)':default_source=0[v] " \ # 映射处理后的视频流和RTSP音频流(无音频则忽略) -map "[v]" -map 0:a? \ # 编码参数适配YouTube要求 -c:v libx264 -tune zerolatency -pix_fmt yuv420p \ -c:a aac -b:a 128k -strict experimental \ -f flv "$rtmp_url"
关键参数说明:
-reconnect系列参数:让FFmpeg在RTSP断连后自动尝试重连,最大间隔10秒-stream_loop -1:让默认图片无限循环播放switch滤镜:当RTSP流中断(触发eof(0))时,自动切换到图片流;RTSP恢复后切回原流fade滤镜:实现流切换时的淡入淡出效果,避免画面生硬跳转
问题2:保持YouTube播放器ID一致
播放器ID由你使用的固定推流密钥和持久直播事件决定,按以下操作即可固定:
- 登录YouTube Studio,进入「直播」→「管理直播」
- 创建或选择一个「持久直播」事件(不要创建一次性临时直播)
- 获取该直播事件对应的固定RTMP推流URL和密钥,不要使用系统生成的一次性密钥
- 你的FFmpeg脚本始终推送到这个固定的RTMP地址,即使推流中断重连,YouTube会复用同一个播放器会话,ID不会改变
注意:不要每次推流都创建新的直播事件,必须复用同一个持久直播事件,否则会生成新的播放器ID。
内容的提问来源于stack exchange,提问作者vcima
相关产品推荐
相关产品推荐

