SRT协议推拉流

今天有个实习生问我 SRT 协议如何推拉流,那我们今天就来彻底搞懂它。

文章目录

    • [SRT 协议地址简单介绍](#SRT 协议地址简单介绍)
    • [SRT 推流](#SRT 推流)
    • [SRT 拉流](#SRT 拉流)
    • SRT协议概述
    • [SRT 和RTMP协议](#SRT 和RTMP协议)

SRT 协议地址简单介绍

每个公司可能定义的规则及端口不一样,所以本次示例不代表所有,可参考七牛srt 推流地址

bash 复制代码
srt://<RTMPPublishDomain>:1935?streamid=#!::h=<Hub>/<streamTitle>,m=publish,domain=<RTMPPublishDomain>

解析:

  • srt:// : 这明确指示客户端 (OBS) 使用SRT 协议去发起连接
  • <RTMPPublishDomain>:1935 告诉客户端,连接到哪个服务器的哪个端口
  • ?streamid=#!::h=<Hub>/<streamTitle> :重要参数,用于在握手时传递元数据, 它通常用于模拟 RTMP 中的 "App名称(hub)"和"流名称"

#运行流程

当推流软件(OBS等)看到 srt:// 开头,就会准备使用SRT协议。它向服务器 miku-live-rtmp.teweichaowan.com1935 端口 发起一个 SRT 握手连接 。服务器上的SRT服务正监听着这个端口,于是接受连接并进行通信。这个端口内部运行的其实是SRT服务,而不是RTMP服务。

SRT 推流

方式一:OBS

直接输入推流地址

方式二:FFMPEG 推流

shell 复制代码
ffmpeg -re -stream_loop -1 -i /Users/Downloads/bbb_30fps_gop_60_3mbps.mp4 -vcodec copy -acodec copy -f mpegts 'srt://publish-srt.sdk.com:1935?streamid=#!::h=test/ztest02,m=publish,[domain=](http://domain=hycdn-publish-srt.qnsdk.com/)publish-srt.sdk.com'
  • -f mpegts : 至关重要! SRT 协议通常传输的是 MPEG-TS 容器格式的流。这个选项告诉FFmpeg 将音视频流打包成 MPEG-TS 格式后再通过 SRT 发送。
  • -re 是按视频播放帧率推流

SRT 拉流

方式一:ffplay

ffplay -i 'srt://play-referer.sdk.com:1935?streamid=#!::h=hutest/ztest,m=request,[domain=play-referer.sdk.com](http://domain=hycdn-play-referer.qnsdk.com/)'

方式二:VCL 播放

VLC 播放 SRT 需要单独设置streamid,不能在输入 URL 的地方携带 streamid

(1)Preferences------interface------show all------stream output------Access output ------ SRT

输入streamd后面的内容,例如 #!::h=hutest/ztest,m=request,[domain=play-referer.sdk.com](http://domain=hycdn-play-referer.qnsdk.com/)

(2)输入URL 播放

输入URL 播放即可播放

SRT协议概述

SRT 全称 **Secure Reliable Transport ,是一款开源、低延迟、可靠的点对点流媒体传输协议,**从目前测试情况下,好像很少有客户使用该协议。但是也要简单了解下。

SRT 基于 UDP 协议,但通过「自定义可靠传输机制」弥补了 UDP 无保障的缺陷。简单看下SRT 的核心技术原理

1. ARQ 重传机制(可靠传输核心)

  • 原理:发送端标记每个数据包,接收端实时反馈 "已接收" 确认(ACK);若超时未收到 ACK,发送端重传丢失的数据包。
  • 优化:采用「选择性重传」(仅重传丢失的包,而非全部重传),避免 TCP 重传导致的延迟飙升。
  1. FEC 前向纠错(抗丢包关键)
  • 原理:发送端在数据包中插入 "冗余数据"(如每发送 8 个有效包,附带 2 个冗余包),接收端即使丢失部分数据包,也能通过冗余数据还原原始内容,无需等待重传。
  • 配置:可通过参数调整冗余率(如 10%~50%),冗余越高抗丢包能力越强,但带宽占用越高。
  1. 智能拥塞控制(适配网络波动)
  • SRT 内置「基于延迟的拥塞控制算法」(Latency-Based Congestion Control),实时监测网络延迟和带宽波动,动态调整发送速率,避免网络拥塞导致的丢包。
  • 支持自定义 "目标延迟"(如设置 100ms),协议会自动平衡延迟和可靠性。
  1. 原生加密(安全传输)
  • 所有传输数据默认采用 AES-256-GCM 加密,密钥通过协商机制动态生成,无需额外配置 TLS/SSL,避免传输过程中数据被窃取或篡改。

SRT 和RTMP协议

SRT 和 RTMP 是流媒体传输领域最常用的两大协议,核心差异源于传输层基础(UDP vs TCP),最终体现在延迟、可靠性、适用场景等关键维度,

  1. 传输层基础:SRT 是基于UDP,RTMP是基于TCP
  2. 核心设计目标:SRT 低延迟 + 抗丢包 + 安全,解决公网传输痛点;RTMP 传统直播推流,适配 CDN 分发,兼容性优先
  3. 抗丢包能力:SRT比RTMP较强
  4. 部署:SRT:支持点对点传输(比如摄像头直接推流到云端服务器,无需中转),降低部署成本,但需解决 UDP 端口开放、NAT 穿透问题(公网传输需公网 IP 或打洞服务器);RTMP:必须通过 RTMP 服务器 / CDN 中转(比如阿里云 / 腾讯云 CDN),部署简单,但需支付 CDN 费用,且中转会增加延迟。

关于SRT 协议简单了解下,知道怎么推拉流即可。

相关推荐
小曾同学.com3 小时前
NetInt 硬件编码实战转码压测
ffmpeg·netint硬件编码
扶尔魔ocy5 小时前
【QT window】ffmpeg实现录音功能之AAC格式--mp4
qt·ffmpeg·视频处理
小曾同学.com5 小时前
HLS协议中m3u8列表及ts文件的由来
ffmpeg·hls·ts文件·m3u8列表
skyjilygao19 小时前
n8n整合ffmpeg
ffmpeg·视频编辑·n8n
别动哪条鱼1 天前
SDL 函数对各对象缓冲区的影响
网络·数据结构·ffmpeg
daidaidaiyu2 天前
FFmpeg 关键的结构体
c++·ffmpeg
俺俺2 天前
(51)OBS通过pv挂载
华为云·对象存储·pv·obs·华为云组件
扶尔魔ocy2 天前
【QT window】ffmpeg实现录音功能之无损格式--PCM
ffmpeg·pcm
止礼2 天前
FFmpeg8.0.1 源代码的深入分析
ffmpeg