HTTP协议
概念和术语
- HTTP1.1。可以理解为没有考虑安全的HTTP协议。
- HTTP2。即HTTPS,可以理解为基于安全的HTTP协议。
- Postman。HTTP的客户端测试工具。
官方资料
- W3C官网: https://www.w3.org/Protocols/。
- IETF官网: https://www.rfc-editor.org/search/rfc_search_detail.php?page=All&title=HTTP&pubstatus[]=Any&pub_date_type=any&sortkey=Number&sorting=ASC。
HTTP入门
在资料<<接口自动化测试持续集成>>的1.2非常好的入门介绍。
MPEG-DASH协议
资料和方法
关键字:dash,HTTP视频、网络视频
资料
-
ISO官方资料https://www.iso.org/home.html。
-
ISO/IEC 23009-1,已经下载2014版。最新版为2014版。
-
ISO/IEC 23009-2,最近版为2017版,道客巴巴。
-
ISO/IEC 23009-3,最近版为2015版,道客巴巴。
-
ISO/IEC 23009-4,最近版为2013版,道客巴巴。
-
ISO/IEC 23009-5,最新版为2017版,道客巴巴。
-
ISO/IEC 23009-6, 最新版为2017版,道客巴巴。
-
<<IP网络视频传输技术 标准和应用>>
开源代码
-
Libdash源码: https://github.com/bitmovin/libdash。
-
Ffmpeg 3.4或以上版本
-
DashEncoder: https://github.com/slederer/DASHEncoder和http://www-itec.uni-klu.ac.at/dash/?p=291。 最新版本为2011年。
-
官方源码:在ISO/IEC 23009-2 4.2。
概念和术语
-
m4s:在ffmpeg中生成了m4s文件格式,可以从如下两个方面理解。
-
符合ISO BMFF标准,因为能用MP4Reader打开。
-
DASH标准对ISO BMFF进行了扩展。
-
MIME type:多用途邮件扩展类型。可以理解为web浏览器(HTML)可以识别和传输的数据类型。具体包括的类型包括https://blog.youkuaiyun.com/zhaoyw2008/article/details/46647723。从中知道,264,265不是MIME type,但mp3和mp4是。
-
Profile:其为MPD层的属性。根据标准4.7的描述,其指定了音视频的封装格式。其为dash对封装格式(比如TS,ISOBMFF)的扩展。在标准8,指定了这种扩展,对于ISOBMFF,有live、demand、main三种profile。
-
On-demand service:按照请求的服务。所有的音视频内容都已经放在服务器上,按照HTTP请求传输所需要内容。
-
Live service:在线服务。实时服务,采集-编码-传输-解码-显示。实时服务结束时,MPD已经完备,转化为on-demand 服务。
DASH的层次结构
参考博客https://blog.youkuaiyun.com/ranghanqiao5058/article/details/87932267,利用xml工具打开一个mpd文件,进一步理解。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X22gWwUD-1676725579543)(Images/DASH层次结构.png)]
Peroid
Peroid的标识为时间段,即位于某个时间段的所有音频或视频的集合。
Period,一个DASH文件可以包含一个或多个Periods,每个Period代表一段连续的音视频片段,假设一段码流有60s被划分为3个Periods,Period1为0-15s,Period2为16-40s,Period3为41-60s。对于一个特定的Period,其内部所有的数据共享的一些属性详见标准(2014版)的table4。具体如下:
start | 起始时间。PT0.0s,表示从第0秒开始。 |
---|---|
duration | 当前period的持续时间。 |
BaseURL | |
SegmentBase |
SegmentBase
Adaption set
具体参数符合指定条件的音视频集合。里边可以有多个音视频,并且可以相互切换。
AdaptationSet,一个Period由一个或多个AdaptationSets组成。所有属于同一个Adapset的内容都具有一些属性,具体见标准(2014版)的table5。相当多的属性指定当前adapset内容属性的范围。
ContentType | 内容类型。视频或音频 |
---|---|
par | 宽高比,比如16:9 |
minBandWidth | 最小带宽 |
maxBandWidth | 最大带宽 |
minWidth | |
maxWidth | |
minHeight | |
maxHeight | |
minFrameRate | |
maxFrameRate | |
…… |
…
在AdaptionSet中,指定了内容是视频还是音频。属于同一个period的视频和音频,使用不同的AdaptionSet表示。一个AdaptionSet表示视频,一个AdaptionSet表示音频。
Representation
具有特定参数集的音频或视频。
一个AdaptationSet由一组媒体内容配置可切换的Representations构成。Representation的数据详见标准(2014版)的table7~table9。和Adaption Set不同,Represention指定详细了编码参数值,而不是一个范围。
Sub-Representation
Segment
即所谓的片,个人片翻译的不准确,以后应该为段。
每个Representation中的内容按时间或者其他规则被切分成一系列Segments,使得客户端在播放时能够灵活地在不同的Representations之间进行切换。每个Segment都有一个唯一的与之对应的URL地址,也可能由相同的URL与不同的byte range指定。DASH客户端可以通过HTTP协议来获取URL对应。
即Represetation中的音频或视频数据,用多个文件表示。目前应用按时间切分。
Segment template
Segment的一种。描述一个规则,使用这个规则创建一个或多个segment。即一个segment template可以包含多个segment的信息。
DASH字段详解
MPD层
-
mediaPresentationDuration=PT00H00M33.333S:presentation time 00 hour 00 miniutes 33.333second。整段音视频的持续时间。
-
minBufferTime=“PT11.5S”:解码器端的buffer存储数据,可以播放的最长时间。PT11.5S:可以播放11.5s。用时间表示vbvbuffer=码率*minBufferTime。
其他
timescale=“24000” | 指定时间戳的单位。 表示时间戳的单位为:1/24000秒。 |
---|---|
startNumber=“1” | 分段音视频的起始索引。起始索引为1。 |
t | 起始时间戳 |
d | 持续时间,以1/timescale秒为单位 |
BaseURL
BaseURL:在Nvidia OMAF播放器中,表示分段文件的位置。在intel播放器中,没有实际意义。
HLS
资料和方法
-
官网:https://developer.apple.com/streaming/。
-
在下载协议时,尽量使用RFC文档,而非apple网站上的,因为RFC经过再次的确认。
m3u8文件详解
具体详见<<RFC8216>>的第四章。直接将标识符输入搜索即可。以下为直观详解的部分。
#EXTM3U //m3u8的头标志
#EXT-X-VERSION:3 //对应的HLS版本号为7
#EXT-X-TARGETDURATION:2 //片段的最长时间,单位s
#EXT-X-MEDIA-SEQUENCE:0 //第一个片段的序号,从0开始
#EXTINF:2.000000, //out0.ts持续时间,2s
out0.ts
#EXTINF:2.000000,
out1.ts
#EXTINF:2.000000,
......
#EXT-X-ENDLIST //结束标志
RTSP1.0
资料
搜索关键字:RTSP、流媒体、RTSP信令。
标准文档1.0和2.0两个版本,RTSP1.0对应于RFC2326,RTSP2.0对应于RFC7826。这里指的是RTSP1.0。
在标准中,有[H14.18]的表达,表示HTTP1.1协议的14章18节。
在<<IP网络视频传输–技术标准和应用>>的7.2.3,概述了RTSP标准。
论文<<基于RTSP协议的VOD系统中间件实现>>详细解释了RTSP语法结构。
标准导读
- 第12章,介绍各个字段。
- 第10章,介绍各个方法。
概念和术语
-
RTSP,是服务器和客户端通信控制信息的协议。具体详见https://blog.youkuaiyun.com/asdyfw/article/details/118106059。
-
头部域()
-
服务器端:接受RTSP控制指令,按照指令执行多媒体处理,然后将处理结果发往指定的位置。
-
客户端:发送RTSP指令的地方。
-
请求(request):客户端向服务器发送RTSP数据,要求服务器进行多媒体数据处理。
-
响应(respond):服务器对客户端请求的回应。在有些地方翻译为应答,不过还是感觉响应更加贴切一些。
-
方法(method):请求中所实现的功能。比如setup,play等。
-
消息(message): 一个完整的请求或响应数据的称呼。
协议功能
Setup
下面为RTSP协议的setup消息,以#作为其注释进行说明。其为client发送到sever的(c->s)的消息内容。
SETUP rtsp://172.16.150.153:10530 RTSP/1.0 #client地址端口,RTSP版本
CSeq: 392 #应答序列号。
Content-Type: application/sdp
OnDemandSessionId: d797807b-01cb-4541-b5f9-ca70299bd917
Require: com.comcast.ngod.r2
ServerSession: 102.G503sOBpSLSFP5mMimzTL0
SessionGroup: SSS2_SS_CL_1.10
StartPoint: 1 0.0
StreamControlProto: rtsp
Transport: MP2T/DVBC/UDP;unicast;destination=127.0.0.1;client_port=1234;bandwidth=8000000;client=;sop_group=CDN-OSTR1-A;sop_name=CDN-OSTR1-A#指定转码后的输出的目标地址和端口,可用的带宽
User-Agent: NSS/2.8
Volume: library
Content-Length: 205
Date: Wed, 03 Mar 0070 21:41:59 GMT
#注意这里必须有一个空格行
v=0
o=- 93711b4e-16b0-4bf7-9c2c-8fe9f2281bd9 IN IP4 0.0.0.0
s=
c=IN IP4 0.0.0.0
t=0 0
a=X-playlist-item: wasutv ABCD0000000000025004 0-
m=video 0 udp MP2T
u=http://127.0.0.1:8080/Dash/test.m3u8
#注意这里必须要一个空格行。
TEARDOWN
TEARDOWN是拆卸的意思,对于RTSP而言,就是结束流传输,同时释放与之相关的资源,TEARDWON之后,整个RTSP连接也就结束了。详见(13条消息) 手撕RTSP协议系列(9)——TEARDOWN_视界音你而不同的博客-优快云博客_rtsp teardown。
Announce
从客户端发送到服务器时,ANNOUNCE将请求URL标识的演示文稿或媒体对象的描述发布到服务器。当从服务器发送到客户端时,ANNOUNCE会实时更新会话描述。
RTP
概述
早期的RTP协议,由ITU-T H.255.0发布,后来当IETF发布了关于它的稳定的标准RFC后就被取消了。所以RTP协议是IETF发布的RFC3550。在<<WebRTC音视频实时互动技术(李超著)>>的第9章,从应有的角度介绍了RTP和RTCP。现从整体的角度说明这两个标准。
- RTP实现的是对音视频数据的封装,以一种最为精简的方式。可以将其看做是TS或MP4的简化版本。
- RTCP用于封装和传输数据通信中的统计信息,比如丢包的个数。服务与码率控制和传输质量的改善。
RDP
概述
- 其为微软支持的远程桌面传输协议(Remote Desktop Procotol)。详见微软MSDN的https://docs.microsoft.com/en-us/troubleshoot/windows-server/remote/understanding-remote-desktop-protocol和https://docs.microsoft.com/en-us/windows/win32/termserv/remote-desktop-protocol。
- https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/5073f4ed-1e93-45e1-b039-6e30c385867c。中给出了RDP协议各个版本的下载。
- 论文上描述的都是关于安全方面的,至于我们关注的键盘鼠标等,还需要网页和博客的查阅。
SRT协议
基于UDP的传输协议 ,ffmpeg已经支持。其官方网址为https://www.srtalliance.org/,GitHub网址为https://github.com/Haivision/srt。
icrosoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/5073f4ed-1e93-45e1-b039-6e30c385867c。中给出了RDP协议各个版本的下载。
- 论文上描述的都是关于安全方面的,至于我们关注的键盘鼠标等,还需要网页和博客的查阅。
SRT协议
基于UDP的传输协议 ,ffmpeg已经支持。其官方网址为https://www.srtalliance.org/,GitHub网址为https://github.com/Haivision/srt。