FFmpeg之AVCodecContext

来源:互联网 发布:手机淘宝差评怎么改 编辑:程序博客网 时间:2024/04/19 20:45

花满楼原创


小白:AVCodec是编解码器,那加多个Context就是AVCodec的使用场景了?

花满楼:可以这样理解。但FFmpeg的命名并不准确,实际上AVCodecContext包括的内容,除了关联AVCodec,还有其它的很多东东。

本文调试并看一看AVCodecContext变量内的数值。

跟调试AVCodec变量一样,直接使用上一节讲的演示代码就可以调试AVCodecContext,部分代码如下 :

            if (videostreamidx > -1) {                codecContext = formatContext->streams[videostreamidx]->codec;                AVCodec* codec = avcodec_find_decoder(codecContext->codec_id);                if (codec) {                    status = avcodec_open2(codecContext, codec, NULL);                    if (status == 0) {                        success = 1;                    }                }            }

同样用gdb来调试就可以了,在拿到codecContext后下断点,可以看到avcodeccontext的部分内容如下:
avcodeccontext内容

avcodeccontext的内容有用于编码器的,也有用于解码器;有用于音频的,也有用于视频的。

其中有一些变量应该引起注意,比如:

width/height  视频的宽与高codec_id 编解码器的id,根据它可以找到对应的编解码器extradata 对于h264编码的视频,保存了pps与sps的参数信息(参考NALU的简介,或后续更具体的介绍)。profile 视频编码复杂等级sample_rate 音频的采样率channels 音频的声道数sample_fmt 音频的采样格式

跟avcodec一样,avcodeccontext结构体在libavcodec/avcodec.h中定义。


阅读全文
0 0