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 |