三、FFmpeg视频解码(附源码)

在视频播放器的开发中,有两个重要的概念——视频Track音频Track,即视频流音频流。“流”是个 抽象的词,用来表示“一连串的通过时间来串连的数据元素”。流中的数据元素称为 帧(frames)。 不同的流是由不同的编码器(codec)来编码生成的。编解码器定义 了流中的数据是如何被编码COded和解码DECoded的,因此它的名字叫做CODEC。 常用的编解码器有Divx和MP3等。从流中读出来的数据叫做包(packets),包是一 段数据,它包含了一段可解码成帧的数据,这些帧就是我们要在应用程序处理的东西 (如播放音频帧或视频帧等)。

每个包要么包含了一个完整的视频帧,要么包含了多个音频帧,这一点非常重要。

我们将实现这样一个流程:

1. 从一个.mp4文件中找到视频流并将它找开;

2. 从视频流中读取包到一帧中;

3. 如果未获取到一个完整的帧,跳转到2

4. 把当前获取到的完整帧保存成文件

5. 跳转到2,直到获取到10帧数据。

 

本节用到的函数主要有

(1) av_register_all():这个函数用于注册所有编解码器等,在旧版本的ffmpeg里面,要在主函数中先调用这个函数,才能使用ffmpeg的其他编解码器等模块功能。但是在新版本的ffmpeg中,不是不需要调用的;

(2) avformat_open_input(&pAVFormatContext, argv[1], NULL, NULL):用于打开视频文件;第一个参数是用于存放相关的文件信息,即ffmpeg打开文件后,会把相关的文件信息(如视频流、音频流的下标)存放到pAVFormatContext这个变量里面。

(3) avformat_find_stream_info(pAV

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章