Comment on page
01 直播技术相关
将主播录制的音视频, 推送到服务器, 再由服务器分发给观众
- 推流端: 采集 处理 编码 推流
- 服务端处理: 转码 录制 截图 审核
- 播放器: 拉流 解码 渲染
- 互动: 聊天室 礼物 赞
- 数据采集
AVFoundation
- 美颜
GPUImage
- 音频压缩
FFmpeg
- 视频压缩
X264
- 推流
libremp
- 播放
ijkplayer
- 视频解码
FFmepeg
- 视频硬解码
VideoToolBox
- 音频硬解码
AudioToolBox
- 流媒体开发
- 网络层
Socket
负责传输 - 协议层
RTMP
或HLS
负责网络打包 - 封装层
FLV
或TS
负责编解码数据的封装 - 编码层
h.264
和acc
负责图像视频的压缩
- GOP
- 画面组,一个GOP就是一组连续的画面,每个画面都是一帧,一个GOP就是很多帧的集合
- 码率
- 图片压缩后每秒显示的数据量
- 常常看见视频播放软件中的1024,720、高清、标清和流畅等,指的就是各种码率
- 帧率
- 每秒帧数
- 人眼16帧的话看起来就是连贯的了
- 压缩比
- 压缩前的每秒数据量/码率
- 同一视频源,压缩比越高画质越差
- 视频封装格式和视频压缩编码标准
- 就好像项目工程和编程语言,
封装格式
就是一个项目的工程,视频编码
方式就是编程语言,一个项目工程可以用不同语言开发
librtmp
是用来传输RTMP
协议格式的数据RTMP
是实时消息传输协议,Adobe Systems
公司为Flash播放器
和服务器之间音频、视频和数据传输开发的开放协议,因为是开放协议所以都可以使用了RTMP
协议用于对象、视频、音频的传输。这个协议建立在TCP协议
或者轮询HTTP协议
之上。RTMP
协议就像一个用来装数据包的容器,这些数据可以是FLV
中的视音频数据。一个单一的连接可以通过不同的通道传输多路网络流,这些通道中的包都是按照固定大小的包传输的。chunk
是消息包。
- 即时性要求高或有互动需求可以采用
RTMP
/RTSP
- 有回放或跨平台需求的
HLS
- HLS是 由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件。可实现流媒体的直播和点播,主要应用在iOS系统。 HLS是以点播的技术方式来实现直播。
- HLS是自适应码率流播,客户端会根据网络状况自动选择不同码率的视频流,条件允许的情况下使用高码率,网络繁忙的时候使用低码率,并且自动在二者间随意切换。这对移动设备网络状况不稳定的情况下保障流畅播放非常有帮助。
- 实现方法是服务器端提供多码率视频流,并且在列表文件中注明,播放器根据播放进度和下载速度自动调整。
- HLS与RTMP对比:HLS主要是延时比较大,RTMP主要优势在于延时低。
- HLS协议的小切片方式会生成大量的文件,存储或处理这些文件会造成大量资源浪费。
- 相比使用RTSP协议的好处在于,一旦切分完成,之后的分发过程完全不需要额外使用任何专门软件,普通的网络服务器即可,大大降低了CDN边缘服务器的配置要求,可以使用任何现成的CDN,而一般服务器很少支持RTSP。
- HTTP-FLV是基于HTTP协议流式的传输媒体内容。相对于RTMP,HTTP更简单和广为人知,内容延迟同样可以做到1~3秒,打开速度更快,因为HTTP本身没有复杂的状态交互。所以从延迟角度来看,HTTP-FLV要优于RTMP。
- RTSP:实时流传输协议,定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。
- RTP:实时传输协议,RTP是建立在UDP协议上的,常与RTCP一起使用,其本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于低层服务去实现这一过程。
- RTCP:RTP的配套协议,主要功能是为RTP所提供的服务质量(QoS)提供反馈,收集相关媒体连接的统计信息,例如传输字节数,传输分组数,丢失分组数,单向和双向网络延迟等等。
demuxing(分离)
:从视频流、音频流,字幕流合成的文件(容器格式(FLV,TS))中, 分解出视频、音频或字幕,各自进行解码。fdk_aac
:音频编码解码框架,PCM音频数据和AAC音频数据互转- 用
GPU
解码,减少CPU
运算- 优点:播放流畅,低功耗,解码速度快,
- 缺点:兼容不好软解码
- 用
CPU
解码- 优点:兼容好
- 缺点:加大
CPU
负担,解码速度慢,耗电增加,没有硬解码流畅
- B站开源的一个基于
FFmpeg
的开源Android/iOS
视频播放器- API易于集成
- 编译配置可裁剪,方便控制安装包大小
- 支持硬件加速解码,更加省电
- 简单易用,指定拉流URL,自动解码播放
Last modified 2yr ago