转自https://blog.csdn.net/ricky90/article/details/79436422
ffmpeg
是一个很复杂的库,在我看来,比JM要复杂很多,刨除其包含各种编解码方案,算法的全面性,以及其各种平台的汇编优化等因素,其运行逻辑结构和函数之间的调用关系等都要复杂很多。今天我们不泛泛而谈,来点干货,看看如何从
ffmpeg
中提取标题中所涉及到的这些编解码过程中的中间...
a)解协议(http,rtsp,rtmp,mms)
AVIOContext,URLProtocol,URLContext主要存储视音频
使用
的协议的类型以及状态。URLProtocol存储输入视音频
使用
的封装格式。每种协议都对应一个URLProtocol结构。(注意:
FFMPEG
中文件也被当做一种协议“file”)
b)解封装(flv,avi,rmvb,mp4)
AVFormatContext主要存储视音频封装格式中包含的信息;AVInputFormat存储输入视音频
使用
的封装格式。
课程介绍1课程面向
音视频
行业的入门者,没有太多
音视频
基础或者是
音视频
零基础的同学2课程通过概念分析、代码试验、项目实战的方式当你真正理解
音视频
3提供直播答疑和学员作业代码评审,提升学员的代码能力4包含视频封装、编解码(H264、 H265、 硬件加速)、像素格式转换、视频渲染5实现接入多路RTSP网络摄像头,预览多路视频并完成硬盘录像机自动录制功能
也称为YUV,是YUV的压缩版本,不同之处在于Y'CbCr用于数字图像领域,YUV用于模拟信号领域,MPEG、DVD、摄像机中常说的YUV其实就是Y'CbCr。在最近几十年中,视频工程师发现,眼睛对于亮和暗的分辨要比对颜色的分辨更精细一些,也就是说,人眼对色度的敏感程度要低于对亮度的敏感程度。视频序列中的第一个帧,始终都是I帧。如果一段1分钟的视频,有十几秒画面是不动的,或者,有80%的图像面积,整个过程都是不变(不动)的。是的,寻找像素之间的相关性,还有不同时间的图像帧之间,它们的相关性。
本文分析
FFmpeg
的H.264解码器的
宏块
解码(Decode)部分的源代码。
FFmpeg
的H.264解码器调用decode_slice()函数完成了解码工作。这些解码工作可以大体上分为3个步骤:熵解码,
宏块
解码以及环路滤波。本文分析这3个步骤中的第2个步骤。由于
宏块
解码部分的内容比较多,因此将本部分内容拆分成两篇文章:一篇文章记录帧内预测
宏块
(Intra)的
宏块
解码,另一篇文章记录帧间预测
宏块
(