第一步深入理解H264

H264的内容非常多,网上也有很多资料,这里我写下我在做直播过程中对H264数据格式的一些理解正式进入正题。

一、H264格式:

H264都是由一个一个NAL单元组成,每一个单元的起始码都是0x00 0x00 0x00 0x01或者0x00 0x00 0x01来组成,紧接着后面一个字节就代表着这一帧数据的类型H264的Nal类型总共有这么几种:

// MARK: - NALType
enum NALType: UInt8 {
    case UNSPEC   = 0
    case SLICE    = 1 // P frame
    case DPA      = 2
    case DPB      = 3
    case DPC      = 4
    case IDR      = 5 // I frame
    case SEI      = 6
    case SPS      = 7
    case PPS      = 8
    case AUD      = 9
    case EOSEQ    = 10
    case EOSTREAM = 11
    case FILL     = 12
}
具体计算通过&0x1f可以得出,其是推流过程我们只需要了解 p帧 I帧 SPS PPS SEI这几种数据类型就可以了。 下面是我录制的一个h264文件通过它可以更清晰的理解H264的内部结构。

二进制:

第一步深入理解H264_第1张图片

下面可以分析第一帧 00 00 00 01 27,0x27&0x1f也就是 00100111&00011111 = 00000111 = 7也就是代表第一帧是sps帧

第二帧 00 00 00 01 28 &0x1f的结果就是8代表的是pps帧,第三帧00 00 00 01 06就是SEI帧 第四帧00 00 00 01 25就是IDR帧 第五帧 00 00 00 01 21 就是P帧 第6,7帧都是P帧,...依次去这样判断,紧接着还是这样的结构:


你可能感兴趣的:(ios,rtmp直播整理)