视频H264编码

760 阅读2分钟

目前相关落地推广的有直播类项目和小视频类的项目.5G时代的到来,未来的方向肯定不止如此.

编码

何为编码?

编码就是按照一定的格式记录采样和量化后的数据.

编码中软编码和硬编码的区别?

硬编码:

  • 使用非CPU进行编码,例如使用GPU芯片处理
  • 性能高,低码率下通常质量低于硬编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基本等同于软编码。

软编码:

  • 使用CPU来进行编码计算.
  • 实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常比硬编码要好一点。

直播APP需求剖析

直播项目流程

一般常见有8个步骤.

  • 音视频采集

  • 视频滤镜

  • 音视频编码

  • 推流

  • 流媒体服务器处理

  • 拉流

  • 音视频解码

  • 音视频播放

相关框架

采集视频,音频

  • 使用iOS原生框架 AVFoundation.framework

视频滤镜处理

  • 使用iOS原生框架 CoreImage.framework

  • 使用第三方框架 GPUImage.framework

视频\音频编码压缩

硬编码

  • 视频: 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框架封装的