/*NUAL HEAD
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type |
+---------------+
*/
F = Forbidden_zero_bit =0;
NRI = Nal_ref_idc:表示NAL的优先级。0~3,取值越大,表示当前NAL越重要,需要优先受到保护。如果当前NAL是属于参考帧的片,或是序列参数集,或是图像参数集这些重要的单位时,本句法元素必需大于0。
Type = Nal_unit_type:当前NAL 单元的类型
#define TYPE_SPS_FRAME 0x67 //byte: 01100111 F:0 NRI:11 TYPE:00111 = NALU_TYPE_SPS
#define TYPE_PPS_FRAME 0x68 //byte: 01101000 F:0 NRI:11 TYPE:01000 = NALU_TYPE_PPS
#define TYPE_IDR_FRAME 0x65 //byte: 01100101 F:0 NRI:11 TYPE:00101 = NALU_TYPE_IDR
#define TYPE_SLICE_FRAME 0x41 //byte: 01000001 F:0 NRI:10 TYPE:00001 = NALU_TYPE_SLICE
#define TYPE_SEI_FRAME 0x06 //byte: 00000110 F:0 NRI:00 TYPE:00110 = NALU_TYPE_SEI
#define TYPE_S_FRAME 0x61 //byte: 01100001 F:0 NRI:11 TYPE:00001 = NALU_TYPE_SLICE
/*
/H264定义的类型 values for nal_unit_type
typedef enum {
NALU_TYPE_SLICE = 1, byte: 00001 //非IDR图像的编码条带
NALU_TYPE_DPA = 2, byte: 00010 //编码条带数据分割块A
NALU_TYPE_DPB = 3, byte: 00011 //编码条带数据分割块B
NALU_TYPE_DPC = 4, byte: 00100 //编码条带数据分割块C
NALU_TYPE_IDR = 5, byte: 00101 //IDR图像的编码条带
NALU_TYPE_SEI = 6, byte: 00110 //增强信息(SEI)
NALU_TYPE_SPS = 7, byte: 00111 //序列参数集(SPS)
NALU_TYPE_PPS = 8, byte: 01000 //图像参数集(PPS)
NALU_TYPE_AUD = 9, byte: 01001
NALU_TYPE_EOSEQ = 10, byte: 01010
NALU_TYPE_EOSTREAM = 11, byte: 01011
NALU_TYPE_FILL = 12, byte: 01100
#if (MVC_EXTENSION_ENABLE)
NALU_TYPE_PREFIX = 14, byte: 01110
NALU_TYPE_SUB_SPS = 15, byte: 01111
NALU_TYPE_SLC_EXT = 20, byte: 10100
NALU_TYPE_VDRD = 24 byte: 11000 // View and Dependency Representation Delimiter NAL Unit
#endif
} NaluType;
*/
-(BOOL)h264Parse:(NSData *)frameData{
char firstChar;
BOOL isOK = NO;
[frameData getBytes:&firstChar length:1];
if (firstChar == TYPE_SPS_FRAME) {
NSLog(@"TYPE_SPS_FRAME");
isOK = YES;
}else if (firstChar == TYPE_PPS_FRAME){
NSLog(@"TYPE_PPS_FRAME");
isOK = YES;
}else if (firstChar == TYPE_IDR_FRAME){
NSLog(@"TYPE_IDR_FRAME");
isOK = YES;
}else if (firstChar == TYPE_SLICE_FRAME){
NSLog(@"TYPE_SLICE_FRAME");
}else if (firstChar == TYPE_SEI_FRAME){
NSLog(@"TYPE_SEI_FRAME");
}else if (firstChar == TYPE_S_FRAME){
NSLog(@"TYPE_S_FRAME");
isOK = YES;
}
char lastChar;
[frameData getBytes:&lastChar length:1];
if ((lastChar & 0x80) == 0X80) {
NSLog(@"Start Frame......");
}
return isOK;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)