后来出于某些原因普及起来,被主流多媒体播放器所支持,由此也催生了各种字幕组产生。 本文的内容将包括: SRT字幕基本格式 SRT特效设置 ffmpeg中srt相关用例 1 SRT基本格式 SRT字幕通常以srt作为后缀,作为外挂字幕,多数主流播放器都支持直接加载并显示SRT字幕,具体细节看参考 I started having these dreams of flying. 6 00:00:49,740 --> 00:00:51,520 终获自由 I was free. 7 00:00:54,620 当然某些播放器还对SRT做了扩展,可以支持ASS/SSA中部分格式化代码。 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
下面就以SRT协议为例,介绍如何通过OBS Studio和SRT Streamer向流媒体服务器做SRT直播推流。 然后启动电脑上的流媒体播放器VLC media player,打开网络串流“srt://127.0.0.1:8890? 685314-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:hls://__defaultVhost__/live/test然后启动电脑上的流媒体播放器 connection[MediaServer] [576478-event poller 0] SrtSession.cpp:118 onError | 2-16(112.5.138.145:57022) 6( 播放器(__defaultVhost__/live/test)断开,耗时(s):16结合SRT Streamer直播录制画面和VLC media player的直播观看界面,可知通过SRT Streamer
解码器使用了VLC播放器,这是工业和家庭使用最广泛的视频播放器之一。本测试装置使用了标准的VLC安装设置,默认缓存为250ms。 RTMP流的传输目的地为Wowza流引擎,并托管在AWS上。 客户端播放器越远,吞吐量就越小,除非距离很远,否则播放器的默认设置是足够的。但缓冲区也不能设置得太低,不然会严重限制吞吐量。 测试装置中,硬件编解码器选型为Haivision Makito X,实际测试的延时结果如图6所示。实验结果表明,使用硬件编解码器可以显著降低延时。 ? 图6 软件编解码器与硬件编解码器延时测试结果对比 最大传输带宽对比 上面的测试结果证明了SRT在降低延时方面具有显著的作用,下面的测试则主要研究SRT在视频质量方面的性能。 具体测试方法为,使用2Mbps视频流来确定缓冲区大小,一旦2Mbps流稳定下来,则固定缓冲区大小不变,依次使用1,2,6,10,20Mbps的流进行传输测试。
比如: •客户端:在直播领域,支持SRT的客户端比较多,比如编码器有FFmpeg和OBS,播放器ffplay和VLC都能支持SRT,还有vmix和芯象客户端都支持SRT,而支持WebRTC的客户端就少很多了 •云服务:SRS云服务器可以无门槛的构建SRT应用,只需要会复制粘贴,不用搞懂SRT那个沙雕URL格式。若需要大规模应用,各家视频云都已经支持了SRT协议接入,无缝从小规模变成大规模。 因此,SRT做超清低延迟直播,是非常成熟的方案。广电使用SRT相当的成熟了,实际互联网应用中,比如B站直播可以选择RTMP或者SRT推流。 •Server[5] 服务器如何配置低延迟•SRT[6] SRT服务器特别配置•Player[7] 播放器如何配置低延迟•Benchmark[8] 如何准确的测量延迟•Bitrate[9] 从0.5到6Mbps srs/issues/1147#lagging-encoder [5] Server: https://github.com/ossrs/srs/issues/1147#lagging-server [6]
RTMP协议存在累计延迟与加密方面的问题,为适应互联网视频低延时,高质量的要求,以UDP为核心,具有创造性的SRT,QUIC等流媒体视频方式将成为新的选择。 )最初是由Macromedia为通过互联网在Flash播放器与一个服务器之间传输流媒体音频、视频和数据而开发的协议。 而伴随着互联网视频低延时,高质量的要求逐渐提升,相对而言,以UDP为核心的流媒体视频方式成为新的选择,包括SRT,QUIC等。 SRT保证发送的分组节奏(压缩视频信号)与解码器接收的分组节奏相同。 SRT增加了专为高效安全的视频流而设计的其他功能: 128/256 AES加密,通过公共网络在链路级提供安全性 内容不可知,并在单个SRT流中汇集多个视频,音频和数据(元数据)流,使其能够轻松支持高度复杂的工作流程
今天分享的是下载b站外挂字幕 ,在本地用 potplayer 播放器播放b站视频也能看字幕了,需要用到 potplayer 播放器 和字幕文件。 直接输入b站地址执行脚本下载,本地会生成一个srt文件。 点击下载可以看到字幕内容,下载格式支持ass,srt等。 ? 16 ... 21.35 MiB / 21.35 MiB [================================================] 100.00% 3.08 MiB/s 6s 如果还想看弹幕参考之前文章 借助 potplayer 播放器,在本地播放 b 站视频也能看弹幕了 下载弹幕文件就能看了。
RTMP Streamer是一个安卓手机端的开源RTMP直播推流框架,可用于RTMP直播和RTSP直播,其升级版还支持SRT直播(腾讯视频云就采用SRT协议)。 SRT Streamer是一个安卓手机端的开源SRT协议直播推流框架,可用于RTMP直播和SRT直播。 有关SRT Streamer的源码下载、安装过程和使用说明详见之前的文章《使用SRT Streamer开启APP直播推流》。 3、开源音视频播放器开源音视频播放器主要有两种,一种是电脑端的播放软件,以ffplay和VLC media player为代表;另一种是手机端的播放软件,以ExoPlayer和ijkplayer为代表。 综合以上的开源直播录制软件、开源流媒体服务器和开源音视频播放器,即可搭建完整的直播系统,该系统的效果图详见之前的文章《利用RTMP协议构建电脑与手机的直播Demo》和《利用SRT协议构建手机APP的直播
一般而言,延迟是指设备捕获特定视频帧(相机,播放器,编码器等)的时间与在最终用户的显示器上播放该帧的时间之间的时间差。 播放器还可能尝试下载不完整的片段,而CDN依次使用分块传输编码提供完成的部分,然后保持连接,直到将新片段添加到要下载的片段中为止。一旦在CDN端形成(开始)整个段,就将完成向播放器的段传输。 ? 但是,在不兼容的情况下,播放器仍可以使用CMAF规范内的内容,并且具有HLS或DASH典型的标准延迟时间。 低延迟HLS 苹果在2019年6月发布了低延迟HLS规范。 6、有关播放列表的信息会并行加载到相邻的配置文件中(信誉报告),以加快切换速度。 ? 图4.LL HLS操作原理 CDN和播放器完全支持此规范的预期延迟不到3秒。 图6.开放网络中的SRT操作原理 SRT中的数据传输可以是双向的:两个点都可以同时发送数据,并且还可以充当侦听器(侦听器)和发起连接的一方(呼叫者)。当双方都需要建立连接时,可以使用交会模式。
另外,软件组合了多种标准DVD播放器的功能,例如,全面支持VCD 2.0、精确解码、可选用户界面以及视频显示选项,可完美播放蓝光、DVD、MKV、MP4、h.265等全高清视频格式。 PotPlayer PotPlayer 是一款功能超级强大的电脑端影音播放器软件,内置强大解码器,启动速度快、播放性能稳定,无需装第三方解码器即可播放主流格式视频。 ,超低资源占用,适用于安防、教育、单兵指挥等对延迟和稳定性要求比较苛刻的场景,在机器性能没有瓶颈的前提下,SmartPlayer的RTSP播放器和RTMP播放器延迟是业内为数不多毫米级的。 Blu-ray player Blu-ray player 是一款简单易用,功能强大的蓝光播放器软件,它能够支持播放蓝光光盘、蓝光文件夹、DVD光盘/文件夹、ISO文件等。 VLC media player VLC 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。
SRT地址推流。 TrackAudio, 5, "opus", PSI_STREAM_AUDIO_OPUS, MOV_OBJECT_OPUS) \ XX(CodecL16, TrackAudio, 6, ffplay运行后弹出播放器窗口,正常播放视频画面和声音。 connection[MediaServer] [576478-event poller 0] SrtSession.cpp:118 onError | 2-16(112.5.138.145:57022) 6( 播放器(__defaultVhost__/live/test)断开,耗时(s):16从以上日志可见,ZLMediaKit通过SRT协议成功实现了视频直播的SRT推拉流功能。
1.4 SRT缺点 SRT协议的缺点主要有:协议额外带宽较高,且SRT协议的传输策略激进,会对同网的其他用户带来影响;除此之外,SRT的协议栈在用户态并且占用了3~4个线程,我们知道线程的切换存在开销 落地与实践 工欲善其事,必先利其器——SRT协议虽然基于UDP,但是其拥有很多自己的语义,为了更好分析复杂网络情况下SRT传输协议的情况,我们使用SRT协议解析插件实现了对于一层层嵌套的SRT语义的展示 除此之外我们还实现了talentover SRT,也完善了一些纯SRT的推流工具,这些都便于我们能够更好地开发SRT协议。 3、4、5、6、7、8……如果发送8之前未收到B传回的7即会要求B重传;但实际上SRT却是A发送1之后等待接收B发送的2,一旦握手信息出现丢包B无法接收来自A的1,也就不会发送2,此时便出现了死循环的情况 LiveVideoStackCon 2020 上海/北京/旧金山 讲师招募 2020年LiveVideoStackCon将持续迭代,LiveVideoStackCon将分别在上海(6月13-14日),北京
下面就以Windows环境为例,把OBS Studio作为SRT直播的录制推流方,把MediaMTX作为承载SRT直播的流媒体服务器,把ffplay和VLC media player作为SRT直播的拉流播放器 此时SRT服务的访问地址前缀为srt://127.0.0.1:8890? streamid=xxx,开头的“srt://”表示该地址采用srt协议,后面的“127.0.0.1:8890”为SRT服务的IP和端口号。再后面的“? ffplay -i 'srt://127.0.0.1:8890?streamid=read:live'此时ffplay弹出播放器窗口,正常播放视频画面和声音。 正在从SRT服务的live路径拉取音频流和视频流,说明MediaMTX通过SRT协议成功实现了视频直播的SRT推拉流功能。
SRT误区4:SRT无法通过互联网传输4K视频 同误区3,SRT协议与内容无关的,可以完全支持4K UHD和HD视频。 SRT误区5:SRT只能在互联网上使用 虽然SRT最初设计用于解决流媒体视频内容在互联网上的主要挑战,但一旦开源后开发人员就开始在自己的硬件和软件堆栈上为所有类型的网络实施SRT。 SRT误区6:SRT不支持OTT工作流 恰恰相反!将OTT延迟降低到广播电视水平的竞赛中,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协议。 3、4、5、6、7、8……如果发送8之前未收到B传回的7即会要求B重传;但实际上SRT却是A发送1之后等待接收B发送的2,一旦握手信息出现丢包B无法接收来自A的1,也就不会发送2,此时便出现了死循环的情况
SRT字幕简介 首先,SRT 是一种主流格式的字幕文件。它以 SubRip 格式存储,扩展名为. srt。 而且,SRT字幕文件格式简单、清晰,可以直接使用文本编辑器阅读、编辑。 on turnin'* 5 00:01:49,042 --> 00:01:52,978 [Chattering] *Proud Mary keep on burnin'* 6 空白行(表示当前字幕段的结束) 解析SRT字幕 如果你想用程序解析 SRT 格式字幕,开源社区有很多优秀的实现,我们也不需要重新造轮子。 例如,Java 平台下,我们可以使用开源社区的 SRTParser 帮我们完成 SRT 格式字幕文件的解析。 感谢开源社区。 参考 https://docs.lokalise.com/en/articles/5365539-subrip-srt
双向传输; 这一能力使得SRT在一些场景可以替换TCP,比如用SRT做RTMP的传输层。 以播放器为例,播放器一般有多级缓冲,IO模块内或IO到demux有缓冲,解码后到渲染也有缓冲队列,而核心的缓冲模块一般放在demux后解码前,原因是可以计算缓冲数据的时长。 IO模块做到固定延迟缓冲,播放器可以省去IO到demux、demux到解码的缓冲模块,只需要简单的数据管理。多级缓冲设计延迟大,IO模块的缓冲区是整个播放器缓冲的一小部分,丢包恢复能力弱。 详细讨论见:github issue: Negotiated SRT link latency is unknown due to 1/2 RTT addition[6]。 /www.srtalliance.org/members/ [6] Negotiated SRT link latency is unknown due to 1/2 RTT addition; https
参考图5,并结合SRT的工作原理,我们把延时量的长度想象成一个同时在发送端和接收端从左向右滑动的窗口,图中的1号至6号数据包都已收到肯定应答(ACK),已从发送端缓冲区踢出,7号数据包还保存在缓冲区等待接收方的回复 参考图6,接收方没有收到3号数据包,并向发送端回复了否定应答(NAK),由于种种原因这一过程被延误,导致3号数据包已经处在窗口最左侧,随着窗口的滑动下一步它将被从发送端缓冲区踢出。 图5 发送端和接收端缓冲区(较好状态) 图6 发送端和接收端缓冲区(较差状态) 根据分析可以得出结论:发送端缓冲区被占用的比例越少,链路越安全,若发送端缓冲区被占满,链路则很有可能发生丢包。 参考图5,接收端的1号数据包已经被送至解码器,2号数据包随着延时量窗口的滑动也即将送至解码器,同时2号至6号数据包都已保存在接收缓存区中,接收缓冲区几乎被数据包填满,这是一种较好的链路状态。 参考图6,这是一种较差的链路状态,接收端未收到3号数据包,并且3号数据包在接收端窗口最左侧,意味着3号数据包很可能被跳过,解码出的图像会出现问题。
srt 文件拼接 下面将拆分后的音频和字幕导入 B 站云剪辑中。 这里字幕中的汉字显示为乱码,一开始以为是从字幕说导出 srt 文件时没有选择带 BOM 的 utf-8 格式所致: 切换到带 bom 格式后仍不行: 但同样的乱码问题,对于 Srt Sub Master $(echo "${line}" | awk -F':|,| ' '{print "hour1="$1/1";min1="$2/1";sec1="$3/1";msec1="$4/1";hour2="$6/ msec2=7; 0:1:2,3 4:5:6,7 实测乘 1 (*1) 也可,这也太方便了。 SRT字幕格式