Skip to content

Commit b898c6f

Browse files
committed
update
1 parent 7239685 commit b898c6f

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

VideoDevelopment/DASH.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# HLS协议
2+
3+
HLS(HTTP Live Streaming)协议:是苹果公司实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播。HLS点播,基本上就是常见的分段HTTP点播,不同在于,它的分段非常小。相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件。因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。它也解决了RTMP协议存在的一些问题,例如RTMP协议不使用标准的HTTP接口传输数据(TCP、UDP端口),所以在一些特殊的网络环境下可能被防火墙屏蔽掉,而HLS使用的是HTTP协议传输数据(80端口),不会遇到被防火墙屏蔽的情况。
4+
5+
在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U(m3u8) playlist文件,用于寻找可用的媒体流(将视频分为一个个视频小分片,然后用m3u8索引表进行管理,由于客户端下载到的视频都是5-10秒的完整数据,所以视频的流畅性很好,但是同样也引入了很大的延迟(一般延迟在10-30s左右))。
6+
7+
上面提到了m3u8,那m3u8构成是?直播中m3u8、ts如何实时更新?
8+
9+
- 是一个索引地址/播放列表,通过FFmpeg将本地的xxx.mp4进行切片处理,生成m3u8播放列表(索引文件)和N多个 .ts文件,并将其(m3u8、N个ts)放置在本地搭建好的webServer服务器的指定目录下,我就可以得到一个可以实时播放的网址,我们把这个m3u8地址复制到 VLC 上就可以实时观看! 在 HLS 流下,本地视频被分割成一个一个的小切片,一般10秒一个,这些个小切片被 m3u8管理,并且随着终端的FFmpeg 向本地拉流的命令而实时更新,影片进度随着拉流的进度而更新,播放过的片段不在本地保存,自动删除,直到该文件播放完毕或停止,ts 切片会相应的被删除,流停止,影片不会立即停止,影片播放会滞后于拉流一段时间
10+
11+
HLS的整体流程为:
12+
13+
视频源文件 -> 服务器(编码器、流分割器) -> 分发器(索引文件、*.ts) -> 传输网络 -> 客户端
14+
15+
16+
17+
[http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8](https://link.jianshu.com?t=http%3A%2F%2Fwww.modrails.com%2Fvideos%2Fpassenger_nginx.mov)
18+
19+
```
20+
#EXTM3U // m3u8文件头
21+
#EXT-X-VERSION:3 // 协议版本
22+
#EXT-X-MEDIA-SEQUENCE:304240 // 第一个ts文件的序列号
23+
#EXT-X-TARGETDURATION:10 // 每个ts文件的最大时长
24+
#EXTINF:10.000, // 每个ts文件的持续时间
25+
cctv1hd-1585920024000.ts // ts文件的url
26+
#EXTINF:10.000,
27+
cctv1hd-1585920034000.ts
28+
#EXTINF:10.000,
29+
cctv1hd-1585920044000.ts
30+
#EXTINF:10.000,
31+
cctv1hd-1585920054000.ts
32+
#EXTINF:10.000,
33+
cctv1hd-1585920064000.ts
34+
#EXTINF:10.000,
35+
cctv1hd-1585920074000.ts
36+
```
37+
38+
39+
40+
# 简介
41+
42+
43+
44+
DASH(MPEG-DASH)全称为Dynamic Adaptive Streaming over HTTP。是国际标准组MPEG 2014年推出的技术标准,主要目标是形成IP网络承载单一格式的流媒体并提供高效与高质量服务的统一方案,解决多制式传输方案(HTTP Live Streaming, Microsoft Smooth Streaming, HTTP Dynamic Streaming)并存格局下的存储与服务能力浪费、运营高成本与复杂度、系统间互操作弱等问题。
45+
46+
DASH是基于HTTP的动态自适应的比特率流技术,使用的传输协议是TCP(有些老的客户端直播会采用UDP协议直播, 例如YY, 齐齐视频等). 和HLS, HDS技术类似, 都是把视频分割成一小段一小段, 通过HTTP协议进行传输,客户端得到之后进行播放;不同的是MPEG-DASH支持MPEG-2 TS、MP4等多种格式, 可以将视频按照多种编码切割, 下载下来的媒体格式既可以是ts文件也可以是mp4文件, 所以当客户端加载视频时, 按照当前的网速和支持的编码加载相应的视频片段进行播放.
47+
48+
因为是分片的,客户端可以自由选择需要播放的媒体分片,可以实现`Adaptive Bitrate Streaming`技术,不同画质内容无缝切换,提供更好的播放体验。
49+
50+
YouTube采用DASH!其网页端及移动端APP都使用了DASH。
51+
52+
DASH的整个流程:
53+
54+
内容生成服务器(编码模块、封装模块) -> 流媒体服务器(MPD、媒体文件、HTTP服务器) <-> DASH客户端(控制引擎、媒体引擎、HTTP接入容器)
55+
56+
57+
58+
在2012年由ISO/IEC发表,正式成为国际标准。该技术与编解码器无关,可使用H.265,H.264,VP9等任何编码器进行编码。
59+
60+
DASH和苹果的HLS(HTTP Live Streaming)技术相似,通过把内容分割成小的基于HTTP的文件段序列,来进行流媒体播放。各个文件段可以设置成不同的比特率进行编码,以满足不同客户端的网络需求。例如,DASH客户端可以根据当前的网络状况,自动选择对应的最匹配的比特率文件段下载,进行回访,而不会引起停顿或重新缓冲。这样DASH可以做到无缝的适应不断变化的网络条件,并提供高品质的播放,而能够尽量减少播放的停顿或缓冲。
61+
62+
63+
64+
国外主要是YouTube、BBC、ITV等都已经开始推行DASH,国内B站、爱奇艺、腾讯
65+
66+
# DASH vs HLS
67+
68+
69+
70+
71+
72+
# DASH
73+
74+
- MPD
75+
-
76+
77+
78+
79+
80+
81+
82+
83+
84+
85+
86+
87+
88+
89+
90+
91+
92+
93+
94+
95+
96+

0 commit comments

Comments
 (0)