编码就是按照一定的格式记录采样和量化后的数据.
编码中软编码和硬编码的区别?
硬编码,就是使用GPU计算,获取数据结果,优点速度快,效率高.
软编码,就是通过CPU来计算,获取数据结果.
压缩算法分为2种,有损压缩与无损压缩.
解码:将压缩的数据还原
二. 直播APP需求剖析
2.1 直播项目流程
在直播项目中,一般常见有8个步骤.
- 音视频采集
- 视频滤镜
- 音视频编码
- 推流
- 流媒体服务器处理
- 拉流
- 音视频解码
- 音视频播放
-
采集视频,音频
-
使用iOS原生框架 AVFoundation.framework
-
视频滤镜处理
-
使用iOS原生框架 CoreImage.framework
-
使用第三方框架 GPUImage.framework
CoreImage 与 GPUImage 框架比较: 在实际项目开发中,开发者更加倾向使用于GPUImage框架. 首先它在使用性能上与iOS提供的原生框架,并没有差别;其次它的使用便利性高于iOS原生框架,最后也是最重要的GPUImage框架是开源的.而大家如果想要学习GPUImage框架,建议学习OpenGL ES,其实GPUImage的封装和思维都是基于OpenGL ES.
视频和音频分开编码的
视频**音频编码压缩
-
硬编码
-
视频: VideoToolBox框架
-
音频: AudioToolBox 框架
-
软编码
-
视频: 使用FFmpeg,X264算法把视频原数据YUV/RGB编码成H264
-
音频: 使用fdk_aac 将音频数据PCM转换成AAC
推流
-
推流: 将采集的音频.视频数据通过流媒体协议发送到流媒体服务器
-
推流技术
-
流媒体协议: RTMP\RTSP\HLS\FLV
-
视频封装格式: TS\FLV
-
音频封装格式: Mp3\AAC
流媒体服务器
- 数据分发
- 截屏
- 实时转码
- 内容检测
拉流
- 拉流: 从流媒体服务器中获取音频\视频数据
- 流媒体协议: RTMP\RTSP\HLS\FLV
音视频解码
-
硬解码
-
视频: VideoToolBox框架
-
音频: AudioToolBox 框架
-
软解码
-
视频: 使用FFmpeg,X264算法解码
-
音频: 使用fdk_aac 解码
播放
- ijkplayer 播放框架
- kxmovie 播放框架
ijkplayer,kxmovie 都是基于FFmpeg框架封装的
H264压缩的视频文件。vlc可以播放、先解码再播放
视频、和音频怎么同步的?
根据时间戳来实现同步
1秒播放16张图片 fps 播放速度
视频压缩的原理:IPB帧
- I帧: 保留了一张完整视频帧. 解码关键!(帧内预测压缩)
- P帧: 先前参考帧.差异数据.解码需要依赖于I帧
- B帧: 双向参考帧,解码时既需要I帧,也需要P帧!
花屏:解码出现错误就是花屏问题、解决:当出现错误就不去显示、等待下一段视频出来接显示、出来的问题是卡顿;
帧:图片
帧间预测压缩:一组图片压缩
帧内预测压缩:一张图片压缩
H.264码流在网络中传输时实际是以NALU的形式进行传输的.
1、SPS :序列参数集、PPS:图像参数集
2、写入文件
3、NSLU
大端:读取内存的方式、
小端:
大端 转小端 CFSwapInt32HostToBig
iOS 系统默认的是小端模式
参考与:老师
网友评论