音视频编码类型

本文介绍了H264编码格式,包括avcc和AnnexB两种格式的特性。在解码过程中,涉及到宏块的16x16结构,以及H264Context结构体的关键字段。解码流程主要包括nal单元的解析、SEI解码、序列参数集和图像参数集的解析,以及片解码。核心函数如avcodec_send_packet和avcodec_receive_frame在解码中的作用也被提及。

H264

格式介绍

  avcc:前四个字节表示nalu的size(大端)

  Annex B:0x000001或者0x00000001开始码,nalu针对0x000000,0x000001,0x000002和0x000003插入0x03防竞争字节

原理简析

宏块固定16x16

源码介绍

  H264Context

struct H264Context {
    const AVClass*  class;
    AVCodecContext* avctx;
    H2645Packet     pkt;              // 存放多个nal,ff_h2645_packet_split
    int             is_avc;           // 判断是否是avc1
    int             nal_length_size;  // nal单元长度表示,(1, 2 or 4)字节
    ......
}

  avcodec_send_packet

  * decode_receive_frame_internal   ->   decode_simple_receive_frame   ->   decode_simple_internal   ->   h264_decode_frame

     decode_nal_units(先判断是否为avcc格式)

  1. ff_h2645_packet_split(根据is_avc的值,是按avc1或h264格式解析获取nal的长度)
  2. ff_h264_sei_decode
  3. ff_h264_decode_seq_parameter_set
  4. ff_h264_decode_picture_parameter_set
  5. ff_h264_queue_decode_slice

     其中ff_h2645_packet_split

  • get_nalsize或find_next_start_code
  • ff_h2645_extract_rbsp
  • h264_parse_nal_header

  avcodec_receive_frame

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值