设为首页 加入收藏

TOP

h264文件分析(纯c解析代码)(三)
2019-03-10 22:08:03 】 浏览:656
Tags:h264 文件 分析 解析 代码
eStr[PRTNTF_STR_LEN+1] = {0}; 184 185 T_H264_NALU_HEADER h264NaluHeader = {0}; 186 187 data = nuluData; 188 189 memset(&h264NaluHeader, 0x0, sizeof(T_H264_NALU_HEADER)); 190 191 h264NaluHeader.nal_reference_idc = data[0]>>5 & 0x3; 192 h264NaluHeader.nal_unit_type = data[0] & 0x1f; 193 194 naluNum++; 195 196 #ifdef PRINTF_DEBUG 197 switch (h264NaluHeader.nal_reference_idc) 198 { 199 case NALU_PRIORITY_DISPOSABLE: 200 sprintf(priorityStr, "DISPOS"); 201 break; 202 203 case NALU_PRIORITY_LOW: 204 sprintf(priorityStr, "LOW"); 205 break; 206 207 case NALU_PRIORITY_HIGH: 208 sprintf(priorityStr, "HIGH"); 209 break; 210 211 case NALU_PRIORITY_HIGHEST: 212 sprintf(priorityStr, "HIGHEST"); 213 break; 214 215 default: 216 break; 217 } 218 219 switch (h264NaluHeader.nal_unit_type) 220 { 221 case NALU_TYPE_SLICE: 222 sprintf(typeStr,"SLICE"); 223 break; 224 225 case NALU_TYPE_DPA: 226 sprintf(typeStr,"DPA"); 227 break; 228 229 case NALU_TYPE_DPB: 230 sprintf(typeStr,"DPB"); 231 break; 232 233 case NALU_TYPE_DPC: 234 sprintf(typeStr,"DPC"); 235 break; 236 237 case NALU_TYPE_IDR: 238 sprintf(typeStr,"IDR"); 239 break; 240 241 case NALU_TYPE_SEI: 242 sprintf(typeStr,"SEI"); 243 break; 244 245 case NALU_TYPE_SPS: 246 sprintf(typeStr,"SPS"); 247 break; 248 249 case NALU_TYPE_PPS: 250 sprintf(typeStr,"PPS"); 251 break; 252 253 case NALU_TYPE_AUD: 254 sprintf(typeStr,"AUD"); 255 break; 256 257 case NALU_TYPE_EOSEQ: 258 sprintf(typeStr,"EOSEQ"); 259 break; 260 261 case NALU_TYPE_EOSTREAM: 262 sprintf(typeStr, "EOSTREAM"); 263 break; 264 265 case NALU_TYPE_FILL: 266 sprintf(typeStr, "FILL"); 267 break; 268 269 default: 270 break; 271 } 272 273 printf("%5d| %7s| %6s| %8d|\n",naluNum,priorityStr,typeStr,naluLen); 274 #endif 275 276 } 277 278 int main(int argc, char *argv[]) 279 { 280 int fileLen = 0; 281 int naluLen = 0; 282 int h264BitsPos = 0; 283 284 unsigned char *h264Bits = NULL; 285 unsigned char *naluData = NULL; 286 287 FILE *fp = NULL; 288 289 if (2 != argc) 290 { 291 printf("Usage: flvparse **.flv\n"); 292 293 return -1; 294 } 295 296 fp = fopen(argv[1], "rb"); 297 if (!fp) 298 { 299 printf("open file[%s] error!\n", argv[1]); 300 301 return -1; 302 } 303 304 fseek(fp, 0, SEEK_END); 305 306 fileLen = ftell(fp); 307 308 fseek(fp, 0, SEEK_SET); 309 310 h264Bits = (unsigned char*)malloc(fileLen); 311 if (!h264Bits) 312 { 313 printf("maybe file is too long, or memery is not enough!\n"); 314 315 fclose(fp); 316 317 return -1; 318 } 319 320 memset(h264Bits, 0x0, fileLen); 321 322 if (fread(h264Bits, 1, fileLen, fp) < 0) 323 { 324 printf("read file data to h264Bits error!\n"); 325 326 fclose(fp); 327 free(h264Bits); 328 329 h264Bits = NULL; 330 331 return -1; 332 } 333 334 fclose(fp); 335 336 printf("-----+-------- NALU Table ------+\n"); 337 printf(" NUM | IDC | TYPE | LEN |\n"); 338 printf(&q
首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇内核中对文件的读写操作 下一篇ACM1001:Sum Problem

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目