gstreamer推流SRT协议视频,VLC播放SRT视频(一)

前言

Secure Reliable Transport(SRT)是安全、可靠、低延时的多媒体实时传输协议。SRT协议使用AES进行数据加密,运用FEC进行前向纠错,并且有流量控制、拥塞控制。类似于QUIC协议,SRT采用UDP代替TCP,在应用层提供发送确认机制、ARQ自动重传,减少端到端的延迟。

SRT探测实时网络带宽状况,有利于补偿网络拥塞引起的jitter网络抖动和带宽下降。为了实现低延迟码流传输,SRT协议会携带delay、jitter、丢包等信息。SRT提供多路复用机制,允许多个请求共享相同的端口。

随着RTMP协议的停止更新,以后SRT协议会有相当大的发展潜力。

本文参考资料:

参考:安全可靠的SRT实时传输协议_srt协议-CSDN博客

参考:网红直播学习:VLC如何播放灵派直播编码器SRT流_如何用vlc出srt-CSDN博客

参考:RTMP vs SRT:延迟与最大带宽的比较_srt rtmp-CSDN博客

注意:

1. 以下指令中,mode=listener 为推流, mode=caller  为拉流,latency 为延迟

2. 视频的地址,需要替换为自己的路径

3. 在Windows中,路径需要使用 / ,或者 \\ 

4. 使用的地址,是本地地址,例如自己的IP是192.168.1.113,那么推流和拉流的地址都是这个

一、Windows下本地回环测试

  • 使用gstreamer推流:

gst-launch-1.0 -v filesrc location=C:/Users/XXX/Desktop/testVideo/1080p_60fps_h264.mp4 ! decodebin ! x264enc ! mpegtsmux ! srtsink uri=srt://127.0.0.1:8088?mode=listener

  • 使用VLC播放SRT流:

使用VLC,打开网络串流:

输入地址:srt://127.0.0.1:8088?mode=caller

可以看到播放的效果:总的来说还是非常好的

二、Ubuntu推流,打开局域网的SRT视频

在Ubuntu中安装gstreamer,然后命令:

gst-launch-1.0 -v filesrc location=./1080p_60fps_h264.mp4 ! decodebin ! x264enc ! mpegtsmux ! srtsink uri=srt://192.168.1.113:8088?mode=listener

在局域网中,使用VLC播放

srt://192.168.1.113:8088?mode=caller&latency=50

连接速度非常快,效果也不错,SRT协议值得期待!!!

三、端口复用测试:

因为是3路1080P,60帧的视频流,但是发现占用CPU和网络的资源都不多,简直不要太牛

四、英伟达硬件加速:

  • 推流srt1: gst-launch-1.0 -v filesrc location=./1080p_60fps_h264.mp4 ! qtdemux name=demux demux.video_0 ! h264parse ! avdec_h264 ! x264enc ! mpegtsmux ! srtsink uri=srt://192.168.1.125:8088?mode=listener

  • 推流srt2: gst-launch-1.0 -v filesrc location=./1080p_60fps_h264.mp4 ! qtdemux name=demux demux.video_0 ! h264parse ! nvv4l2decoder ! nvvidconv ! x264enc ! mpegtsmux ! srtsink uri=srt://192.168.1.125:8088?mode=listener

  • 播放SRT:

gst-play-1.0.exe srt://192.168.1.125:8088?mode=caller
gst-launch-1.0 srtsrc uri=srt://192.168.1.125:8088?mode=caller ! decodebin ! videoconvert ! autovideosink
gst-launch-1.0 srtsrc uri=srt://192.168.1.135:8088?mode=caller ! decodebin ! autovideoconvert ! autovideosink
软:
gst-launch-1.0 -v srtsrc uri=srt://192.168.2.201:8088?mode=caller ! tsdemux ! queue ! h264parse ! avdec_h264 ! xvimagesink

硬件加速:
gst-launch-1.0 -v srtsrc uri=srt://192.168.2.201:8088?mode=caller ! tsdemux ! queue ! h264parse ! nvv4l2decoder ! nvvidconv ! xvimagesink

五、其他

SRT封RTP包推流:

gst-launch-1.0 -v filesrc location=C:/Users/YJL/Desktop/testVideo/1080p_60fps_h264.mp4 ! decodebin ! x264enc ! rtph264pay mtu=1316 ! srtsink uri=srt://127.0.0.1:8088?mode=listener

显示:(注意:这里的caps内容,需要根据上一条指令推流srtsink的caps来)

gst-launch-1.0 srtsrc uri=srt://127.0.0.1:8088?mode=caller ! capsfilter caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)64002a, payload=(int)96, a-framerate=(string)60" ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink

SRT使用硬解硬编推流

gst-launch-1.0 -v filesrc location=./1080p_60fps_h264.mp4 ! qtdemux name=demux demux.video_0 ! h264parse ! nvv4l2decoder ! nvv4l2h264enc ! mpegtsmux ! srtsink uri=srt://192.168.1.125:8089?mode=listener qos=true max-bitrate=100000000

SRT推流h264文件:

gst-launch-1.0 -v filesrc location=1080p_60fps.h264 ! decodebin ! x264enc ! mpegtsmux ! srtsink uri=srt://192.168.1.113:8088?mode=listener

推流srt h264: (测试发现,这个h264文件必须解码再编码,封装后发出才行,大概原因是此文件的video/x-h264的level为5,高于srt推荐的4.2版本,所以推流后无法播放) gst-launch-1.0 -v filesrc location=1080p_60fps.h264 ! h264parse ! nvv4l2decoder ! nvv4l2h264enc ! mpegtsmux ! srtsink uri=srt://192.168.2.201:8088?mode=listener

软编码过于消耗cpu,影响推流带宽 //gst-launch-1.0 -v filesrc location=1080p_60fps.h264 ! h264parse ! avdec_h264 ! x264enc ! mpegtsmux ! srtsink uri=srt://192.168.2.201:8088?mode=listener

播放SRT: gst-launch-1.0 -v srtsrc uri=srt://192.168.2.201:8088?mode=caller ! tsdemux ! queue ! h264parse ! avdec_h264 ! xvimagesink

gst-launch-1.0 -v srtsrc uri=srt://192.168.2.201:8088?mode=caller ! tsdemux ! queue ! h264parse ! nvv4l2decoder ! nvvidconv ! xvimagesink

USB相机推流SRT:

注意:

  1. 必须使用IP点对点传输,不可使用推流127.0.0.1来开启多个网段

  2. 分多路推流的时候,端口不可一样

虚拟机推流:

gst-launch-1.0 -v v4l2src device=/dev/video1 ! 'image/jpeg,width=1920,height=1080,framerate=30/1' ! jpegdec ! videoconvert ! x264enc ! mpegtsmux ! srtsink uri=srt://192.168.1.113:8088?mode=listener

英伟达推流:

gst-launch-1.0 -v v4l2src device=/dev/video0 ! 'image/jpeg,width=1920,height=1080,framerate=30/1' ! jpegdec ! nvvidconv ! nvv4l2h264enc ! mpegtsmux ! srtsink uri=srt://192.168.1.125:8088?mode=listener

播放:软

gst-launch-1.0 -v srtsrc uri=srt://192.168.1.113:8088?mode=caller ! tsdemux ! queue ! h264parse ! avdec_h264 ! autovideosink

播放:硬

gst-launch-1.0 -v srtsrc uri=srt://192.168.1.113:8088?mode=caller ! tsdemux ! queue ! h264parse ! nvv4l2decoder ! nvvidconv ! autovideosink

分多路推流:软件

gst-launch-1.0 -v v4l2src device=/dev/video1 ! 'image/jpeg,width=1920,height=1080,framerate=30/1' ! jpegdec ! videoconvert ! x264enc ! mpegtsmux ! tee name=vsrt vsrt. ! queue ! srtsink uri=srt://192.168.1.113:10016?mode=listener vsrt. queue ! srtsink uri=srt://127.0.0.1:10011?mode=listener

分多路推流:硬

gst-launch-1.0 -v v4l2src device=/dev/video0 ! 'image/jpeg,width=1920,height=1080,framerate=30/1' ! jpegdec ! nvvidconv ! nvv4l2h264enc ! mpegtsmux ! tee name=vsrt vsrt. ! queue ! srtsink uri=srt://192.168.1.125:10016?mode=listener vsrt. ! queue ! srtsink uri=srt://127.0.0.1:10011?mode=listener

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿龍1787

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值