FFMPEG(二)关键数据结构

总体上,整个播放流程的数据结构由三类组成,分别如下:

1)解协议

核心的数据结构是AVIOContext、URLProtocol和URLContext。对于每种输入源都会定义一个Context,其中包含这些核心数据结构。URLProtocol定义的是从协议流中获取媒体封装流的操作接口,而URLContext用于记录输入源的url、类型等信息和一个AVIOInterruptCB回调函数。URLContext的priv_data一般就是AVIOContext类型,它与AVIOInterruptCB配合完成解协议的过程变量,保证流程的衔接。比如FTP协议多媒体源定义了FTPContext就内置了FTP认证的信息和FTP控制连接和数据连接两个URLContext变量。
2)解封装
核心数据结构是AVFormatContext,其关键的关键的成员如下:
typedef struct AVFormatContext {
    struct AVInputFormat *iformat;
    struct AVOutputFormat *oformat;
    AVIOContext *pb;
    unsigned int nb_streams;
    AVStream **streams;
    char filename[1024];
    AVProgram **programs;
    AVChapter **chapters;
    AVDictionary *metadata;
    enum AVDurationEstimationMethod duration_estimation_method;
    AVFormatInternal *internal;
    AVCodec *video_codec;
    AVCodec *audio_codec;
    AVCodec *subtitle_codec;
} AVFormatContext;
3)解编码
每个AVStream存储一个视频/音频流的相关数据;每个AVStream对应一个AVCodecContext,存储该视频/音频流使用解码方式的相关数据;每个AVCodecContext中对应一个AVCodec,包含该视频/音频对应的解码器。每种解码器都对应一个AVCodec结构。AVStream内置一个AVPacket成员,AVCodecContext内置一个AVFrame,通过这两个变量推动着媒体播放数据的输出。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值