本文的内容将包括: SRT字幕基本格式 SRT特效设置 ffmpeg中srt相关用例 1 SRT基本格式 SRT字幕通常以srt作为后缀,作为外挂字幕,多数主流播放器都支持直接加载并显示SRT字幕,具体细节看参考 3 ffmpeg中srt相关用例 使用ffmpeg可以很轻松的把ass/vtt/lyric转换为srt文件,命令如下: ffmpeg -i a.ass b.srt ffmpeg -i c.vtt d.srt /ffplay test.mp4 -vf subtitles=test.srt 对于FFmpeg中的srt demuxer的实现逻辑,基本上是参考SRT基本格式实现的,其中并未支持各种格式,具体代码请查看 本文整理了srt字幕的基本格式以及支持的格式,同时介绍了ffmpeg中srt格式生成和渲染的用法,仅供后续参考。 5 参考资料 wiki-SRT multimedia-SubRip mkv-SRT SRT字幕的颜色以及一些特效的设置 SRT字幕完全手册 SubRit Text 发布者:全栈程序员栈长,转载请注明出处
在上一篇《如何使用高清编码器与vMix进行SRT连接》文章中详细介绍了SRT中caller模式和listener模式,近期有很多伙伴反馈,对Rendezvous模式不是特别了解,下面千视电子将分享Rendezvous 功能 两台设置Rendezvous模式的设备会共同协商,通过相同的UDP端口号建立一个SRT会话。 一旦完成SRT连接的建立,SRT源设备和SRT目标设备便开始交换控制信息,然后直接利用建立起来的SRT通道去传输数据。 这时,就可以使用Rendezvous模式来建立SRT连接,我们需要将长沙的SRT设备(编码器)设置为Rendezvous模式,并写入深圳SRT设备的出口公网IP地址和一个没有被使用的UDP端口号,同时, 再将深圳的SRT 设备(解码器)也设置为Rendezvous模式,并写入长沙SRT设备的出口公网IP地址和相同的UDP端口号,这样就可以建立起SRT连接了。
解析srt文件,封装为list返回 首先新建个class,表示单个字幕数据的实体类 public class SrtEntity { /** * 字幕序号 */ public int ) { return content; } public void setContent(String content) { this.content = content; } } 2.编写srt 转list的方法 /** * 解析srt文件,封装为list并返回 * @param srtPath */ public List<SrtEntity> getSrtInfoList(String srtPath begin = System.currentTimeMillis(); FileOperateServiceImpl impl = new FileOperateServiceImpl(); // 解析srt 获取list List<SrtEntity> list = impl.getSrtInfoList("E:\\111.srt"); long end = System.currentTimeMillis
RTMP协议存在累计延迟与加密方面的问题,为适应互联网视频低延时,高质量的要求,以UDP为核心,具有创造性的SRT,QUIC等流媒体视频方式将成为新的选择。 而伴随着互联网视频低延时,高质量的要求逐渐提升,相对而言,以UDP为核心的流媒体视频方式成为新的选择,包括SRT,QUIC等。 SRT使用UDP协议,旨在利用有损网络来确保可靠性。它通过使用“高性能”发送器和接收器模块来实现这一点 - 该模块不会通过握手确认来阻塞网络。这允许它扩展并最大化可用带宽。 SRT保证发送的分组节奏(压缩视频信号)与解码器接收的分组节奏相同。 SRT增加了专为高效安全的视频流而设计的其他功能: 128/256 AES加密,通过公共网络在链路级提供安全性 内容不可知,并在单个SRT流中汇集多个视频,音频和数据(元数据)流,使其能够轻松支持高度复杂的工作流程
SRT协议介绍 1.1 SRT联盟 SRT联盟是由Haivision和Wowza两大公司牵头组成的一个开源组织,通过汇集行业资源以求更好地实现提高音视频的传输质量的共同目标。 1.4 SRT缺点 SRT协议的缺点主要有:协议额外带宽较高,且SRT协议的传输策略激进,会对同网的其他用户带来影响;除此之外,SRT的协议栈在用户态并且占用了3~4个线程,我们知道线程的切换存在开销 落地与实践 工欲善其事,必先利其器——SRT协议虽然基于UDP,但是其拥有很多自己的语义,为了更好分析复杂网络情况下SRT传输协议的情况,我们使用SRT协议解析插件实现了对于一层层嵌套的SRT语义的展示 除此之外我们还实现了talentover SRT,也完善了一些纯SRT的推流工具,这些都便于我们能够更好地开发SRT协议。 3.1 LibRTMP支持SRT 落地与实践中第一点便是LibRTMP支持SRT,我们知道所有的TCP Socket都可以无缝替换为SRT Socket API。
SRT误区3:SRT不支持所有视频编解码器 与特定视频和音频格式的其他协议不同,SRT不限制您使用特定容器或编解码器,因为它与媒体或内容无关。SRT在网络传输级别运行,充当您内容的包装器。 SRT误区4:SRT无法通过互联网传输4K视频 同误区3,SRT协议与内容无关的,可以完全支持4K UHD和HD视频。 SRT误区5:SRT只能在互联网上使用 虽然SRT最初设计用于解决流媒体视频内容在互联网上的主要挑战,但一旦开源后开发人员就开始在自己的硬件和软件堆栈上为所有类型的网络实施SRT。 SRT误区7:SRT不能与RTP互兼容操作 SRT允许您可靠、安全高效地传输RTP,因此您可以绝对利用SRT,同时维护现有的基于RTP的广播基础架构。 SRT误区8:SRT仅支持高达30 MBit/s的码率 SRT中曾经有一个默认设置,它将SRT使用的最大带宽设置为30 MBit/s。
SRT协议介绍 1.1 SRT联盟 SRT联盟是由Haivision和Wowza两大公司牵头组成的一个开源组织,通过汇集行业资源以求更好地实现提高音视频的传输质量的共同目标。 1.4 SRT缺点 SRT协议的缺点主要有:协议额外带宽较高,且SRT协议的传输策略激进,会对同网的其他用户带来影响;除此之外,SRT的协议栈在用户态并且占用了3~4个线程,我们知道线程的切换存在开销 落地与实践 工欲善其事,必先利其器——SRT协议虽然基于UDP,但是其拥有很多自己的语义,为了更好分析复杂网络情况下SRT传输协议的情况,我们使用SRT协议解析插件实现了对于一层层嵌套的SRT语义的展示 除此之外我们还实现了telent over SRT,也完善了一些纯SRT的推流工具,这些都便于我们能够更好地开发SRT协议。 所以我们需要构建两个开发方案:第一个是SRT<-proxy->TCP,开发代理程序;第二个是在Nginx上开发SRT协议栈模块。 SRT代理方案。
SRT字幕简介 首先,SRT 是一种主流格式的字幕文件。它以 SubRip 格式存储,扩展名为. srt。 而且,SRT字幕文件格式简单、清晰,可以直接使用文本编辑器阅读、编辑。 Proud Mary keep on burnin'* 6 00:01:53,046 --> 00:01:55,844 * Rollin', rollin' * SRT 空白行(表示当前字幕段的结束) 解析SRT字幕 如果你想用程序解析 SRT 格式字幕,开源社区有很多优秀的实现,我们也不需要重新造轮子。 例如,Java 平台下,我们可以使用开源社区的 SRTParser 帮我们完成 SRT 格式字幕文件的解析。 感谢开源社区。 参考 https://docs.lokalise.com/en/articles/5365539-subrip-srt
本文将从SRT协议的原理分析入手,尝试定义出一个衡量SRT链路可靠性高低的指标:链路安全冗余量(Secure-Margin),并详细介绍如何依照这个指标来部署一个可靠的SRT传输链路,并分析在不同的直播场景中的参数调整策略 类比这些概念,本文将从SRT协议的理论基础谈起,尝试定义一个衡量SRT链路可靠性的指标——安全冗余量(Secure-Margin)。接着根据这个指标,讨论SRT协议中相关参数的设置步骤和策略。 SRT协议最初是一个私有协议,在2017年4月由SRT联盟将其开源,由于该协议良好的性能以及开源、应用灵活等特性,越来越多的厂商和设备开始支持SRT协议。 随着SRT应用领域的发展和扩大,最新版的SRT也加入了对FEC的支持,从而更好地适应各类场景下的应用。 《公网传输技术之SRT协议解析》的下篇将从SRT数据包的角度来分析SRT协议的运行机制和原理,并演示如何通过Wireshark来进行抓包和故障诊断,敬请期待。 参考文献: 1.
如QUIC、SRT等。本次我们将重点讲述SRT的特点与应用。 SRT协议的特点 Haivision联手Wowza在UDT的基础上针对音视频实时性提出了SRT协议。 在这种情况下SRT Packet就不会足够快地输出,因为SRT会最终被过低的错误配置影响到。 SRT在SRS4.0中的方案用 3.1 SRT在SRS4.0中的方案应用 3.1.1 最后一公里——SRT推流 我们推荐从编码器到推流至边缘节点的部分使用SRT。 SRT与QUIC 接下来我们对比SRT与QUIC,总结二者特点。 当然,SRT的缺点也不容忽视,如SRT的拥塞控制过于简单,需要在传输层合入BBR算法,原生SRT不支持连接迁移等。
srt 文件拼接 下面将拆分后的音频和字幕导入 B 站云剪辑中。 这里字幕中的汉字显示为乱码,一开始以为是从字幕说导出 srt 文件时没有选择带 BOM 的 utf-8 格式所致: 切换到带 bom 格式后仍不行: 但同样的乱码问题,对于 Srt Sub Master 下面做个试验,选择三个测试文件,总计 500 多行: > wc -l 220808* 211 220808-114030.srt 183 220808-114613.srt 135 220808 sh srtcat.awk.sh 220808-114*.srt > 220808.txt ... SRT字幕格式
本部分的重点是研究RTMP和SRT对端到端延时的影响,为了使结果具有可比性,所以在测试阶段使用配置完全相同的设备,唯一的变量便是RTMP和SRT协议。 而SRT流的目的地为Haivision媒体网关服务器,也托管在AWS实例上,并且二者位于同一个数据中心。虽然Wowza也支持SRT协议,但是它的SRT使用的是非常旧的版本,不能发挥SRT的全部潜力。 而SRT流每一个数据包都包含时间戳,这使得接收端可以重建信号特性并且显著降低缓冲区的需求,也就是说,SRT发送端的比特流和接收端的比特流是高度相似的。RTMP和SRT流传输前后信号特性如图3所示。 (b)SRT视频流信号特性 图3 RTMP和SRT流信号特性 RTMP和SRT的另一个显著区别是包重传机制。 展望未来,SRT会成为流媒体公网传输的又一个选择。
Alex Converse首先介绍了什么是SRT,SRT是一种基于UDP的流媒体传输协议,可以用于网络条件不好的场景。然后解释了为什么选择SRT,主要包括SRT与RTMP两种协议的对比。 接着,Alex Converse介绍了SRT的历史,SRT可以追溯到一个更老的协议UDT,Haivision给出了SRT的第一个开源版本,并于2017年发布,然后Alex Converse又介绍了SRT 接着,Alex Converse介绍了SRT的技术概述。依次讲述了UDP协议,SRT数据有效载荷,数据包格式,缓冲区等技术要点。此外还介绍了SRT协议的应答流程,并介绍了ACK数据包格式。 然后介绍了SRT的握手协议和用于握手的数据包格式,SRT的加密方式。最后给出了了解更多SRT协议相关知识的途径。 附上演讲视频: 附上之前有关SRT的帖子: SRT: 开源的视频传输协议 SRT协议技术讨论 SRT协议的内部工作原理 RTMP vs SRT:延迟与最大带宽的比较 通过SRT Hub和Microsoft
腾讯云支持SRT协议直播推流,客户反馈相比传统的RTMP,SRT对推流卡顿问题有明显改善[1]。本文重点介绍SRT的功能特性、适用的场景以及后续改进提升的方向,并简要介绍下RIST协议。 SRT协议 SRT协议的起源和发展 SRT协议继承自UDT协议,包括协议设计和代码库。UDT是基于UDP的文件传输协议,最初是针对高带宽、高延迟场景(如远距离光纤传输)设计,用于弥补TCP的不足。 双向传输; 这一能力使得SRT在一些场景可以替换TCP,比如用SRT做RTMP的传输层。 一般的传输协议,从一端send()到另一端receive()所占用的时间是波动的,SRT抹平了网络的抖动,可以保证从srt_sendmsg()到srt_recvmsg()的时间基本恒定。 /doc/html/draft-sharabayko-srt-01 [4] libsrt开源项目; https://github.com/Haivision/srt [5] SRT联盟; https:/
本文主要参考Haivision的SRT白皮书,概述了SRT的一些关键特性,并将SRT与常见传输格式及新一代传输协议QUIC进行比较,最后简述SRT的发展现状。 SRT与常见传输格式比较 SRT与目前市场上的大多数其他视频流传输格式(如RTMP、HLS和MPEG-DASH)相比有几个特点,包括: 非专有 SRT是一个开源解决方案,已经集成到多个平台和体系结构中 成本低 SRT系统是使用免费的开放源代码库实现的,这有助于降低各方的成本。SRT部署不需要版税、长期合同或每月订阅费。 Haivision 和 Wowza共同创建了SRT联盟,自从SRT在2017年成为一种开源技术以来,已有130多家公司通过支持SRT联盟支持了该开源项目。 现在,有超过50种支持SRT的产品已经上市,包括IP摄像机、编码器、解码器、网关、OTT平台和CDNs。SRT协议在全球许多应用程序和市场上被数千个组织使用。
致谢 SRT从无到有,是施维大神的努力。 SRT从有到好用,是志宏大神的努力。 两位大神有动力做SRT,原因之一是群里热情的SRT用户,在不断尝试和使用SRT。 SRT要自己编译出来,比较难,因为有个钻石依赖问题(如下图),任何一步的设置或者版本有问题,肯定就编译失败了。 FFmpeg要编译SRT的支持,SRS也要编译SRT的支持,就真的有点难。 FFmpeg要编译SRT的支持,SRS也要编译SRT的支持,就真的有点难。 提供FFmpeg的Docker,静态编译libsrt和其他依赖,可以直接使用,也可以拷贝出来在对应的系统中使用。 /objs/srs -c conf/srt2rtc.conf Build SRT/SRS by Docker 还有一种编译代码的,更容易的方法,就是用开发Docker环境编译SRT/SRS,因为依赖都已经安装好了 开发镜像,CentOS 7:ossrs/srt,不再需要这个额外的专门镜像编译SRT。
对于CDN或者直播平台,我们之前是使用RTMP,但现在也有一些流媒体服务器的解决方案使用SRT作为上传推流的方式。 2 SRT协议 2.1 SRT协议简介 ? 但是SRT的“传统优势领域“还是实时的视音频传输,SRT本质上是一个点对点的传输协议(单播而不是组播)。SRT的亮点在于能够克服有损网络中的抖动和丢包。 2.3 SRT协议 ? 上图是SRT协议的效果图,可以看到SRT在解码端重新恢复了原有的码率特性和帧间隔。 2.6 SRT协议流程图 ? 经常使用SRT的朋友一定对SRT中常用的“呼叫监听”模式很熟悉。 2.7 SRT协议数据包 ? SRT中有四个比较重要的数据包类型,咱们从数据包结构来学习SRT协议有助于在实际工作中检测链路状态,或者是进行故障排除。 2.7.1 SRT协议数据包结构 ?
公网传输技术之SRT协议解析(上)着重讨论了如何衡量SRT协议的可靠程度,以及如何在不同应用场景下配置SRT链路的参数。 图1 SRT协议工作流程 2 SRT数据包结构 SRT协议根据UDT协议(UDP-based Data Transfer Protocol)改进而来,已经在2020年3月10日向IETF提交了RFC 众所周知,SRT的传统优势领域是点对点的实时音视频传输,而近两年,SRT协议在上行推流方面有了迅速的发展,很多主流平台和公司都支持使用SRT协议来代替RTMP协议进行上行推流,其中的关键点就是SRT的StreamID 出于兼容性的考虑,即使双方的SRT版本都高于1.3,第一个握手请求信息也是HSv4格式。 SRT标志位:共有8位标志位,来实现SRT的不同模式和功能。 而配置扩展模块(CONFIG)包含了四种:SRT_CMD_SID、SRT_CMD_CONGESTION、SRT_CMD_FILTER、SRT_CMD_GROUP,其中SRT_CMD_SID扩展模块就是负责
SRT的主要特点低延迟: SRT通过优化网络传输和减少协议开销,实现了低延迟的视频流传输,适合实时通信和直播等应用。 灵活性: SRT支持多种编解码器和媒体格式,可以灵活地适应不同的应用场景和设备。开源与跨平台: SRT是一个开源项目,可以在多种操作系统和平台上使用,方便开发者进行集成和部署。 SRT的应用场景SRT广泛应用于各种需要高效、可靠、安全传输视频流的场景,包括但不限于:视频直播:在视频直播领域,SRT可以确保低延迟、高质量的视频传输,提升观众的观看体验。 SRT与其他协议的比较与RTSP比较:RTSP主要是一种控制协议,用于控制流媒体服务器的媒体流传输,而SRT则是一种传输协议,专注于视频流的实时、可靠、安全传输。 RTSP可以与SRT等传输协议结合使用,实现更复杂的流媒体应用。
在直播过程中因网络丢包,会造成各种丢帧,会造成各端卡顿甚至花屏,给观众造成很不好的观看体验,针对链路丢包,SRT是如何解决的呢? SRT采用的是ACK+ NACK的解决方案。 对于高码率的链路,每10ms确认一次可能会不及时,为此,SRT每收到64个包,便会额外回复一个LITEACK,用来快速确认数据,尽可能快的让发送窗口移动。 每次收包时,SRT会计算当前的"乱序度"。 举个例子,如下图所示: 上图当前时刻的"乱序度"为2,当发现丢包需要重传时,SRT会延迟2个包发送NACK,用来减少一部分因为UDP乱序导致的无效重传。 基于以上特性,腾讯视频云将SRT作为传输层之上的协议,可以将任何基于tcp的应用层协议改造为基于SRT的应用层协议,腾讯和斗鱼一起选择rtmp over SRT尝试在APP端应用SRT,针对弱网主播进行源头的优化 在斗鱼户外版块首次尝试使用SRT后,RTMP推流和SRT推流对比如下: 某长期丢包的户外主播,打开SRT开关后,推流,播放的卡顿如下: ?