直播工作原理

twtFiT.png
摄像头作为直播源,接收数据后,会将其转化为流,二进制数据需经过websocket等上传到服务器。即将开始进行四个步骤。
第一步,便是要对原始的流进行编码。该视频编码的常见格式为H.264,音频编码为AAC,这两种是直播里面最常见的编码形式。具体我们后面会介绍。
编码完后,可以对视频进行字幕叠加或者加水印等。
最后进行推流,加特效,推送到服务器上,再推到CDN上。而客户则将直接从CDN上得到视频数据。
然后就可以在客户的播放器进行播放。

常见的视频格式和其支持的浏览器
twtPoV.png

常用协议

HLS协议

使用最广泛的直播协议
由苹果推出的直播协议。在曾经的视频播放,都是flash的天下。如今flash已经衰退,直播都几乎采用video格式。
如今也是借助video来播放。对HLS协议来说,它会把一个M3U8索引文件交给video标签来播放。
然后video就会根据M3U8文件的索引来拉取.ts文件。每个ts文件平均2s左右。每过一小段时间,原有的M3U8文件的索引用完了,M3U8就会更新一次,然后继续请求新的.ts文件。
twYxMj.png
(M3U8文件里面也有可能嵌套,M3U8文件内含有M3U8索引文件。)

HLS协议包含三种列表:
live playlist 动态列表 (直播)

静态列表
vod playlist 全量列表(点播)

M3U8文件内部:
twt9Zq.png
第一句 是,M3U8的版本
而第三句则是默认视频时长
第四句表示当前的M3U8文件的序号,动态变化的。
最后一部分则是时间戳,表示每个ts文件的视频时长及其文件地址。

而ts文件内部的大概构成则如下:
twYjzQ.png
PAT会指示出PMT的位置,然后PMT去解析TS哪些是音频 哪些是视频。然后把相连的音频、视频去连接起来。

RTMP协议

RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议以及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash、AIR平台和支持RTMP协议的流媒体、交互服务器之间进行音视频和数据通信。
twYzss.png
实时性较好,但操作起来较复杂。
使用FLV协议

HTTP-FLV协议

相对于RTMP使用更简单,而且更多应用场景。但是相对于RTMP协议来说,其延时会相对较高。建立了长连接,中间传输的格式都是FLV。和RTMP协议最大的区别就是采用的HTTP连接。
twtSLn.png
其具有较为明显的优点:
1、避免防火墙干扰
2、兼容HTTP302跳转
3、可使用HTTPS做加密通道
4、支持移动端

你好啊,谢谢你来看我。
原文地址:https://www.cnblogs.com/sitr/p/13041183.html