ffmpeg应用基础-2

ffmpeg是一个
**- 集录制、
- 转换、
- 音/视频编码解码**
等功能为一体的完整的开源解决方案。
特别是其下面的功能领先的编解码库libavcodec,集成了音视频应用中绝大部分的CODEC功能,同时其他著名的编解码器也基于或参考了libavcodec库。

1.ffmpeg概述

H264.c就是一个能正确、流畅解码x264码流的H.264视频解码器。

ffmpeg的框架是以函数指针的方式,形成开放的公共接口,用户能够添加自己的CODEC,而构成标准的音视频开发应用。

由于ffmpeg本身为开源工程,没有较为详细的开发文档。需要用户以C语言的分析能力逐步掌握其框架结构,提取自己特定功能的模块或函数。

H264.c以及其他有关文件完成H.264视频的解码,这里就以提取的H264.c视频解码例程说明H.264的解码流程。H264.c本身实现了多媒体扩展指令的汇编优化,能高效的进行视频解码。

ffmpeg的主页http://ffmpeg.org提供了各种相关文档以及最新源代
码下载,使用Git或SVN等代码管理软件获取最新代码工程。

有很多不同版本的ffmpeg开发版本,你也可以自己创建一个~~~
ffmpeg官网下载:
https://ffmpeg.org/download.html
VLC的开发提交:
http://git.videolan.org/?p=ffmpeg.git;a=summary
VLC的其他资源:
http://git.videolan.org/

fmpeg-3.0.2目录主要有以下几个工程库目录:
● libavcodec:该库是音视频编码或解码的核心代码,实现了市面上可见的绝大部分解码器的功能,libavcodec库被其他各大解码器ffdshow、Mplayer等所包含或应用。本章所采用的H.264解码器就是抽取其中的H264.c等文件。
● libavdevice:操作计算机中常用的音视频捕获或输出设备:ALSA、AUDIO_BEOS 、JACK、OSS、1394、VFW等。
● libavfilter:音视频滤波器的开发有,宽高比、裁剪、格式化、非格式化、伸缩等。
● libavformat:音视频流的格式解析,为libavcodec分析码流提供独立的音频或视频码流源。
● libavutil:ffmpeg实用工具库,包括算术运算、字符操作等。
● libpostproc:音视频应用的后处理,如图像的去块效应。
● libswscale:图像颜色空间或格式转换,如RGB的24、32等与YUV的420、IYUV、YUY2等之间转换。

2.H.264解码原理

H.264根据其码流的健壮性或语义,分为视频编码层VCL(Video Coding Layer)和网络抽象层NAL(Network Abstract Layer)。

VCL是H.264的压缩核心,包括码流的语义以及块、宏块和片的语法定义,其目标是尽可能地独立于网络进行高效地视频编码;

NAL是将VCL产生的比特流打包,以适应不同鲁棒能力的网络信道,NAL
覆盖了所有片Slice级别以上的语法定义,并且同时支持独立片解码、起始码唯一性保证、补充增强信息SEI和流格式数据的传送。总的来说,NAL解码器负责将H.264码流进行解码,完成图像重构。
下图展示了解码器的总框图。
ffmpeg应用基础-2_第1张图片
图 H.264解码器框图

从图中可以看出,解码的基本流程为:将NAL数据位流输入到H.264解码器中,熵解码模块解码后输出量化系数X;系数经过反量化和反变换得到残差数据R;解码器使用从码流中解码的头信息生成预测块Pred,然后Pred与残差R求和得到块数据dF;每个块dF通过去除块效应的滤波得到解码图像的重建块F。根据H.264视频编码过程,H.264解码器的工作包含在编码算法中。

你可能感兴趣的:(ffmpeg)