H264码流中 分离和解析 nal
来源:互联网 发布:俄罗斯人 知乎 编辑:程序博客网 时间:2024/05/29 14:56
H.264码流解析的步骤就是首先从码流中搜索0x000001和0x00000001,
然后再分离出NALU;分析NALU的各个字段。
找到00 00 01 或 00 00 00 01
if (3 != fread (Buf, 1, 3, h264bitstream)){ free(Buf); return 0; } info2 = FindStartCode2 (Buf); if(info2 != 1) { if(1 != fread(Buf+3, 1, 1, h264bitstream)){ free(Buf); return 0; } info3 = FindStartCode3 (Buf); if (info3 != 1){ free(Buf); return -1; } else { pos = 4; nalu->startcodeprefix_len = 4; } } else{ nalu->startcodeprefix_len = 3; pos = 3; } StartCodeFound = 0; info2 = 0; info3 = 0;
分离NALU程序:
static int FindStartCode2 (unsigned char *Buf){ if(Buf[0]!=0 || Buf[1]!=0 || Buf[2] !=1) return 0; //0x000001? else return 1; } static int FindStartCode3 (unsigned char *Buf){ if(Buf[0]!=0 || Buf[1]!=0 || Buf[2] !=0 || Buf[3] !=1) return 0;//0x00000001? else return 1; } while (!StartCodeFound){ if (feof (h264bitstream)){ nalu->len = (pos-1)-nalu->startcodeprefix_len; memcpy (nalu->buf, &Buf[nalu->startcodeprefix_len], nalu->len); nalu->forbidden_bit = nalu->buf[0] & 0x80; //1 bit nalu->nal_reference_idc = nalu->buf[0] & 0x60; // 2 bit nalu->nal_unit_type = (nalu->buf[0]) & 0x1f;// 5 bit free(Buf); return pos-1; } Buf[pos++] = fgetc (h264bitstream); info3 = FindStartCode3(&Buf[pos-4]); if(info3 != 1) info2 = FindStartCode2(&Buf[pos-3]); StartCodeFound = (info2 == 1 || info3 == 1); }解析:
rewind = (info3 == 1)? -4 : -3; fseek (h264bitstream, rewind, SEEK_CUR) nalu->len = (pos+rewind)-nalu->startcodeprefix_len; memcpy (nalu->buf, &Buf[nalu->startcodeprefix_len], nalu->len);// nalu->forbidden_bit = nalu->buf[0] & 0x80; //1 bit nalu->nal_reference_idc = nalu->buf[0] & 0x60; // 2 bit nalu->nal_unit_type = (nalu->buf[0]) & 0x1f;// 5 bit
0 0
- H264码流中 分离和解析 nal
- 从 H264 码流中解析出 nal 单元
- H264 NAL层解析
- h264 NAL头解析
- H264 NAL层解析
- h264 NAL头解析
- H264 NAL头解析
- H264 NAL头解析
- h264 NAL头解析
- h264 NAL头解析
- H264 NAL头解析
- h264 NAL头解析
- h264 NAL头解析
- h264 NAL头解析
- H264 NAL头解析
- H264 NAL头解析
- h264 NAL头解析
- h264 NAL头解析
- Linux JDK 安装
- Android判断应用或Activity是否存在
- TCP/IP之大明内阁---协议的制定
- 从hadoop发展角度彻底明白hadoop1.x与hadoop2.x的区别
- Android 数据持久化
- H264码流中 分离和解析 nal
- c++新特性
- CCF最优配餐
- 使用chcp命令查看系统编码
- break与continue的用法及区别
- 关于import moudle 出现的错误 Error(2.0)
- 解决log4j找不到指定的路径的解决方法
- CollapsingToolbarLayout属性介绍
- 数据结构::关于广义表的那些事~~