直播
伪流媒体
渐进式下载 : 边下边存, 文件会保存
使用http协议,也能够实现视频播放, 也能快进快退等, 体验上跟流媒体很像,
特点:实现简单, 成本也低
流媒体
边下边播, 不会保存文件
HLS (HTTP Live Streaming)
是苹果公司实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播。原理上是将视频流分片成一系列HTTP下载文件。所以,HLS比RTMP有较高的延迟。HLS基于HTTP协议实现呢,传输内容給包括两部分,一是M3U8描述文件,二是TS媒体文件
RTMP (Real Time Messaging Protocol)
实时消息传输协议, 该协议基于TCP,是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信.
Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输 开发的开放协议它有多种变种:
- RTMP工作在TCP之上,默认使用端口1935;
- RTMPE在RTMP的基础上增加了加密功能;
- RTMPT封装在HTTP请求之上,可穿透防火墙;
- RTMPS类似RTMPT,增加了TLS/SSL的安全功能;
RTMP优势
- 实时性高:RTMP的实时性在3秒之内,经过多层CDN节点分发后,实时性也在3秒左右,在一些实时性有要求的应用中以RTMP为主。
- 支持加密:RTMPE和RTMPS为加密协议
- 稳定性高:HTTP也很稳定,但HTTP是在协议上稳定性不只是服务端的事情,在CDN分发,服务器管理,客户端的支持上
RTMP 使用
- RTMP协议也要客户端和服务器通过“握手”来建立基于传输层链接之上的RTMP Connection链接,在Connection链接上会传输一些控制信息
- TMP协议传输时会对数据做自己的格式化,这种格式的消息我们称之为RTMP Message。而实际传输的时候为了更好地实现多路复用,分包和信息的公平性,发送端会把Message划分为带有Message ID的Chunk,每一个Chunk可能是一个单独的Message,也可能是Message的一部分,在接受端会根据chunk中包含的data的长度,message id和message的长度把chunk还原成完整的Message,从而实现信息的收发。
RTMP协议详解
Real Time Message Protocol(实时信息传输协议)的缩写,用来解决==多媒体数据传输流==的多路复用(Multiplexing)和分包(packetizing)的问题,靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性。
TCP-传输控制协议
- 建立连接,形成传输数据的通道
- 在连接中可进行大数据传输,数据大小不做限制
- 通过三次握手完成连接,是可靠协议,安全送达
必须建立连接,效率会降低
UDP-用户数据报协议
- 将数据源和目的封装到数据包中,不需要建立连接
- 每个数据包的大小限制在64K之内
- 因为不需要连接,因此是不可靠协议
不需要建立连接,速度快
RTMP握手
- 握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。
- 当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。
- 当客户端和服务器分别收到S2和C2后,握手完成。
完整的直播业务流程
- 1.音视频采集(AVFoundation)
- 摄像头(图像传感器)
- 麦克⻛(声音传感器)
- 2.视频滤镜(GPUImage)
- 美颜
- 水印
- 3.音视频编码
- 硬编码:视频:VideoToolBox | 音频: AudioToolBox
- 软编码:视频编码H264 | 音频编码: AAC
- 4.推流
- 将采集的音频,视频数据发送到流媒体服务器
- 5.流媒体服务器
- 数据分发(CDN)
- 截屏
- 实时转码
- 6.拉流
- 从流媒体服务器获取⾳频、视频数据
- 7.音视频解码
- 视频解码:硬解码(VideoToolbox) | 软解码(X264)
- 音频解码:硬解码(AudioToolBox) | 软解码(fdk_aac)
- 8.音视频播放
- ljkplayer:⼀一款开源强⼤大的播放器
直播需要技术点
1.采集视频、音频
- 摄像头、⻨麦克⻛
- 摄像头 CCD(图像传感器)
- ⻨克风 拾⾳器(声音传感器)
- 采集音视频数据
- 导⼊入AV Foundation.Framework框 架
- 从CaptureSession会话的回调中获取音视频数据
2.视频滤镜处理
- 美颜
- 水印
- 使⽤用GPUImage美颜、⽔水印
3.视频、音频编码压缩
- 硬编码
- 视频:VideoToolBox 框架
- 音频: AudioToolBox 框架
- 软编码
- 视频压缩
视频编码H264
X264把视频原数据YUV/RGB编码 H264
- 音频压缩
- 音频编码:mp3.AAC
- fdk_aac将音频数据PCM转AAC
4.推流
推流:将采集的音频,视频数据通过流媒体协议
发送到流媒体服务器
- muxing(封装) 音视频封包成FLV或 者TS
- 推流技术
- 流媒体协议: RTMP\RTSP\HLS\FLV
- 视频封装格式:TS\FLV
- 音频封装格式:mp3\AAC
5.流媒体服务器处理数据
- 数据分发(CDN)
- 截屏
- 录制
- 实时转码
6.拉流
拉流:从流媒体服务器获取⾳频、视频数据
流媒体协议: RTMP\RTSP\HLS\FLV
7.视频、音频解码
- demuxing(解封装)
将FLV\TS文件分离出音视频 - 视频解码
硬解码(VideoToolbox)
软解码(X264) - 音频解码
硬解码(AudioToolBox)
软解码(fdk_aac)
8.播放
ljkplayer:⼀一款开源强⼤大的播放器
9.聊天互动
IM及时通讯
聊天功能
第三⽅方及时通讯:融云、腾讯云
视频编码(H264)
通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式
硬编码:(硬件)定制性好,VideoToolBox
软编码:基于CPU, fmpeg
认知视频
即连续的图片(视频帧)
内容元素
- 图像(Image)
- 音频(Audio)
-
元信息(Metadata)
编码格式
- Video:H264/H265
- Audio:AAC\HE-AAC
容器封装
- MP4\MOV\FLV\RM\RMVB\AVI
视频(图像、音频)构成:-> 视频编码H264 -> 音频编码AAC -> 注明元数据 -> 容器封装打包MP4 -> 完整的视频文件
视频编码技术
-
MPEG 帧间压缩:存储连续帧直接的有差别
的地⽅,从而达到较⼤的压缩⽐ - H264 :比较
- 单个画面清晰度比较, MPEG4 有优势,从动作连贯性上的清晰度,H264优势比较多
- 264算法比较复杂,运行需要更多的资源,因此264优势比较高
- 264使⽤更灵活,将一些实现留给⼚家
- H265: 265是基于264,保留原来技术, 将相关的技术加以改进,例如码流、 编码质量、延时、算法复杂度之间的差额算法,达到最优化设置
- 更⾼效的编码标准,能够在同等画质效果下将内容的体积压缩得更小,传输时更快更省带宽.
- I帧:关键帧 解码关键(
完整的图片
),没有关键帧则编码失败 - muxing(合成) 将视频流、音频流、字母流合成封装到一个文件中,作为一个信号进行传输
GOP : I、B、P
VideoToolBox
VideoToolBox基于Core Foundation库函数,C语言
创建Session -> 设置编码相关 参数 -> 开始编码 -> 循环输入元数据(直接向摄像头获取)-> 获取编码后的H264数据 -> 结束编码
补充
1.如何判断帧类型
如何计算
2.视频帧格式
3.H264格式
4.编码后数据
5.FFmpeg命令
ffmpeg -i H264文件 -i AAC文件 -vcodec copy -f MP4文件
ffmpeg -i /Users/xxx/Desktop/Video.h264 -i /Users/xxx/Desktop/Audio.aac -vcodec copy -f mp4 /Users/xxx/Desktop/Mp4.mp4
6.码率计算公式
软编码是一种设计,而硬编码不过是一种具体的实现。
参考
LFLiveKit
已经实现了 后台录制、美颜功能、支持h264、AAC硬编码,动态改变速率,RTMP传输等,我们真正开发的时候直接使用就很方便啦。
LiveVideoCoreSDK
实现了美颜直播和滤镜功能,我们只要填写RTMP服务地址,直接就可以进行推流啦。
https://www.jianshu.com/p/27b3bb4695aa