文章目录

  • 前言
  • 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推流相关推荐

  1. 【obs-studio开源项目从入门到放弃】obs高级输出内存泄露

    文章目录 前言 FFmpeg高级输出内存泄露 内存泄露原因 解决办法 前言 obs系列文章入口:obs-studio项目简介和架构 FFmpeg高级输出内存泄露 已解决 PR: obs-ffmpeg: ...

  2. 【obs-studio开源项目从入门到放弃】obs-studio项目简介和架构

    文章目录 前言 一.obs-studio项目简介 二.windows平台的编译步骤 三.obs的核心线程 obs视频渲染线程 obs视频编码线程 obs音频编码线程 rtmp发送线程 四.常用插件的介 ...

  3. 【obs-studio开源项目从入门到放弃】预览窗口中source的UI操作绘制处理

    文章目录 前言 获取鼠标位置 绘制选中框 裁剪源 拉伸源 移动源 总结 前言 obs-studio项目简介和架构:https://blog.csdn.net/qq_33844311/article/d ...

  4. 【obs-studio开源项目从入门到放弃】video_thread 视频编码线程理解

    文章目录 前言 1.视频编码线程的创建时机 video_output_open函数创建视频编码线程 2.视频编码线程的工作内容 video_output_cur_frame 线程真正的工作函数 详细解 ...

  5. 你用的那些开源项目可能已经被放弃维护!

    在国内开源之路上,BAT 这些大型互联网科技公司走在前列. 有数据为证:截至 2019 年 3 月 22 日,阿里开源的总项目数为 1243 个,百度开源的总项目数为 746 个,腾讯开源的总项目数为 ...

  6. 【scratchjr】开源项目开发踩坑之环境配置篇

    开源项目地址如下: github托管项目地址:https://github.com/LLK/scratchjr 环境配置时相关错误整合解决方案: 根据文档配置: https://github.com/ ...

  7. WebStackHugo导航开源项目部署流程和内容一键配置

    本项目是基于纯静态的网址导航网站 webstack.cc 制作的Hogo主题,基于开源项目的基础这里总结了一下在 centos7 云服务器部署和本地一键配置数据更新静态页面的笔记. 不得不说,Hugo ...

  8. 中英文拼写检测纠正开源项目使用入门 word-checker 1.1.0

    项目简介 word-checker 本项目用于单词拼写检查.支持英文单词拼写检测,和中文拼写检测. 特性说明 可以迅速判断当前单词是否拼写错误 可以返回最佳匹配结果 可以返回纠正匹配列表,支持指定返回 ...

  9. 钱少事多,开源项目维护人员几乎集体出走

     聚焦源代码安全,网罗国内外最新资讯! 作者:Steven J. Vaughan-Nichols 编译:奇安信代码卫士 最近,Linux 内核稳定版本的维护人员 Greg Kroah-Hartman ...

最新文章

  1. Apache访问日志详解
  2. Verilog初级教程(11)Verilog中的initial块
  3. python复制文件夹到另一个目录_【python】复制文件到另一个相同目录的文件夹中...
  4. usb传输标准和接口标准
  5. 深度学习(三)——Autoencoder, 词向量
  6. ORACLE备份中的压缩
  7. arm+linux+entry.s,linux kernel 之底层中断机制entry_armv.S
  8. 面试热问——你在前一份工作(实习)学到什么?
  9. mybatis报错(三)报错Result Maps collection does not contain value for java.lang.Integer解决方法...
  10. 开始使用windows live writer写博客。
  11. 全球搜索引擎集合(主要有移动搜索APP的)
  12. java毕业设计房屋租赁管理系统Mybatis+系统+数据库+调试部署
  13. 中标麒麟 NeoKylin-SDK 里都有哪些库文件
  14. java xml格式化_使用java将xml格式化
  15. 2022-2028全球及中国葡萄种植市场研究报告
  16. Qt 字体字号和字体像素关系
  17. 北京h3c服务器维修站,h3c服务器管理地址
  18. 【从零开始学爬虫】采集B站UP主数据
  19. 计算机学院毕业礼物,“风里雨里,我们在这里等你“计算机学院举行毕业礼物赠予仪式...
  20. arduino esp8266开发板下载出错解决方法

热门文章

  1. 10个常用的Linux命令解析
  2. Centos7:Docker安装Gitlab
  3. Geth-1.10.16 私链搭建
  4. 文本、语义和社交分析技术,未来几年市场发展趋势的预测
  5. 计算机一级考试只能在校生考吗,计算机一级不是在校生能考嘛
  6. 【交换机的高级特性、RSTP和MSTP】交换理论测试题(已纠完错)
  7. 矩阵求逆的c#代码实现
  8. matlab同步电机三相短路,基于Matlab的同步电机三相突然短路的仿真.pdf
  9. 原生js获取以固定字符开头的控件id,并设置属性
  10. 6-2应用层-域名系统DNS