文章目录

  • 前言
  • 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. 从源码分析DEARGUI之背变换
  2. HTML5响应式企业集团织梦模板,响应式HTML5信息产业企业集团网站织梦模板
  3. 纯css3开发的响应式设计动画菜单(支持ie8)
  4. 实践出真知之Spring Cloud之基于Eureka、Ribbon、Feign的真实案例
  5. LeetCode-203:移除链表元素
  6. java log4j 代码配置文件_除了Log4jXML、属性文件和源代码(主要是Java)之外的配置日志的方法?...
  7. IT招聘负责人:成功简历六大要素
  8. 菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven)
  9. C语言从入门到精通所需的7本书
  10. java如何制作浪漫表白界面_表白网页在线制作详细教程-我要表白网-最浪漫的表白网页在线生成网站...
  11. 计算机组成原理乘法设计,资料计算机组成原理课设 定点补码一位乘法器的设计.doc...
  12. 吉他软件打谱常用的的音符时值
  13. 用tushare数据自定义期货大宗商品指数(2)
  14. python期货数据 库_如何用python或者基于vnpy框架将期货tick数据聚合成1分钟数据呢?...
  15. shell获取主机信息并根据定时任务发送邮件到手机
  16. HTML5面试题总结
  17. 微信视频号如何流量变现赚钱呢?
  18. 超级计算机 弦理论,关于灵魂的六大猜想
  19. 【MicroPython】基于microbit的MicroPython编程--HELLO WORLD
  20. HBase在标签方面的应用

热门文章

  1. MSVCRTD.lib(exe_main.obj) : error LNK2019: 无法解析的外部符号 _main,函数 “int __cdecl invoke_main(void)“ (?invo
  2. JDK和oracle的安装配置
  3. 做一个php 框架 书,开发自己的php框架
  4. 一个屌丝程序猿的人生(十一)
  5. Android 系统OTA升级
  6. 带你学开源项目:Meizhi Android之RxJava Retrofit最佳实践
  7. hjr-内梅罗综合指数法
  8. hcie网上培训的优势什么?
  9. Docker学习 (一) 下载安装及基本常用命令
  10. 污水处理系统 | 污水处理项目