音视频编码类型

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

你可能感兴趣的:(音视频,ffmpeg,音视频,视频编解码)