解封装过程中使用到的数据结构 AVFormatContext,AVStream ,AVCodecParameters 说明

发布于:2024-12-06 ⋅ 阅读:(25) ⋅ 点赞:(0)

AVFormatContext 结构体

    unsigned int nb_streams;

                表示该avfromatContext中有多少个 stream

    AVStream **streams;

                AVStream *stream数组,该数组中存放的是 AVStream *,

    void *priv_data;

                编解码时设置。

             * - muxing: set by avformat_write_header()
             * - demuxing: set by avformat_open_input()

                使用方法,类似于AVOptions,在编码的时候,设置bit rate等参数,在RTSP时候,设置UDP,TCP,超时等信息。
                        av_opt_set(c->priv_data, "preset", "slow", 0);

    AVIOContext *pb;

                这个是IO,在解封装的时候用不到,,在封装的时候用来写入文件

    char *url;

                打开的文件的url,也会被记录到这里

    int64_t duration;

                整个媒体文件的时长,如果视频比音频的时长 长,则一般这个值会和视频的时长相等,否则会和音频的时长相等。

    int64_t bit_rate;

                整个媒体文件的比特率,avstream[i]中会有单独的音频或者视频的比特率。

AVStream 结构体

    int index

                索引号,对应的是AVFormatContext中的AVStream **中的索引号

                这个index 作用很大,我们在用av_read_frame读到具体的avpacket时,可以用这个index判断该avpacket 是音频还是视频。

                实际应用中是对 avFormatContext 的 nb_streams进行遍历,找到 avstream的索引,并记住索引号,当读取到packet后,根据记住的索引号 和 packet->streamid对比,就能知道该avpacket是音频的还是视频的packet了

    AVRational time_base;

                时间基数,音频和视频的时间基数不一致

                

    AVRational avg_frame_rate;

                视频对应fps,也就是显示帧率


    AVCodecParameters *codecpar;

                所有的配置参数,该avstream如果是音频,就是音频的参数; 如果是视频,就是视频的参数

     * - demuxing: filled by libavformat on stream creation or in
     *             avformat_find_stream_info()
     * - muxing: filled by the caller before avformat_write_header()
     */

AVCodecParameters 结构体

        enum AVMediaType codec_type;

                        说明是音频还是视频

                        AVMEDIA_TYPE_VIDEO,AVMEDIA_TYPE_AUDIO

        enum AVCodecID   codec_id;

                        编解码器ID


   int format;

    /**
     * - video: the pixel format, the value corresponds to enum AVPixelFormat.
     * - audio: the sample format, the value corresponds to enum AVSampleFormat.
     */


    int64_t bit_rate;

    /**
     * The average bitrate of the encoded data (in bits per second).
     */


    int width; int height;

    /**
     * Video only. The dimensions of the video frame in pixels.
     */


   int sample_rate;

    /**
     * Audio only. The number of audio samples per second.
     */


    AVChannelLayout ch_layout;

    /**
     * Audio only. The channel layout and number of channels.
     */


    int      frame_size;

    /**
     * Audio only. Audio frame size, if known. Required by some formats to be static.
     */


网站公告

今日签到

点亮在社区的每一天
去签到