Open MrZWH opened 6 years ago
对于大前端来说,需要掌握以下至少一种技能:
流程图:
收集的数据一开始是以原始二进制流的形式,通过 websocket 也好 http 也好,上传到服务器。原始的流不能用播放器播放,必须采用一定的协议做编码。H.264(视频的编码)、AAC(音频的编码)。 视频格式与浏览器兼容: YouTube 使用的 webm,流式的视频格式,hls 标准来说不是一种视频格式,是一种apple公司推出的视频协议,对视频来说是 ts 文件.ts格式,flv b站的视频格式,是早期的 flash 的视频格式,b站的 h5 播放器也能播放 flv 格式的,为什么呢?
.ts
整个行业里做直播最常用的三种协议:
点播:多媒体播放器的术语,对播放器来说分点播和直播。
对于 hls 协议,它会给一个 M3U8 文件。直播跟点播最大的区别:不会一下子给视频地址,会给一个M3U8 索引文件,浏览器会根据 索引文件的片段时长自动跟新 m3u8 文件。
m3u8 文件里面存放的是索引,每个索引对应这一个 ts 文件,但有时 m3u8 文件里可以嵌套 m3u8 文件。有时候拿到一个 m3u8 文件播放不了需要排查浏览器是否支持。
m3u8 文件还细分为几类:
m3u8 文件动态列表里面的内容:
m3u8 文件是纯文本文件,不是多媒体的流。 文件内容第一行是 m3u8 文件的版本,使用时需要看浏览器是否支持该版本。
m3u8 文件静态列表里面的内容:
#EXTM3U #EXT-X-VERSION:6 #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:EVENT #EXTINF:9.9001, http://media.example.com/wifi/segment0.ts #EXTINF:9.9001, http://media.example.com/wifi/segment1.ts #EXTINF:9.9001, http://media.example.com/wifi/segment2.ts
m3u8 文件全量列表里面的内容:
#EXTM3U #EXT-X-VERSION:6 #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:9.9001, http://media.example.com/wifi/segment0.ts #EXTINF:9.9001, http://media.example.com/wifi/segment1.ts #EXTINF:9.9001, http://media.example.com/wifi/segment2.ts #EXT-X-ENDLIST
HTL 是直播里应用最广泛的协议
第一个 ts 文件会有一个 PAT 包,这个包告诉你要去找一个 PMT 的包,PMT 包告诉你后面会解析到 ts 包,告诉你这些 ts 包哪些是视频哪些是音频,很多个ts 组成一个叫 PES 的东西。 浏览器解析一个视频需要知道视频帧和音频帧,哪些ts 包能组成一个帧?需要解析 ts 规范,ts 中有个 header 它会告诉你这些信息。
RTMP 是 Real TIme Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于 TCP ,是一个协议族,包括 RTMP 基本协议以及 RTMPT/RTMPS/RTMPE 等多种变种。RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash、AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间进行音视频和数据通信。
视频音频的采集以PC 端为主,如果不是通过 web 的方式来做而是通过客户端的方式来做,这时基本走 RTMP 协议,如果采集端用 web 端来做,比如 h5 ,那么它的协议叫做 webRTC,这是两种不同的技术方案。通常给主播的是客户端采用RTMP 效率比较高。
RTMP 协议在传输过程中也是 flv 视频格式的,只是通信的手段不一样,tcp 通信有三次应答,hls 是 http 的不需要走 3次应答的过程。所以使用 rtmp 时需要注意跟用户端的应答处理。
RTMP 的升级版,RTMP 比 hls 用起来更复杂,hls 实时性差,因为请求一个 m3u8 文件会请求到多个 ts 文件,所以延时的程度跟 ts 文件的切片分片数量有关系。HTTP-FLV 结合了 hls http 请求的优点和 rtmp 低延时的特性,中间建立了一个 flv 长连接。因为中间建立了一个长连接所以通信过程没那么复杂,唯一跟 rtmp 的区别就是播放器跟 cdn 建立的连接是直接的 http 请求。
相对RTMP的优点:
在 video src 中有些地址回事 blob:https://...开头的地址,这是虚拟地址,下载不到的。
blob:https://...
方法一 Nginx + ffmpeg:
方法二 集成服务:
大前端
对于大前端来说,需要掌握以下至少一种技能:
怎么学
直播原理
流程图:
收集的数据一开始是以原始二进制流的形式,通过 websocket 也好 http 也好,上传到服务器。原始的流不能用播放器播放,必须采用一定的协议做编码。H.264(视频的编码)、AAC(音频的编码)。 视频格式与浏览器兼容: YouTube 使用的 webm,流式的视频格式,hls 标准来说不是一种视频格式,是一种apple公司推出的视频协议,对视频来说是 ts 文件
.ts
格式,flv b站的视频格式,是早期的 flash 的视频格式,b站的 h5 播放器也能播放 flv 格式的,为什么呢?直播协议
整个行业里做直播最常用的三种协议:
点播:多媒体播放器的术语,对播放器来说分点播和直播。
HLS 协议
对于 hls 协议,它会给一个 M3U8 文件。直播跟点播最大的区别:不会一下子给视频地址,会给一个M3U8 索引文件,浏览器会根据 索引文件的片段时长自动跟新 m3u8 文件。
HLS 协议快速预览
m3u8 文件
m3u8 文件里面存放的是索引,每个索引对应这一个 ts 文件,但有时 m3u8 文件里可以嵌套 m3u8 文件。有时候拿到一个 m3u8 文件播放不了需要排查浏览器是否支持。
m3u8 文件还细分为几类:
m3u8 文件动态列表里面的内容:
m3u8 文件是纯文本文件,不是多媒体的流。
文件内容第一行是 m3u8 文件的版本,使用时需要看浏览器是否支持该版本。
m3u8 文件静态列表里面的内容:
m3u8 文件全量列表里面的内容:
HTL 是直播里应用最广泛的协议
ts 文件
第一个 ts 文件会有一个 PAT 包,这个包告诉你要去找一个 PMT 的包,PMT 包告诉你后面会解析到 ts 包,告诉你这些 ts 包哪些是视频哪些是音频,很多个ts 组成一个叫 PES 的东西。
浏览器解析一个视频需要知道视频帧和音频帧,哪些ts 包能组成一个帧?需要解析 ts 规范,ts 中有个 header 它会告诉你这些信息。
RTMP 协议
RTMP 是 Real TIme Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于 TCP ,是一个协议族,包括 RTMP 基本协议以及 RTMPT/RTMPS/RTMPE 等多种变种。RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash、AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间进行音视频和数据通信。
视频音频的采集以PC 端为主,如果不是通过 web 的方式来做而是通过客户端的方式来做,这时基本走 RTMP 协议,如果采集端用 web 端来做,比如 h5 ,那么它的协议叫做 webRTC,这是两种不同的技术方案。通常给主播的是客户端采用RTMP 效率比较高。
RTMP 协议在传输过程中也是 flv 视频格式的,只是通信的手段不一样,tcp 通信有三次应答,hls 是 http 的不需要走 3次应答的过程。所以使用 rtmp 时需要注意跟用户端的应答处理。
HTTP-FLV 协议
RTMP 的升级版,RTMP 比 hls 用起来更复杂,hls 实时性差,因为请求一个 m3u8 文件会请求到多个 ts 文件,所以延时的程度跟 ts 文件的切片分片数量有关系。HTTP-FLV 结合了 hls http 请求的优点和 rtmp 低延时的特性,中间建立了一个 flv 长连接。因为中间建立了一个长连接所以通信过程没那么复杂,唯一跟 rtmp 的区别就是播放器跟 cdn 建立的连接是直接的 http 请求。
相对RTMP的优点:
直播原理总结