Opened 4 years ago

Closed 4 years ago

#4632 closed enhancement (needs_more_info)

The mov demuxer doesn't support bad data offsets in tfhd/trun

Reported by: RedDwarf Owned by:
Priority: wish Component: avformat
Version: git-master Keywords: mov
Cc: revol@free.fr, gael.dev@4now.net Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

In this sample http://btskprobe.edgesuite.net/BigBuckBunny/Big%20buck%20bunny.ism/QualityLevels(2436000)/Fragments(video=0)

Which "http://btskprobe.edgesuite.net/BigBuckBunny/Big%20buck%20bunny.ism/Manifest" says was created with "Expression Encoder version 2.1.1216.0". Neither the tfhd or trun boxes specify a data offset. No discussion, the file is broken. But apparently they are on the wild...

VLC is able to play the stream correctly. From what I understand simply because it ignores data offsets. It just looks for sample sizes, looks for the mdat box and is happy with it.

It would be nice if libavformat would better handle these files. I guess a check could be added to see if the sample->pos is inside the (first) mdat box. If it isn't, use as implicit offset the start of the mdat box instead of the one from the moof.

Attachments (1)

broken_offset.ismv (334.7 KB) - added by RedDwarf 4 years ago.

Download all attachments as: .zip

Change History (5)

comment:1 Changed 4 years ago by cehoyos

Please attach a sample input file and post your failing command line including the complete, uncut console output to make this a valid ticket.

Changed 4 years ago by RedDwarf

comment:2 Changed 4 years ago by RedDwarf

I have attached http://btskprobe.edgesuite.net/BigBuckBunny/Big%20buck%20bunny_300000.ismv (26 MiB) until the end of the first video mdat box.
Seems to be an old version of http://www.microsoft.com/en-us/download/details.aspx?id=18199 . The current one, done with "Expression Encoder version 4.0.1628.0", works just fine.

The error with ffplay is this, which seems to be unrelated to the data offsets problem. I noticed the data offsets problem when using my own code using libavformat (since the data offset was wrong, one avio_seek() used a offset behind the current one, the AVIOContext didn't support seek, and it broke).

$ ./ffplay /Big\ buck\ bunny_300000.ismv 
ffplay version N-72981-gdc87758 Copyright (c) 2003-2015 the FFmpeg developers
  built with gcc 5.1.1 (GCC) 20150422 (Red Hat 5.1.1-1)
  configuration: 
  libavutil      54. 27.100 / 54. 27.100
  libavcodec     56. 41.100 / 56. 41.100
  libavformat    56. 36.100 / 56. 36.100
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 17.100 /  5. 17.100
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.100 /  1.  2.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7ff0a0004ac0] Could not find codec parameters for stream 0 (Audio: none (owma / 0x616D776F), 44100 Hz, 2 channels): unknown codec
Consider increasing the value for the 'analyzeduration' and 'probesize' options
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7ff0a0004ac0] Could not find codec parameters for stream 1 (Video: none (ovc1 / 0x3163766F), none, 320x176): unknown codec
Consider increasing the value for the 'analyzeduration' and 'probesize' options
/Big buck bunny_300000.ismv: could not find codec parameters
Last edited 4 years ago by RedDwarf (previous) (diff)

comment:3 Changed 4 years ago by cehoyos

Which version of vlc plays broken_offset.ismv?

comment:4 Changed 4 years ago by cehoyos

  • Resolution set to needs_more_info
  • Status changed from new to closed

Please reopen if you have a sample that plays with any other media player but cannot be decoded with FFmpeg: The sample you uploaded does not play here with vlc. If it plays for you, please post your vlc version.

Note: See TracTickets for help on using tickets.