ffmpeg中读取数据的主要流程

1. av_read_frame 
2. -> read_frame_internal 
3. -> ff_read_packet 
4. -> (s->iformat->read_packet) 
5. -> av_get_packet 
6. -> append_packet_chunked 
7. -> avio_read
其中,第4步中,(s->iformat->read_packet)是对应的demuxer,比如对于mp4文件用的是mov_read_packet. demuxer会解析出下一帧需要多少byte, av_get_packet负责把需要的数据读出来,放到AVPacket中. 
第7步,avio_read中,
  1. 如果AVIOContext中的数据够,AVPacket从AVIOContext中拷贝数据
  2. 如果不够,则调用fill_buffer把buffer填满

两个重要的结构:
  1. AVIOContext: (ffmpeg的源代码里有对这个结构的详细的解释,这里只描述读数据的情况)
    1. unsigned char *buffer; buffer的开始地址
    2. unsigned char *buf_ptr; buffer的当前位置的指针
    3. unsigned char *buf_end; buffer的结束地址
    4. int buffer_size; buffer的最大的大小,即已分配的buffer的大小,默认是32768
    5. int64_t pos; 当前文件的当前位置
  2. AVPacket: 
    1. uint8_t *data;  放读取后的数据的地方;一般情况下,等于AVPacket->buf->data;
    2. int   size; buffer数据的大小
    3. AVBufferRef *buf; 
      1. AVBuffer *buffer; 主要用于记录引用次数
      2. uint8_t *data; 一般情况下,等于AVPacket->data
      3. int      size;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值