迭代 YouTube/RTSP 流列表、添加文本叠加并公开为固定 RTSP 端点

问题描述 投票:0回答:1

我的目标是一个 shell 脚本或 Python 实用程序,以类似于以下 (.csv) 示例的格式循环浏览 YouTube/RSTP 源流列表(.csv、.yaml 或 .json):

url,overlay_text,delay_ms
rtsp://admin:[email protected]:554/Streaming/Channels/101,THIS IS OVERLAY TEXT,5000
https://www.youtube.com/watch?v=dQw4w9WgXcQ,THIS IS MORE OVERLAY TEXT,5000
.
.
.
rtsp://admin:[email protected]:554/Streaming/Channels/101,THIS IS OVERLAY TEXT,5000
https://www.youtube.com/watch?v=dQw4w9WgXcQ,THIS IS MORE OVERLAY TEXT,5000

对于文本文件中的每条记录,实用程序将:

  • 从指定源URL捕获流
  • 将该记录的
    overlay_text
    添加到流中
  • 代理或以其他方式将其公开为固定/不变的 RTSP 端点
  • 等待
    delay_ms
    该记录
  • 终止该流,继续处理下一个流,然后重复...使用相同 RTSP 端点公开下一个流。因此,对于该 RTSP 流的使用者来说,它似乎只是切换到不同源的流。
  • 当到达文本文件中的最后一条记录时,返回到开头

它可以像 Bash shell 脚本一样简单,读取输入文本文件并迭代它,使用适当的管道参数运行 Gstreamer

gst-launch-1.0
命令。

我可以处理文本文件的读取以及 Bash 或 Python 中的迭代。我只需要知道调用(和终止)gstreamer 以添加文本覆盖并公开为 RTSP 端点的正确方法。

python bash video-streaming gstreamer python-gstreamer
1个回答
0
投票

解决问题的最佳方法是使用 gstreamer 用 C 或 Python 编写应用程序。然而,对于您想要完成的任务,使用 gst-launch-1.0 创建的简单管道就足够了。我不是 bash 脚本方面的专家,所以我不会评论如何实现它。我可以为您编写一个简单的管道,在给定 rtsp 源的情况下添加文本叠加层,然后将其转发到另一个设备。管道会是这样的:

gst-launch-1.0 rtspsrc location=rtsp://your_rtsp_source/path ! rtph264depay ! avdec_h264 ! autovideoconvert ! textoverlay text="Your text" valignment=top halignment=left ! autovideoconvert ! x264enc ! rtph264pay ! udpsink host=192.168.1.2 port=12444

(host为接收设备IP,port为转发流的设备上使用的端口)

有更多自定义选项可用,使用 gst-inspect-1.0 textoverlay 查看可用的内容,例如文本大小、字体...

请记住,存在用于解码和编码 h264(或 h265,如果是这种情况)的特定元素,使用

gst-inspect-1.0 | grep h264

gst-inspect-1.0 | grep h265

将列出您设备上可用的元素,或者您也可以在 gstreamer 网站上搜索可用元素列表。上述管道仅适用于流式传输到 1 个设备的情况,如果您想要多播,请以类似的方式使用 multiudpsink。

使用udp接收器要求您的接收设备具有有关传入流的最少信息。配置如下的简单 .sdp 文件就足够了:

c=IN IP4 192.168.1.56
m=video 12444 RTP/AVP 96
a=rtpmap:96 H264/90000

其中 192.168.1.56 是流媒体设备的 IP,12444 是将流推送到的端口,H264 是流的编码方式。然后文件只需保存为 name.sdp 即可。

使用上面的 .sdp 配置文件并使用带有 VLC 的 192.168.1.2 机器,我可以看到来自 192.168.1.56:12444 的流:


为了完整起见,我在 192.168.1.56 上用于测试的管道如下:

gst-launch-1.0 videotestsrc ! video/x-raw, width=1920, height=1080 ! x264enc ! rtph264pay ! udpsink host=192.168.1.2 port=12444
© www.soinside.com 2019 - 2024. All rights reserved.