MrZWH / MrZWHblog

https://mrzwh.github.io/
2 stars 1 forks source link

H5 与小程序直播开发 #15

Open MrZWH opened 6 years ago

MrZWH commented 6 years ago

大前端

对于大前端来说,需要掌握以下至少一种技能:

怎么学

直播原理

流程图:

收集的数据一开始是以原始二进制流的形式,通过 websocket 也好 http 也好,上传到服务器。原始的流不能用播放器播放,必须采用一定的协议做编码。H.264(视频的编码)、AAC(音频的编码)。 视频格式与浏览器兼容: YouTube 使用的 webm,流式的视频格式,hls 标准来说不是一种视频格式,是一种apple公司推出的视频协议,对视频来说是 ts 文件.ts格式,flv b站的视频格式,是早期的 flash 的视频格式,b站的 h5 播放器也能播放 flv 格式的,为什么呢?

直播协议

整个行业里做直播最常用的三种协议:

点播:多媒体播放器的术语,对播放器来说分点播和直播。

HLS 协议

image 对于 hls 协议,它会给一个 M3U8 文件。直播跟点播最大的区别:不会一下子给视频地址,会给一个M3U8 索引文件,浏览器会根据 索引文件的片段时长自动跟新 m3u8 文件。

HLS 协议快速预览

  1. 安装 Safari 浏览器
  2. 用 Safari 浏览器打开下面任意地址均可

m3u8 文件

image

m3u8 文件里面存放的是索引,每个索引对应这一个 ts 文件,但有时 m3u8 文件里可以嵌套 m3u8 文件。有时候拿到一个 m3u8 文件播放不了需要排查浏览器是否支持。

m3u8 文件还细分为几类:

m3u8 文件动态列表里面的内容: m3u8 content

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

ts file

第一个 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通信过程 RTMP 协议在传输过程中也是 flv 视频格式的,只是通信的手段不一样,tcp 通信有三次应答,hls 是 http 的不需要走 3次应答的过程。所以使用 rtmp 时需要注意跟用户端的应答处理。

HTTP-FLV 协议

HTTP-FLV通信过程

RTMP 的升级版,RTMP 比 hls 用起来更复杂,hls 实时性差,因为请求一个 m3u8 文件会请求到多个 ts 文件,所以延时的程度跟 ts 文件的切片分片数量有关系。HTTP-FLV 结合了 hls http 请求的优点和 rtmp 低延时的特性,中间建立了一个 flv 长连接。因为中间建立了一个长连接所以通信过程没那么复杂,唯一跟 rtmp 的区别就是播放器跟 cdn 建立的连接是直接的 http 请求。

相对RTMP的优点:

直播原理总结

MrZWH commented 6 years ago

video 详解

在 video src 中有些地址回事 blob:https://...开头的地址,这是虚拟地址,下载不到的。

MrZWH commented 6 years ago

直播源的制作

方法一 Nginx + ffmpeg:

  1. 安装 Nginx
  2. 安装 ffmpeg
  3. 配置 Nginx
  4. 准备视频
  5. 利用 ffmpeg 推流 安装 VLC 和 Safari 浏览器

方法二 集成服务:

  1. 下载服务
  2. 安装服务
  3. 准备源视频
  4. 开启服务
  5. 利用 ffmpeg 推流
    • ffmpeg -re -i test.mp4 -c copy -f flv rtmp://localhost:1935/live/movie