简述
本文介绍HLS和AVFoundation主体概念及用途,每个部分如果做专题展开都有不少内容可讲,实践中可以参考开源封装探索.
HLS
HLS简介
HLS,全称(HTTP Live Streaming,是苹果公司提出的基于HTTP的流媒体传输协议developer.apple.com/streaming/,其特点如下
- 支持自适应码流,客户端可以根据自身的带宽情况及性能限制,播放不同码流视频.
- 支持 HTTPS 加密和用户认证
- 不需要特殊设备,可在 apache 等 web 服务器上分发
HLS结构
- m3u8索引文件:是一个文本文件,定义了每个片段文件ts的位置,时长(EXT-X-TARGETDURATION ),播放顺序等元数据
- ts切片文件,由三层构成
- es: 音视频数据
- pes: 在es层上加时间戳
- ts: 在pes层上增加数据流识别和传输信息,ts包大小一般为188字节
- key加密串(可选)
使用HLS面临的挑战
- 延迟较高. 解决方案:使用更短的 ts 段,但会带来更频繁的 HTTP 连接缓冲.
- 会生成大量的小文件, 对存储IO造成了比较大的压力. 解决方案: 内存切片
AVFoundation
AVFoundation 包含了音视频播放,摄像头音视频流采集,媒体编辑等。
音视频播放主要类
- AVPlayer : 使用 playeritem 创建,KVO 监听播放状态变化
- AVPlayerItem: 播控
- AVPlayerLayer 与 player 绑定,视频渲染到该 layer 上
- AVPlayerViewController 系统默认播放 UI套件
- AVAudioPlayer 播放声音
摄像头音视频流采集
使用流程
- 创建 session:AVCaptureSession
- 创建 设备,AVCaptureDevice
- 使用 第 2 步中胡 DEVICE创建 AVCaptureDeviceInput,并加入 session
- 创建AVCaptureOutput
- 设置 output 代理,加入 session ,在代理的串行线程队列中分析数据流 其他:
- AVCaptureVideoPreviewLayer: 摄像头预览
- AVAudioRecorder: 录制声音,暂停/恢复/停止录音
媒体编辑
- 只读AVCompositon 由AVCompositionTrack 构成 (他们分别是 AVAsset 和 AVAssetTrack 子类)
- 媒体编辑AVMutableComposition+AVMutableCompositionTrack
- 访问视频帧和音频样本等更低层的数据: AVAssetReader/AVAssetWriter
VideoToolBox
VideoToolBox使用的是C语言API硬件编解码视频, 需要开发者了解编一些音视频概念,如NALUnit(sps、pps、idr frame),视频容器格式等,可参考基于FFMPEG在ios上硬解的demo github.com/adison/-Vid…