分享

GStreamer使用tee创建分支

 开花结果 2024-03-20 发布于北京

可以使用tee命令对一个视频流创建分支。将数据分割成多个数据流的分支。

需要在每个分支中使用单独的队列元素为每个分支提供单独的线程。否则一个分支阻塞数据流会阻塞其他分支

使用场景:捕获视频后,其中一个分支显示在屏幕,另一个分支写入文件。播放音频并且挂载可视化模块

输入源为测试视频、输出为两个流

1
2
3
4
5
6
//tee 测试视频 去掉延时  ----通过
gst-launch-1.0 videotestsrc pattern=pinwheel ! decodebin ! tee name=t ! queue ! videoconvert ! x264enc bitrate=1000 tune=zerolatency ! video/x-h264 ! h264parse ! video/x-h264 ! queue ! flvmux streamable=true ! rtmpsink location='rtmp://192.168.18.188/live/999' \ 
t. ! queue ! videoconvert ! x264enc ! flvmux streamable=true ! queue ! rtmpsink location='rtmp://192.168.18.188/live/888'

输入源为屏幕、输出为两个流

1
2
3
4
5
6
//tee 屏幕打流 去掉延时  ----通过
gst-launch-1.0 ximagesrc ! decodebin ! tee name=t ! queue ! videoconvert ! x264enc bitrate=1000 tune=zerolatency ! video/x-h264 ! h264parse ! video/x-h264 ! queue ! flvmux streamable=true ! rtmpsink location='rtmp://192.168.18.188/live/999'  t. ! queue ! videoconvert ! x264enc ! flvmux streamable=true ! queue ! rtmpsink location='rtmp://192.168.18.188/live/888'

输入源为屏幕、输出为两个流(其中一个流加延时)

关键参数:sync=false 设置为不同步否则。出去的两个流都存在延时。

而且一定要把tee的两个分支放在不同的queue中。

1
2
3
4
5
6
gst-launch-1.0 ximagesrc startx=0 use-damage=0 ! decodebin ! tee name=t ! queue ! videoconvert ! x264enc bitrate=1000 tune=zerolatency ! video/x-h264 ! h264parse ! video/x-h264 ! queue max-size-buffers=0 max-size-bytes=0 max-size-time=90000000000 !  queue max-size-buffers=0    max-size-time=90000000000 min-threshold-time=15000000000 ! flvmux streamable=true ! rtmpsink location='rtmp://192.168.18.188/live/999' t. ! queue ! videoconvert ! x264enc ! queue ! flvmux streamable=true ! rtmpsink location='rtmp://192.168.18.188/live/888' sync=false

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多