HLS、RTMP、HTTP-FLV直播协议
HLS协议
HLS协议
请求m3u8文件,解析之后得到若干个ts文件
但是,也有可能m3u8文件下是若干个m3u8文件,需要判断播放器和浏览器是否支持
m3u8文件同时又细分为: 动态列表、静态列表和全量列表
-
动态列表:顾名思义,是不断变化的,再直播中比较常用
-
静态列表:几乎不怎么使用
-
全量列表:数据不变化的,常用于点播
m3u8文件
// m3u8文件就是一个纯文本文件 为了好看使用js格式 // 动态列表 开始 #EXTM3U // 标明m3u8文件的版本 很重要,版本一定要是播放器能够支持的对上 #EXT-X-VERSI0N:6 // 版本的声明 第6 #EXT-X-TARGETDURATION:10 // 默认视频的时长 #EXT-X-MEDIA-SEQUENCE:26 // 序号 #EXTINF:9.901, // 时间戳 跟浏览器跟新m3u8文件是有关系的 http://media.example.com/wifi/segment26.ts // 索引片段 #EXTINF:9.901f http://media.example.com/wifi/segment27.ts #EXTINF:9.501, http://media.example.com/wifi/segment28.ts // 动态列表 结束 // 静态列表 开始 静态列表比动态列表多了一个#EXT-X-PLAYLIST-TYPE:EVEN 其他的没什么区别 #EXTM3U // 标明m3u8文件的版本 很重要,版本一定要是播放器能够支持的对上 #EXT-X-VERSI0N:6 // 版本的声明 第6 #EXT-X-TARGETDURATION:10 // 默认视频的时长 #EXT-X-MEDIA-SEQUENCE:26 // 序号 #EXT-X-PLAYLIST-TYPE:EVEN #EXTINF:9.901, // 时间戳 跟浏览器跟新m3u8文件是有关系的 http://media.example.com/wifi/segment26.ts // 索引片段 #EXTINF:9.901f http://media.example.com/wifi/segment27.ts #EXTINF:9.501, http://media.example.com/wifi/segment28.ts // 静态列表 结束 // 全量列表 开始 #EXTM3U // 标明m3u8文件的版本 很重要,版本一定要是播放器能够支持的对上 #EXT-X-VERSI0N:6 // 版本的声明 第6 #EXT-X-TARGETDURATION:10 // 默认视频的时长 #EXT-X-MEDIA-SEQUENCE:26 // 序号 #EXT-X-PLAYLIST-TYPE:VOD // 表明是点播 #EXTINF:9.901, // 时间戳 跟浏览器跟新m3u8文件是有关系的 http://media.example.com/wifi/segment26.ts // 索引片段 #EXTINF:9.901f http://media.example.com/wifi/segment27.ts #EXTINF:9.501, #EXT-X-ENDLIST // 表明结束 不需要再去跟新m3u8文件 // 全量列表 结束
TS文件
解析ts文件之后会先找一个PAT包,PAT下面会有一个PMT包,PTM里面有TS包,PTM会告诉你哪些TS包是视频和音频,这些若干个TS包组成一个PES
rtmp协议
http-flv协议
总结
HLS:使用起来方便,但是有一定延迟(对延迟要求不高的时候)
RTMP: 延迟低,但是使用起来相对复杂(通常用再客户端的采集、低延迟)
HTTP-FLV: 结合了上两个的优点,但是视频格式是flv的(低延迟)