GStreamer使用tee创建分支
可以使用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
|