当前位置:   article > 正文

FFMpeg 实现视频解码、编码、转码流程详解_ffmpeg转化格式硬解码

ffmpeg转化格式硬解码

1、FFmpeg模块分类


打开FFmpeg源码,会发现有一系列libavxxx的模块,这些模块很好地划分了代码的结构和分工。

libavformat,format,格式封装

libavcodec,codec,编码、解码

libavutil,util,通用音视频工具,像素、IO、时间等工具

libavfilter,filter,过滤器,可以用作音视频特效处理

libavdevice,device,设备(摄像头、拾音器)

libswscale,scale,视频图像缩放,像素格式互换

libavresample,resample,重采样

libswresample,也是重采样,类似图像缩放

libpostproc,后期处理

2、FFmpeg核心结构体


AVFormatContext:解封装功能的结构体,包含文件名、音视频流、时长、比特率等信息;

AVCodecContext:编解码器上下文,编码和解码时必须用到的结构体,包含编解码器类型、视频宽高、音频通道数和采样率等信息;

AVCodec:存储编解码器信息的结构体;

AVStream:存储音频或视频流信息的结构体;

AVPacket:存储音频或视频编码数据;

AVFrame:存储音频或视频解码数据(原始数据)。

3、播放流程


4、FFmpeg解码实现


解码实现的是将压缩域的视频数据解码为像素域的 YUV 数据。实现的过程,可以大致用如下图所示。

从图中可以看出,大致可以分为下面三个步骤:

  • 首先要有待解码的压缩域的视频。

  • 其次根据压缩域的压缩格式获得解码器。

  • 最后解码器的输出即为像素域的 YUV 数据

5、FFmpeg编码实现


视频域 YUV 数据编码为压缩域的帧数据

从图中可以大致看出视频编码的流程:

  • 首先要有未压缩的 YUV 原始数据。

  • 其次要根据想要编码的格式选择特定的编码器。

  • 最后编码器的输出即为编码后的视频帧。

6、FFmpeg转码实现


传统的编码转换程序工作原理图

封的目的:

\1. 是为了在一个文件流(Stream)中能同时存储视频流(Video Stream)、音频流(Audio Stream)、字幕(Subtitle)、附件(t)、数据(d)等内容。这正是“复用”的含义所在(分时复用)。

\2. 是在网络环境下确保数据的可靠快速传输。

编码的目的:

是为了压缩媒体数据。有别于通用文件数据的压缩,在图像或音频压缩的时候,可以借助图像特性(如前后关联、相邻图块关联)或声音特性(听觉模型)进行压缩,可以达到比通用压缩技术更高的压缩比。

原文https://zhuanlan.zhihu.com/p/434815150

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/446303
推荐阅读
相关标签
  

闽ICP备14008679号