|
| 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