【obs-studio开源项目从入门到放弃】obs 配置 srt推流


前言

现在各大云厂商都支持上行 srt推流,利用 srt的低延迟、快速重传的特性减少用户卡顿和直播延迟。OBS Stuido 25.0 版本之后也支持了srt推流。这篇文章通过srs流媒体服务器和obs studio搭建一个srt的推拉流测试环境。

OBS 是通过 FFmpeg的 libavformat 来支持 SRT。FFmpeg提供 libsrt的封装,option配置方面支持的比较全面。但是 FFmpeg avio接口设计上缺少对统计信息的支持,libsrt 的统计信息全部丢失。注意 FFmpeg libavformat对 libsrt的封装没有考虑双向传输的场景,丢失了双向传输的能力。

OBS 推流srt原理和录制 ts 本地视频原理一致,只是输出的地址一个是网络地址,一个是本地磁盘路径。
推 SRT 流使用的 output id: ffmpeg_mpegts_muxer

详细内容请参考这篇blog:ffmpeg_muxer 视频的录制(flv-mp4-ts-srt-udp-tcp)

srt协议简介

Secure Reliable Transport(简称 SRT)是一种相对较新的开源流媒体协议,最初由 Haivision 开发(2013 年首次演示)并由SRT 联盟推广,该联盟包括流媒体/视频/电信行业的许多大玩家。它承诺:
(1) 通过数据包恢复机制(重传或 ARQ 自动重复请求;以及 FEC 前向纠错)+ 互联网绑定和
(2) 低延迟(低至编码器和摄取服务器之间往返的两倍,通常具有亚秒级延迟)。

SRT git 仓库 : https://github.com/Haivision/srt
SRT 联盟官网:https://www.srtalliance.org/

具体的 srt协议细节参考文章最后列出的参考链接。

obs 配置srt推流

srt的配置示例

srt的推拉流地址
符合yaml格式,以#!::为开始。
key为h,表示vhost和appname/stream;
key为m,表示推流(publish)/拉流(request);

//推流地址格式
srt://127.0.0.1:10080?streamid=#!::h=live/livestream,m=publish
//拉流地址格式
srt://127.0.0.1:10080?streamid=#!::h=live/livestream,m=request

srs流媒体服务器配置srt服务

第一步 拉取srs项目源码

git clone https://github.com/ossrs/srs
cd srs/trunk

第二步 编译srs支持srt推拉流服务

./configure --srt=on && make

第三步 编写SRS配置文件
将以下内容保存为文件,譬如conf/srt.conf,服务器启动时指定该配置文件(srs的conf文件夹有该文件)。

# conf/srt.conf
listen              1935;
max_connections     1000;
daemon              off;
srs_log_tank        console;
srt_server {
    enabled on;
    listen 10080;
}
vhost __defaultVhost__ {
}

第四步 启动SRS

./objs/srs -c conf/srt.conf

播放 srt 流

请确保 ffmpeg 支持 libsrt
编译的 ffmpeg 要支持 libsrt –enable-libsrt

可以使用 ffplay播放 srt流
播放命令

ffplay srt://127.0.0.1:10080?streamid=#!::h=live/livestream,m=request

ffmpeg 推拉流 srt

ffmpeg 拉流转推 srt -> rtmp

ffmpeg -i srt://127.0.0.1:10080?streamid=#!::h=live/livestream,m=request -c copy -f flv rtmp://live-cdg.twitch.tv/app/streamKey

ffmpeg 推流 srt, 注意 srt 封装的是 ts 格式的容器。需要指定容器格式 -f mpegts

ffmpeg -re -i ./doc/source.flv -c copy -f mpegts 'srt://127.0.0.1:10080?streamid=#!::h=live/livestream,m=publish'

总结

整个 srt 推拉流的环境的搭建还是比较容易,接下来可以通过 Wireshark 抓包配合 srt 的白皮书学习协议的具体细节。

以上都是个人工作当中对obs-studio开源项目的理解,难免有错误的地方,如果有欢迎指出。

若有帮助幸甚。


技术参考

1.本文部分技术点出处:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
2.使用 SRT 协议进行流式传输: https://github.com/obsproject/obs-studio/wiki/Streaming-With-SRT-Protocol
3.srs SRTWiki :https://github.com/ossrs/srs/wiki/v4_CN_SRTWiki
4.技术解码 | SRT和RIST协议综述
5.SRT协议在电视直播中的应用:https://www.bilibili.com/video/BV1xV411a7BW
6.新一代直播传输协议SRT: https://mp.weixin.qq.com/s/P4cbRxJnXlkQOtXNkdDL4w

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
obs-studio 推流 demo c 是一个使用 C 语言编写的示例程序,用于演示如何使用 OBS Studio推流功能。OBS Studio 是一款流行的开源流媒体软件,可以帮助用户创建和管理各种直播内容。 该示例程序提供了一种基本的推流方式,使用户能够通过编写简单的 C 程序,将音视频内容推送到指定的流媒体服务器。通过该示例程序,用户可以了解如何使用 OBS Studio推流 API,以及如何将其集成到自己的应用程序中。 使用该示例程序,可通过以下步骤实现推流功能: 1. 初始化 OBS Studio,创建一个推流实例。 2. 配置推流服务器的参数,如推流地址、用户名、密码等。 3. 设置音视频输入源,可以是摄像头、麦克风等。 4. 开始推流,将音视频数据发送至服务器。 5. 在推流过程中,可实时监测推流状态,如是否成功连接服务器、是否有数据发送等。 6. 推流完成后,释放资源,关闭推流实例。 通过这个示例程序,用户可以通过 C 语言编写自己的 Streamlabs OBS 插件,或者根据实际需求扩展更多推流功能。同时,该示例程序也为用户提供了一个快速上手 OBS Studio 推流的方式,方便用户进行流媒体直播。 总之,这个 obs-studio 推流 demo c 是一个实用的示例程序,通过它可以学习和理解使用 OBS Studio 进行推流的基本原理和方法。希望这个简短的回答能够对您有所帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值