FFmpeg学习1:视频解码

本文详细介绍了FFmpeg视频解码的过程,包括注册、打开文件、获取CODEC参数、打开解码器、读取数据帧并解码、关闭等步骤。通过理解这些步骤,可以更好地掌握视频解码的基本原理和操作。
摘要由CSDN通过智能技术生成

在视频解码前,先了解以下几个基本的概念:
* 编解码器(CODEC):能够进行视频和音频压缩(CO)与解压缩(DEC),是视频编解码的核心部分。
* 容器/多媒体文件(Container/File):没有了解视频的编解码之前,总是错误的认为平常下载的电影的文件的后缀(avi,mkv,rmvb等)就是视频的编码方式。事实上,刚才提到的几种文件的后缀
并不是视频的编码方式,只是其封装的方式。一个视频文件通常有视频数据、音频数据以及字幕等,封装的格式决定这些数据在文件中是如何的存放的,封装在一起音频、视频等数据组成的多媒体文件,也可以叫做容器(其中包含了视音频数据)。所以,只看多媒体文件的后缀名是难以知道视音频的编码方式的。
* 流数据 Stream,例如视频流(Video Stream),音频流(Audio Stream)。流中的数据元素被称为帧Frame

FFmpeg视频解码过程

通常来说,FFmpeg的视频解码过程有以下几个步骤:
1. 注册所支持的所有的文件(容器)格式及其对应的CODEC av_register_all()
2. 打开文件 avformat_open_input()
3. 从文件中提取流信息 avformat_find_stream_info()
4. 在多个数据流中找到视频流 video stream(类型为MEDIA_TYPE_VIDEO
5. 查找video stream 相对应的解码器 avcodec_find_decoder
6. 打开解码器 avcodec_open2()
7. 为解码帧分配内存 av_frame_alloc()
8. 从流中读取读取数据到Packet中 av_read_frame()
9. 对video 帧进行解码,调用 avcodec_decode_video2()

解码过程的具体说明

1. 注册

av_register_all该函数注册支持的所有的文件格式(容器)及其对应的CODEC,只需要调用一次,故一般放在main函数中。也可以注册某个特定的容器格式,但通常来说不需要这么做。

2. 打开文件

avformat_open_input该函数读取文件的头信息,并将其信息保存到AVFormatContext结构体中

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值