【obs-studio开源项目从入门到放弃】obs 配置 srt推流
文章目录
- 前言
- srt协议简介
- obs 配置srt推流
- srt的配置示例
- srs流媒体服务器配置srt服务
- 播放 srt 流
- ffmpeg 推拉流 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
【obs-studio开源项目从入门到放弃】obs 配置 srt推流相关推荐
- 【obs-studio开源项目从入门到放弃】obs高级输出内存泄露
文章目录 前言 FFmpeg高级输出内存泄露 内存泄露原因 解决办法 前言 obs系列文章入口:obs-studio项目简介和架构 FFmpeg高级输出内存泄露 已解决 PR: obs-ffmpeg: ...
- 【obs-studio开源项目从入门到放弃】obs-studio项目简介和架构
文章目录 前言 一.obs-studio项目简介 二.windows平台的编译步骤 三.obs的核心线程 obs视频渲染线程 obs视频编码线程 obs音频编码线程 rtmp发送线程 四.常用插件的介 ...
- 【obs-studio开源项目从入门到放弃】预览窗口中source的UI操作绘制处理
文章目录 前言 获取鼠标位置 绘制选中框 裁剪源 拉伸源 移动源 总结 前言 obs-studio项目简介和架构:https://blog.csdn.net/qq_33844311/article/d ...
- 【obs-studio开源项目从入门到放弃】video_thread 视频编码线程理解
文章目录 前言 1.视频编码线程的创建时机 video_output_open函数创建视频编码线程 2.视频编码线程的工作内容 video_output_cur_frame 线程真正的工作函数 详细解 ...
- 你用的那些开源项目可能已经被放弃维护!
在国内开源之路上,BAT 这些大型互联网科技公司走在前列. 有数据为证:截至 2019 年 3 月 22 日,阿里开源的总项目数为 1243 个,百度开源的总项目数为 746 个,腾讯开源的总项目数为 ...
- 【scratchjr】开源项目开发踩坑之环境配置篇
开源项目地址如下: github托管项目地址:https://github.com/LLK/scratchjr 环境配置时相关错误整合解决方案: 根据文档配置: https://github.com/ ...
- WebStackHugo导航开源项目部署流程和内容一键配置
本项目是基于纯静态的网址导航网站 webstack.cc 制作的Hogo主题,基于开源项目的基础这里总结了一下在 centos7 云服务器部署和本地一键配置数据更新静态页面的笔记. 不得不说,Hugo ...
- 中英文拼写检测纠正开源项目使用入门 word-checker 1.1.0
项目简介 word-checker 本项目用于单词拼写检查.支持英文单词拼写检测,和中文拼写检测. 特性说明 可以迅速判断当前单词是否拼写错误 可以返回最佳匹配结果 可以返回纠正匹配列表,支持指定返回 ...
- 钱少事多,开源项目维护人员几乎集体出走
聚焦源代码安全,网罗国内外最新资讯! 作者:Steven J. Vaughan-Nichols 编译:奇安信代码卫士 最近,Linux 内核稳定版本的维护人员 Greg Kroah-Hartman ...
最新文章
- Apache访问日志详解
- Verilog初级教程(11)Verilog中的initial块
- python复制文件夹到另一个目录_【python】复制文件到另一个相同目录的文件夹中...
- usb传输标准和接口标准
- 深度学习(三)——Autoencoder, 词向量
- ORACLE备份中的压缩
- arm+linux+entry.s,linux kernel 之底层中断机制entry_armv.S
- 面试热问——你在前一份工作(实习)学到什么?
- mybatis报错(三)报错Result Maps collection does not contain value for java.lang.Integer解决方法...
- 开始使用windows live writer写博客。
- 全球搜索引擎集合(主要有移动搜索APP的)
- java毕业设计房屋租赁管理系统Mybatis+系统+数据库+调试部署
- 中标麒麟 NeoKylin-SDK 里都有哪些库文件
- java xml格式化_使用java将xml格式化
- 2022-2028全球及中国葡萄种植市场研究报告
- Qt 字体字号和字体像素关系
- 北京h3c服务器维修站,h3c服务器管理地址
- 【从零开始学爬虫】采集B站UP主数据
- 计算机学院毕业礼物,“风里雨里,我们在这里等你“计算机学院举行毕业礼物赠予仪式...
- arduino esp8266开发板下载出错解决方法