Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2159606
  • 博文数量: 438
  • 博客积分: 3871
  • 博客等级: 中校
  • 技术积分: 6075
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-10 00:11
个人简介

邮箱: wangcong02345@163.com

文章分类

全部博文(438)

文章存档

2017年(15)

2016年(119)

2015年(91)

2014年(62)

2013年(56)

2012年(79)

2011年(16)

分类: LINUX

2016-04-28 16:49:26

1. audio的track
主要描述在文件:ISO14496-12中
1.1 audio的track如下图所示

2.audio的track
2.1trak-->tkhd
  1. 60f2fc0:                  00 070a 1074 7261 6b00       .....trak.
  2. 60f2fd0: 0000 5c74 6b68 6400 0000 0f7c 25b0 807c  ..\tkhd....|%..|
    60f2fe0: 25b0 8000 0000 0200 0000 0000 1469 9500  %............i..
    60f2ff0: 0000 0000 0000 0000 0000 0001 0000 0000  ................
    60f3000: 0100 0000 0000 0000 0000 0000 0000 0000  ................
    60f3010: 0100 0000 0000 0000 0000 0000 0000 0040  ...............@
    60f3020: 0000 0000 0000 0000 0000 00              ...........
  3. 00 070a 1074 7261 6b      -->trak的长度=0x70a10,type=trak
  4. 00 0000 5c74 6b68 64      -->tkhd的长度=0x5c,type=tkhd
  5. 00 0000 0f                -->tkhd的type与version
  6. 7c 25b0 807c 25b0 80      -->create_time与modify_time
  7. 00 0000 02                -->trak_id=2
  8. 00 0000 00                -->reserved
  9. 00 1469 95
  10. 00 0000 00                -->reserved
  11. 00 0000 00                -->reserved
  12. 00 0000 00                -->layer group
  13. 01 0000 00                -->volume=0x100
  14. 感觉剩下的没有用

2.2mdia-->mdhd
       -->hdlr
  1. 60f3020:                            00 0709 ac6d            ....m
  2. 60f3030: 6469 6100 0000 206d 6468 6400 0000 007c dia... mdhd....|
  3. 60f3040: 25b0 807c 25b0 8000 00ac 4403 8430 0015 %..|%.....D..0..
  4. 60f3050: c700 0000 0000 2d68 646c 7200 0000 0000 ......-hdlr.....
  5. 60f3060: 0000 0073 6f75 6e00 0000 0000 0000 0000 ...soun.........
  6. 60f3070: 0000 0053 6f75 6e64 4861 6e64 6c65 7200 ...SoundHandler.
  7. 00 0709 ac6d 6469 61            -->mdia的长度=0x0709ac,type=mdia
  8. 00 0000 206d 6468 64            -->mdhd的长度=0x20,type=mdhd
  9. 00 0000 00                      -->mdhd的version与flag
  10. 7c 25b0 807c 25b0 80            -->create_time与modify_time
  11. 00 00ac 44                      -->timescale=0xac44=44100
  12. 03 8430 00                      -->duration=0x3843000=58994688
  13. 15 c7                           -->language
  14. 00 0000 2d68 646c 72            -->hdlr的长度=0x20,type=hdlr
  15. 00 0000 00                      -->hdlr的version与flag
  16. 00 0000 00                      -->ctype
  17. 73 6f75 6e                      -->type=soun          ::ffmpeg根据这个得出:st->codec->codec_type=AVMEDIA_TYPE_AUDIO;
  18. 00 0000 00                      -->manu 没有用
  19. 00 0000 00                      -->flags 没有用
  20. 00 0000 00                      -->flag_mask 没有用  
  21. 53 6f75 6e64 4861 6e64 6c65 7200  -->SoundHandler\0
2.3 minf-->smhd
              -->dinf-->dref
  1. 60f3080: 0007 0957 6d69 6e66 0000 0010 736d 6864 ...Wminf....smhd
  2. 60f3090: 0000 0000 0000 0000 0000 0024 6469 6e66 ...........$dinf
  3. 60f30a0: 0000 001c 6472 6566 0000 0000 0000 0001 ....dref........
  4. 60f30b0: 0000 000c 7572 6c20 0000 0001 0007      ....url ....
  5. 0007 0957 6d69 6e66                -->minf的长度=0x70957,type=minf
  6. 0000 0010 736d 6864                -->smhd的长度=0x10,type=smhd
  7. 0000 0024 6469 6e66                -->dinf的长度=0x24,type=dinf
  8. 0000 001c 6472 6566                -->dref的长度=0x1c,type=dref
  9. 0000 0000                          -->dref的version与flag 
  10. 0000 0001                          -->drefentriy=1  
  11. 0000 000c                          -->drefsize=0xc  
  12. 7572 6c20 0000 0001                -->type=url,url的version与flag    
2.4
stbl-->stsd-->esds
      -->stts
     -->stsc
      -->stsz
  1. 60f30b0:                               0007 091b             ....
  2. 60f30c0: 7374 626c 0000 005b 7374 7364 0000 0000 stbl...[stsd....
  3. 60f30d0: 0000 0001 0000 004b 6d70 3461 0000 0000 .......Kmp4a....
  4. 60f30e0: 0000 0001 0000 0000 0000 0000 0002 0010 ................
  5. 60f30f0: 0000 0000 ac44 0000 0000 0027 6573 6473 .....D.....'esds
  6. 60f3100: 0000 0000 0319 0002 0004 1140 1500 0000 ...........@....
  7. 60f3110: 0001 f400 0000 0000 0502 1210 0601 0200 ................
  8. 60f3120: 0000 1873 7474 7300 0000 0000 0000 0100 ...stts.........
  9. 60f3130: 00e1 0c00 0004 0000 0000 1c73 7473 6300 ...........stsc.
  10. 60f3140: 0000 0000 0000 0100 0000 0100 0000 0100 ................
  11. 60f3150: 0000 0100 0384 4473 7473 7a00 0000 0000 ......Dstsz.....
  12. 60f3160: 0000 0000 00e1 0c00 0000 1a00 0000 0900 ................
  13. 60f3170: 0000 0900 0000 a100 0000 c900 0000 d400 ................
  14. 0007 091b 7374 626c            -->stbl的长度=0x7091b,type=stbl
  15. 0000 005b 7374 7364            -->stsd的长度=0x5b,type=stsd
  16. 0000 0000                      -->stsd的version与flag  
  17. 0000 0001                      -->stsd的entries=0x01 
  18. 0000 004b                      -->stsd的size=0x4b
  19. 6d70 3461                      -->stsd的data_format=mp4a    ::ffmpeg根据这个得出:st->codec->codec_id
  20. 0000 0000                      -->reserved
  21. 0000 0001                      -->reserved16,dref_id=0x01 
  22. 0000 0000 0000 0000            -->version,version_level,vendor
  23. 0002                           -->audio的channels=0x02       ;;双声道
  24. 0010                           -->bits_per_coded_sample=0x10=16,16位的采样率
  25. 0000 0027 6573 6473            -->esds的长度=0x27,type=esds
  26. 0000 0000                      -->esds的version与flag
  27. 下面是esds的descr
  28. 00 0000 1873 7474 73           -->stts的长度=0x18,type=stts
  29. 00 0000 00                     -->stts的version与flag 
  30. 00 0000 01                     -->entries=0x01
  31. 00 00e1 0c                     -->sample_count=0xe10c=67612
  32. 00 0004 00                     -->sample_duration=0x400
  33. 00 0000 1c73 7473 63           -->stsc的长度=0x1c,type=stsc
  34. 00 0000 00                     -->stsc的version与flag   
  35. 00 0000 01                     -->stsc的entry
  36. 00 0000 01                     -->stsc的frist   
  37. 00 0000 01                     -->stsc的count
  38. 00 0000 01                     -->stsc的id   
  39. 00 0384 4473 7473 7a           -->stsz的长度=0x38444,type=stsz
  40. 00 0000 00                     -->stsz的version与flag
  41. 00 0000 00                     -->stsc的sample_size=0x0
  42. 00 00e1 0c                     -->stsc的sample_count=0xe10c
  43. 00 0000 1a                     -->sc->sample_sizes[0]=0x1a
  44. 00 0000 09                     -->sc->sample_sizes[1]=0x09
  45. 00 0000 09                     -->sc->sample_sizes[2]=0x09
这儿是audio的stsz,里面的内容是sample_sizes,即每个音频sample在文件中的长度
与下面的stco一起看就知道怎么用了。

2.5 stco
  1. 612b590: 0000 0900 0000 0900 0384 4073 7463 6f00 ..........@stco.
  2. 612b5a0: 0000 0000 00e1 0c00 0013 6300 0022 ec00 ..........c.."..
  3. 612b5b0: 0022 f500 0022 fe00 0023 9f00 0024 6800 ."..."...#...$h.
  4. 612b5c0: 002e cd00 002f 9900 0030 6e00 003a ee00 ...../...0n..:..
  5. 612b5d0: 003b c700 0045 8b00 0046 7300 0047 5c00 .;...E...Fs..G\.
  6. 612b5e0: 0048 4500 005e 2e00 005f 2200 0067 c600 .HE..^..._"..g..
  7. 00 0384 4073 7463 6f           -->stco的长度=0x18,type=stts
  8. 00 0000 00                     -->stco的version与flag 
  9. 00 00e1 0c                     -->entries=0xe10c
  10. 00 0013 63                     -->chunk_offsets[0]=0x1363
  11. 00 0022 ec                     -->chunk_offsets[1]=0x22ec
  12. ...
这儿是audio的stco,里面的内容是chunk_offsets,即每个音频sample在文件中的偏移
例如:chunk_offsets[0]=0x1363,长度通过stsz中的sample_sizes[0]=0x1a确定。
也就是说从san.mp4这个文件的0x1363处读取0x1a个字节的数据,就是音频的第0个sample的数据。
阅读(2030) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~