Wowza Community

mp4 file with major_brand mp42 will not playback on wowza 4.5.0.03

Hello,

I have two sibling files that are from a common parent (child copies). The difference between the two is the major_version, with the mp42 file NOT playing while isom does.

Can somebody explain the reason why the mp42 would NOT work but a isom does?

Grandparent file : sample.mp4 (big buck bunny form /content)

Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    title           : Big Buck Bunny, Sunflower version
    Duration: 00:10:34.63, start: 0.021333, bitrate: 743 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 512x288 [SAR 1:1 DAR 16:9], 640 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

converted to shorter file for testing with

ffmpeg -ss 0:00:00 -i /home/_wow/content/sample.mp4 -t 0:0:10 -c copy /home/_wow/content/parent.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/_wow/content/out.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    title           : Big Buck Bunny, Sunflower version
    Duration: 00:00:10.00, start: 0.021000, bitrate: 705 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 512x288 [SAR 1:1 DAR 16:9], 601 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

Child number one is created with gstreamer 1.10 using x264enc and produces

Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42mp41isomiso2
    title           : Big Buck Bunny, Sunflower version
  Duration: 00:00:10.01, start: 0.000000, bitrate: 487 kb/s
    Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt470bg/smpte170m/bt709), 512x288 [SAR 1:1 DAR 16:9], 460 kb/s, 30 fps, 30 tbr, 3k tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 21 kb/s (default)
    Metadata:
      creation_time   : 2016-11-17 13:13:16      handler_name    : SoundHandler

This will NOT play back from wowza with a server comment

MediaReaderH264.open[2]: java.lang.NegativeArraySizeException: java.lang.NegativeArraySizeException|at com.wowza.wms.mediareader.h264.util.QTUtils.parseAtomudta(QTUtils.java:393)|at com.wowza.wms.mediareader.h264.util.QTUtils.parseAtomtrak(QTUtils.java:1047)|at com.wowza.wms.mediareader.h264.util.QTUtils.parseAtommoov(QTUtils.java:918)|at com.wowza.wms.mediareader.h264.util.QTUtils.parseQTMediaContainer(QTUtils.java:149)|at com.wowza.wms.mediareader.h264.MediaReaderH264.open(MediaReaderH264.java:328)|

If I now take that file and do a copy through ffmpeg it plays.

ffmpeg -i /home/_wow/content/child.mp4  -c copy /home/_wow/content/sibling.mp4
Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    title           : Big Buck Bunny, Sunflower version
    Duration: 00:00:10.01, start: 0.000000, bitrate: 490 kb/s
    Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt470bg/smpte170m/bt709), 512x288 [SAR 1:1 DAR 16:9], 460 kb/s, 30 fps, 30 tbr, 12k tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 21 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

My understanding is the ffmpeg -copy command should not be changing the structure of the file. Is the change to isom a real change or just metadata. Is there anything else I can adjust on the mp42 file so it will play?

Thanks

Art

This may be a bug with the FFmpeg build that you have failing to move the moov atom properly. Please consult FFmpeg development for additional information.

You stated that you used gstreamer 1.10 to create the child file, however you did not show the method of creation. Best practice is to force the output container type using the -f switch.

ffmpeg -ss 0:00:00 -i /home/_wow/content/sample.mp4 -t 0:0:10 -c copy -f mp4 /home/_wow/content/parent.mp4

When seeking FFmpeg may not start the copy on a keyframe which will break playback if you are using an older version. If you encode the file then FFmpeg will create a keyframe at the beginning of the output file as well as add the moov atom at the end of the file. Also ensure that you are using the latest version of FFMpeg as it will have a more accurate seek method than earlier versions.