You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求实现YouTube/RTSP流循环切换并叠加文字的RTSP服务方案

GStreamer流切换与RTSP代理实现方案

核心GStreamer命令

1. RTSP源处理命令

直接读取RTSP流,添加文字叠加后推送到固定RTSP端点:

gst-launch-1.0 rtspsrc location="$SOURCE_URL" latency=0 ! rtph264depay ! h264parse ! avdec_h264 ! textoverlay text="$OVERLAY_TEXT" font-desc="Arial 24" x=20 y=20 color=0xffffffff ! x264enc tune=zerolatency ! rtph264pay ! rtspsink location=rtsp://0.0.0.0:8554/stream sync=false
  • latency=0:降低RTSP源延迟,适配实时场景
  • tune=zerolatency:编码器做低延迟优化
  • sync=false:避免音视频不同步问题

2. YouTube源处理命令

需先通过yt-dlp获取YouTube实际流地址,再执行流处理:

# 获取YouTube真实流地址
YOUTUBE_STREAM=$(yt-dlp -f bestvideo[ext=mp4]+bestaudio[ext=m4a]/best -g "$SOURCE_URL")
# 启动流处理与RTSP推送
gst-launch-1.0 uridecodebin uri="$YOUTUBE_STREAM" ! textoverlay text="$OVERLAY_TEXT" font-desc="Arial 24" x=20 y=20 color=0xffffffff ! x264enc tune=zerolatency ! rtph264pay ! rtspsink location=rtsp://0.0.0.0:8554/stream sync=false

进程管理与循环切换逻辑

启动与记录PID

将GStreamer命令后台运行,记录进程ID用于后续终止:

# 以RTSP源为例启动处理命令
gst-launch-1.0 rtspsrc location="$SOURCE_URL" latency=0 ! rtph264depay ! h264parse ! avdec_h264 ! textoverlay text="$OVERLAY_TEXT" font-desc="Arial 24" x=20 y=20 color=0xffffffff ! x264enc tune=zerolatency ! rtph264pay ! rtspsink location=rtsp://0.0.0.0:8554/stream sync=false &
GST_PID=$!

等待与终止进程

等待指定延迟后,终止当前GStreamer进程,确保端口释放:

# 将毫秒转换为秒,等待指定时长
sleep $((DELAY_MS / 1000))
# 终止进程并清理僵尸进程
kill $GST_PID
wait $GST_PID 2>/dev/null

关键注意事项

  • 依赖安装:需确保系统已安装gstreamer1.0-plugins-base、gstreamer1.0-plugins-good、gstreamer1.0-plugins-bad、gstreamer1.0-libav、gstreamer1.0-rtsp-server,处理YouTube源还需安装yt-dlp
  • 叠加样式自定义:可调整textoverlay参数,比如添加背景色background-color=0xff000000(黑色半透明)、修改字体大小等
  • 端口冲突处理:若8554端口被占用,可修改rtspsink地址中的端口号,确保循环全程使用同一端口
  • 异常处理:可增加进程状态检查,避免因源地址无效导致脚本中断

内容的提问来源于stack exchange,提问作者3z33etm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:42:54