Eyevinn / mp4ff

Library and tools for parsing and writing MP4 files including video, audio and subtitles. The focus is on fragmented files. Includes mp4ff-info, mp4ff-encrypt, mp4ff-decrypt and other tools.
MIT License
445 stars 81 forks source link

sbgp grouping type seam not supported #367

Closed 3052 closed 1 month ago

3052 commented 1 month ago

using this file:

https://aod.itunes.apple.com/itunes-assets/HLSMusic126/v4/f9/dc/44/f9dc4430-3eee-e7b9-1c05-357cd73909f1/P638263031_A1673536427_audio_en_gr2768_mp4a-A6_m.mp4

I get this result:

> mp4ff-info P638263031_A1673536427_audio_en_gr2768_mp4a-A6_m.mp4
2024/07/26 21:29:39 sbgp grouping type seam not supported

other tools work fine:

Bento4-SDK-1-6-0-641.x86_64-microsoft-win32> bin\mp4dump P638263031_A1673536427_audio_en_gr2768_mp4a-A6_m.mp4

result:

[ftyp] size=8+28
  major_brand = iso5
  minor_version = 1
  compatible_brand = isom
  compatible_brand = iso5
  compatible_brand = hlsf
  compatible_brand = cmfc
  compatible_brand = ccea
[moov] size=8+1034
  [mvhd] size=12+96
    timescale = 48000
    duration = 0
    duration(ms) = 0
  [trak] size=8+797
    [tkhd] size=12+80, flags=1
      enabled = 1
      id = 1
      duration = 0
      width = 0.000000
      height = 0.000000
    [edts] size=8+28
      [elst] size=12+16
        entry_count = 1
        entry/segment duration = 0
        entry/media time = 2336
        entry/media rate = 1
    [mdia] size=8+529
      [mdhd] size=12+20
        timescale = 48000
        duration = 0
        duration(ms) = 0
        language = und
      [hdlr] size=12+37
        handler_type = soun
        handler_name = Core Media Audio
      [minf] size=8+440
        [smhd] size=12+4
          balance = 0
        [dinf] size=8+28
          [dref] size=12+16
            [url ] size=12+0, flags=1
              location = [local to file]
        [stbl] size=8+380
          [stsd] size=12+300
            entry_count = 2
            [enca] size=8+140
              data_reference_index = 1
              channel_count = 2
              sample_size = 16
              sample_rate = 48000
              [dec3] size=8+7
                data_rate = 768
                complexity_index_type_a = 16
                [00] = fscod=0, bsid=16, bsmod=0, acmod=7, lfeon=1, num_dep_sub=0, chan_loc=0
              [sinf] size=8+89
                [frma] size=8+4
                  original_format = ec-3
                [schm] size=12+8
                  scheme_type = cbcs
                  scheme_version = 65536
                [schi] size=8+49
                  [tenc] size=12+37, version=1
                    default_isProtected = 1
                    default_Per_Sample_IV_Size = 0
                    default_KID = [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00]
                    default_crypt_byte_block = 0
                    default_skip_byte_block = 0
                    default_constant_IV_size = 16
                    default_constant_IV = [01 fd 9a 7b 55 fb 70 21 ec 2a 74 21 e3 8a 21 f7]
            [enca] size=8+140
              data_reference_index = 1
              channel_count = 2
              sample_size = 16
              sample_rate = 48000
              [dec3] size=8+7
                data_rate = 768
                complexity_index_type_a = 16
                [00] = fscod=0, bsid=16, bsmod=0, acmod=7, lfeon=1, num_dep_sub=0, chan_loc=0
              [sinf] size=8+89
                [frma] size=8+4
                  original_format = ec-3
                [schm] size=12+8
                  scheme_type = cbcs
                  scheme_version = 65536
                [schi] size=8+49
                  [tenc] size=12+37, version=1
                    default_isProtected = 1
                    default_Per_Sample_IV_Size = 0
                    default_KID = [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00]
                    default_crypt_byte_block = 0
                    default_skip_byte_block = 0
                    default_constant_IV_size = 16
                    default_constant_IV = [ec d3 d9 63 a9 7f d5 37 72 4b 44 4c ec c6 16 6b]
          [stts] size=12+4
            entry_count = 0
          [stsc] size=12+4
            entry_count = 0
          [stsz] size=12+8
            sample_size = 0
            sample_count = 0
          [stco] size=12+4
            entry_count = 0
    [udta] size=8+124
      [swre] size=8+54
      [ludt] size=8+54
  [udta] size=8+73
    [swre] size=8+65
  [mvex] size=8+32
    [trex] size=12+20
      track id = 1
      default sample description index = 1
      default sample duration = 0
      default sample size = 0
      default sample flags = 0
[moof] size=8+3961
  [mfhd] size=12+4
    sequence number = 1
  [traf] size=8+3937
    [tfhd] size=12+12, flags=20018
      track ID = 1
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 2336
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [sgpd] size=12+28, version=1
      grouping_type = seam
      default_length = 16
      entry_count = 1
      entries:
        (       0) [7c fa 6e 13 15 c4 32 9d 79 5a b6 ad 1f 71 00 00]
    [sbgp] size=12+24
      grouping_type = seam
      entry_count = 2
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3977
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 2
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 721184
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 3
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 1440032
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 4
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 2158880
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 5
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 2877728
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 6
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 3596576
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 7
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 4315424
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 8
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 5034272
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 9
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 5753120
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 10
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 6471968
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 11
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 7190816
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 12
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 7909664
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 13
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 8628512
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 14
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 9347360
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 15
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 10066208
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 16
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 10785056
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 17
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 11503904
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 18
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 12222752
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 19
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 12941600
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 20
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 13660448
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3889
  [mfhd] size=12+4
    sequence number = 21
  [traf] size=8+3865
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 14379296
    [senc] size=12+3748, flags=2
      sample info count = 468
    [saiz] size=12+5
      default sample info size = 8
      sample count = 468
    [saio] size=12+8
      entry_count = 1
    [trun] size=12+8, flags=1
      sample count = 468
      data offset = 3905
[mdat] size=8+1437696
[moof] size=8+3125
  [mfhd] size=12+4
    sequence number = 22
  [traf] size=8+3101
    [tfhd] size=12+16, flags=2001a
      track ID = 1
      sample description index = 2
      default sample duration = 1536
      default sample size = 3072
    [tfdt] size=12+8, version=1
      base media decode time = 15098144
    [senc] size=12+1940, flags=2
      sample info count = 242
    [saiz] size=12+5
      default sample info size = 8
      sample count = 242
    [saio] size=12+8
      entry_count = 1
    [sgpd] size=12+28, version=1
      grouping_type = seam
      default_length = 16
      entry_count = 1
      entries:
        (       0) [8e 55 3b c5 9a 84 c3 8f 4a 9a de ba 80 59 00 00]
    [sbgp] size=12+24
      grouping_type = seam
      entry_count = 2
    [trun] size=12+976, flags=101
      sample count = 242
      data offset = 3141
[mdat] size=8+743424
tobbee commented 1 month ago

@3052 Thanks for reporting the issue. The parsing of the sbgp box was not the actual problem, but the combination with encryption information in the senc box. Fixed by #368.