Body: <p>I am writing a MP4 video from scratch using the C++ API (libav* 4.1.1). This video can be played back just fine using ffplay or VLC. But the Finder Preview and the Quicktime Player on OSX (10.13 and 10.14 tested) don't work, the finder hangs and Quicktime player shows black and silent.</p>
  
  <p>This is the output of ffplay:</p>
  
  <pre><code>ffplay version 4.1.1 Copyright (c) 2003-2019 the FFmpeg developers
    built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
    configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-videotoolbox --disable-libjack --disable-indev=jack --enable-libaom --enable-libsoxr
    libavutil      56. 22.100 / 56. 22.100
    libavcodec     58. 35.100 / 58. 35.100
    libavformat    58. 20.100 / 58. 20.100
    libavdevice    58.  5.100 / 58.  5.100
    libavfilter     7. 40.101 /  7. 40.101
    libavresample   4.  0.  0 /  4.  0.  0
    libswscale      5.  3.100 /  5.  3.100
    libswresample   3.  3.100 /  3.  3.100
    libpostproc    55.  3.100 / 55.  3.100
  Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'demo.mp4':
    Metadata:
      major_brand     : isom
      minor_version   : 512
      compatible_brands: isomiso2avc1mp41
      encoder         : Lavf58.20.100
    Duration: 00:01:23.29, start: 0.000000, bitrate: 566 kb/s
      Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 800x576 [SAR 1:1 DAR 25:18], 498 kb/s, 23.99 fps, 23.98 tbr, 24k tbn, 48k tbc (default)
      Metadata:
        handler_name    : VideoHandler
      Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 64 kb/s (default)
      Metadata:
        handler_name    : SoundHandler
  </code></pre>
  
  <p>The video settings are chosen from a working MP4 video, and I can't spot any difference in ffprobe or ffplay.</p>
  
  <p>This is, how I setup the streams (condensed):</p>
  
  <pre><code>// container:
  avformat_alloc_output_context2 (&amp;formatContext, NULL, NULL, filename);
  // formatContext-&gt;oformat-&gt;flags has AVFMT_GLOBALHEADER set automatically
  
  // video stream:
  codec = av_guess_codec (formatContext-&gt;oformat, nullptr, filename, nullptr, AVMEDIA_TYPE_VIDEO);
  auto* encoder = avcodec_find_encoder (codec);
  
  stream-&gt;time_base = av_make_q (1, settings.timebase);
  auto* context = avcodec_alloc_context3 (encoder);
  context-&gt;width = settings.frameSize.width;
  context-&gt;height = settings.frameSize.height;
  context-&gt;pix_fmt = AV_PIX_FMT_YUV420P;
  context-&gt;sample_aspect_ratio = av_make_q (1, 1);
  context-&gt;color_range = AVCOL_RANGE_MPEG;
  context-&gt;bit_rate  = 480000;
  context-&gt;gop_size  = 10;
  context-&gt;time_base = av_make_q (1, settings.timebase);
  avcodec_parameters_from_context (stream-&gt;codecpar, context);
  
  AVDictionary* options = nullptr;
  
  if (encoder-&gt;id == AV_CODEC_ID_H264) {
      av_dict_set (&amp;options, "preset", "slow", 0);
      av_dict_set (&amp;options, "tune", "film", 0);
      av_opt_set (context-&gt;priv_data, "profile", "baseline", AV_OPT_SEARCH_CHILDREN);
  }
  if (formatContext-&gt;oformat-&gt;flags &amp; AVFMT_GLOBALHEADER)
              context-&gt;flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
  
  int ret = avcodec_open2 (context, encoder, &amp;options);
  av_dict_free (&amp;options);
  
  // audio stream:
  codec = av_guess_codec (formatContext-&gt;oformat, nullptr, filename, nullptr, AVMEDIA_TYPE_AUDIO);
  auto* encoder = avcodec_find_encoder (codec);
  
  auto* stream = avformat_new_stream (formatContext, NULL);
  
  auto channelLayout = AV_CH_LAYOUT_STEREO;
  
  stream-&gt;time_base = av_make_q (1, settings.timebase);
  auto* context = avcodec_alloc_context3 (encoder);
  context-&gt;sample_rate = settings.timebase;
  context-&gt;sample_fmt = AV_SAMPLE_FMT_FLTP;
  context-&gt;channel_layout = channelLayout;
  context-&gt;channels = av_get_channel_layout_nb_channels (channelLayout);
  context-&gt;bit_rate = 64000;
  context-&gt;frame_size = settings.defaultNumSamples;
  context-&gt;bits_per_raw_sample = 32;
  context-&gt;time_base = av_make_q (1, settings.timebase);
  avcodec_parameters_from_context (stream-&gt;codecpar, context);
  
  if (formatContext-&gt;oformat-&gt;flags &amp; AVFMT_GLOBALHEADER)
              context-&gt;flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
  
  int ret = avcodec_open2 (context, encoder, NULL);
  
  // preparing for writing:
  if (!(formatContext-&gt;oformat-&gt;flags &amp; AVFMT_NOFILE))
      if (avio_open (&amp;formatContext-&gt;pb, filename, AVIO_FLAG_WRITE) &lt; 0)
          return false;
  
  auto ret = avformat_write_header (formatContext, nullptr);
  
  // send audio and video frames, writing using
  av_interleaved_write_frame (formatContext, packet);
  
  // closing container:
  // [flushing sending nullptr frames]
  
  av_write_trailer (formatContext);
  </code></pre>
  
  <p>The full source code is available on github:
  <a href="https://github.com/ffAudio/foleys_video_engine/blob/973019d0c85e740b6f7bfdda190de49ce8d0ce6a/ReadWrite/FFmpeg/FFmpegWriter.cpp" rel="nofollow noreferrer">https://github.com/ffAudio/foleys_video_engine/blob/973019d0c85e740b6f7bfdda190de49ce8d0ce6a/ReadWrite/FFmpeg/FFmpegWriter.cpp</a></p>
  
  <p>If necessary, I can add the parts, how I fill the frames and packets as well.</p>
  
  <ul>
  <li>Are there only certain settings known to work?</li>
  <li>Did I miss some setting to be declared, like frame duration?</li>
  <li>Something completely different?</li>
  </ul>
  
  <p>EDIT: this is the output of qtff-movdump:</p>
  
  <pre><code>➜  src git:(master) ✗ ./movdump ~/Movies/demo.mp4
  ftyp: s=        32 (0x00000020), o=         0 (0x00000000)
    major_brand: isom (69 73 6f 6d)
    minor_version: 0x00000200
    compatible_brands: isom (69 73 6f 6d), iso2 (69 73 6f 32), avc1 (61 76 63 31), mp41 (6d 70 34 31)
  free: s=         8 (0x00000008), o=        32 (0x00000020)
  mdat: s=   5858977 (0x005966a1), o=        40 (0x00000028)
    ...skipped 5858969 bytes
  moov: s=     44032 (0x0000ac00), o=   5859017 (0x005966c9)
      mvhd: s=       108 (0x0000006c), o=   5859025 (0x005966d1)
        version: 0
        flags: 0x000000
        creation_time: 1904-01-01T00:00:00Z (0 sec since 1904-01-01)
        modification_time: 1904-01-01T00:00:00Z (0 sec since 1904-01-01)
        timescale: 1000
        duration: 83292 (83.292000 sec)
        preferred_rate: 1.000000
        preferred_volume: 1.000000
        reserved: (size 10)  00 00 00 00 00 00 00 00 00 00  |..........|
        matrix:
          1.000000 0.000000 0.000000
          0.000000 1.000000 0.000000
          0.000000 0.000000 1.000000
        preview_time: 0
        preview_duration: 0 (0.000000 sec)
        poster_time: 0
        selection_time: 0
        selection_duration: 0 (0.000000 sec)
        current_time: 0
        next_track_id: 3
      trak: s=     17539 (0x00004483), o=   5859133 (0x0059673d)
          tkhd: s=        92 (0x0000005c), o=   5859141 (0x00596745)
            version: 0
            flags: 0x000003
            creation_time: 1904-01-01T00:00:00Z (0 sec since 1904-01-01)
            modification_time: 1904-01-01T00:00:00Z (0 sec since 1904-01-01)
            track_id: 1
            reserved: 0x00000000
            duration: 83292 (83.292000 sec)
            reserved: (size 8)  00 00 00 00 00 00 00 00  |........|
            layer: 0
            alternate_group: 0
            volume: 0.000000
            reserved: 0x0000
            matrix:
              1.000000 0.000000 0.000000
              0.000000 1.000000 0.000000
              0.000000 0.000000 1.000000
            track_width: 800.000000
            track_height: 576.000000
          edts: s=        36 (0x00000024), o=   5859233 (0x005967a1)
              elst: s=        28 (0x0000001c), o=   5859241 (0x005967a9)
                version: 0
                flags: 0x000000
                edit_list_table (         1):
                       i    duration       time          rate
                    0000       83292          0      1.000000
          mdia: s=     17403 (0x000043fb), o=   5859269 (0x005967c5)
              mdhd: s=        32 (0x00000020), o=   5859277 (0x005967cd)
                version: 0
                flags: 0x000000
                creation_time: 1904-01-01T00:00:00Z (0 sec since 1904-01-01)
                modification_time: 1904-01-01T00:00:00Z (0 sec since 1904-01-01)
                timescale: 24000
                duration: 1998997 (83.291542 sec)
                language: 0x55c4 (und)
                quality: 0
              hdlr: s=        45 (0x0000002d), o=   5859309 (0x005967ed)
                version: 0
                flags: 0x000000
                component_type: .... (00 00 00 00)
                component_sub_type: vide
                component_manufacturer: 0
                component_flags: 0x00000000
                component_flags_mask: 0x00000000
                component_name: 'VideoHandler' + 0x00
              minf: s=     17318 (0x000043a6), o=   5859354 (0x0059681a)
                  vmhd: s=        20 (0x00000014), o=   5859362 (0x00596822)
                    version: 0
                    flags: 0x000001 (no lean ahead)
                    graphics_mode: 00
                    opcolor: RGB(0x0000,0x0000,0x0000)
                  dinf: s=        36 (0x00000024), o=   5859382 (0x00596836)
                      dref: s=        28 (0x0000001c), o=   5859390 (0x0059683e)
                        version: 0
                        flags: 0x000000
                        entries (         1):
                          url : s=        12 (0x0000000c), o=   5859406 (0x0059684e)
                            version: 0
                            flags: 0x000001 (self reference)
                            data: (0 bytes) url:
                  stbl: s=     17254 (0x00004366), o=   5859418 (0x0059685a)
                      stsd: s=       126 (0x0000007e), o=   5859426 (0x00596862)
                        version: 0
                        flags: 0x000000
                        sample_descriptions (0x00000001):
                          size: 0000006e
                          data_format: avc1 (61 76 63 31)
                          reserved: (size 6)  00 00 00 00 00 00  |......|
                          data_ref_index: 0x0001
                          version: 0
                          revision: 0x0000
                          vendor: .... (00 00 00 00)
                          temporal_quality: 0x00000000
                          spatial_quality: 0x00000000
                          width: 800
                          height: 576
                          horizontal_resolution: 72.000000
                          vertical_resolution: 72.000000
                          data_size: 0
                          frame_count: 1
                          compressor_name: '' + 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
                          depth: 24
                          color_table_id: 0xffff
                          avcC: s=         8 (0x00000008), o=   5859528 (0x005968c8)
  Exception: num_read &lt;= CURRENT_ATOM.rem_size failed at line 177
  </code></pre>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-04-29T12:04:33.860Z
Comments.Text: What does movdump show as different between the files, especially on mvhd timescale and stsd?
Comments.UserDisplayName: Gyan
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-04-29T12:44:37.400Z
Comments.Text: Thank you @Gyan for pointing me to that tool. I didn't see an output for mvhd and stsd, but that might be to my poor understanding of proper terminology. I'll add the relevant output in the question above.
Comments.UserDisplayName: Daniel Walz
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-04-29T14:06:09.267Z
Comments.Text: movdump turns out to be a generic name. I meant the one here: https://github.com/bbc/qtff-parameter-editor
Comments.UserDisplayName: Gyan
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-04-29T14:51:16.163Z
Comments.Text: Thanks @Gyan, that looks better now. I replaced the output in the post.
  It might also be a hint, that the movdump stops with an exception.
Comments.UserDisplayName: Daniel Walz
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-04-29T15:00:35.760Z
Comments.Text: Your video stream config is corrupt: `avcC: s=         8 (0x00000008)`, this indicates that no extradata was found by the muxer for the video stream.
Comments.UserDisplayName: Gyan
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-04-29T15:17:47.240Z
Comments.Text: You should set global header before opening encoders.
Comments.UserDisplayName: Gyan
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-04-29T18:09:47.100Z
Comments.Text: That is strange, I verified by setting a breakpoint, that AVFMT_GLOBALHEADER is set in `formatContext->oformat->flags` and I copy the flag into the streams using `context->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;` - also the docs of AVCodecContext state, that extradata is filled by `libavcodec` and in AVFormatContext I don't see extradata.
Comments.UserDisplayName: Daniel Walz
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-04-29T18:15:15.920Z
Comments.Text: You do it after `int ret = avcodec_open2 (context, encoder, NULL);`. Do it before and copy parameters from context after opening.
Comments.UserDisplayName: Gyan
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-04-29T20:22:24.120Z
Comments.Text: Thanks, I edited the post above: I could verify, that `AVFMT_GLOBALHEADER` is automatically set after calling `avformat_alloc_output_context2()` guessing the format from the mp4 filename.
  I moved copying the flag to the streams to before calling `avcodec_open2 (context, encoder, &options);` according to your suggestion, but it didn't change the output, neither of movdump nor does it play, unfortunately.
Comments.UserDisplayName: Daniel Walz
Tags: <ffmpeg><mp4><libav>
Title: MP4 Video created with ffmpeg C++ api does not show in OSX
UserDisplayName: Daniel Walz
ThreadText: # MP4 Video created with ffmpeg C++ api does not show in OSX
  
  (Asked by: username_0 on 2019-04-29)
  
  I am writing a MP4 video from scratch using the C++ API (libav\* 4.1.1). This video can be played back just fine using ffplay or VLC. But the Finder Preview and the Quicktime Player on OSX (10.13 and 10.14 tested) don't work, the finder hangs and Quicktime player shows black and silent.
  
  This is the output of ffplay:
  
  ```
  ffplay version 4.1.1 Copyright (c) 2003-2019 the FFmpeg developers
    built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
    configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-videotoolbox --disable-libjack --disable-indev=jack --enable-libaom --enable-libsoxr
    libavutil      56. 22.100 / 56. 22.100
    libavcodec     58. 35.100 / 58. 35.100
    libavformat    58. 20.100 / 58. 20.100
    libavdevice    58.  5.100 / 58.  5.100
    libavfilter     7. 40.101 /  7. 40.101
    libavresample   4.  0.  0 /  4.  0.  0
    libswscale      5.  3.100 /  5.  3.100
    libswresample   3.  3.100 /  3.  3.100
    libpostproc    55.  3.100 / 55.  3.100
  Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'demo.mp4':
    Metadata:
      major_brand     : isom
      minor_version   : 512
      compatible_brands: isomiso2avc1mp41
      encoder         : Lavf58.20.100
    Duration: 00:01:23.29, start: 0.000000, bitrate: 566 kb/s
      Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 800x576 [SAR 1:1 DAR 25:18], 498 kb/s, 23.99 fps, 23.98 tbr, 24k tbn, 48k tbc (default)
      Metadata:
        handler_name    : VideoHandler
      Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 64 kb/s (default)
      Metadata:
        handler_name    : SoundHandler
  
  ```
  
  The video settings are chosen from a working MP4 video, and I can't spot any difference in ffprobe or ffplay.
  
  This is, how I setup the streams (condensed):
  
  ```
  // container:
  avformat_alloc_output_context2 (&formatContext, NULL, NULL, filename);
  // formatContext->oformat->flags has AVFMT_GLOBALHEADER set automatically
  
  // video stream:
  codec = av_guess_codec (formatContext->oformat, nullptr, filename, nullptr, AVMEDIA_TYPE_VIDEO);
  auto* encoder = avcodec_find_encoder (codec);
  
  stream->time_base = av_make_q (1, settings.timebase);
  auto* context = avcodec_alloc_context3 (encoder);
  context->width = settings.frameSize.width;
  context->height = settings.frameSize.height;
  context->pix_fmt = AV_PIX_FMT_YUV420P;
  context->sample_aspect_ratio = av_make_q (1, 1);
  context->color_range = AVCOL_RANGE_MPEG;
  context->bit_rate  = 480000;
  context->gop_size  = 10;
  context->time_base = av_make_q (1, settings.timebase);
  avcodec_parameters_from_context (stream->codecpar, context);
  
  AVDictionary* options = nullptr;
  
  if (encoder->id == AV_CODEC_ID_H264) {
      av_dict_set (&options, "preset", "slow", 0);
      av_dict_set (&options, "tune", "film", 0);
      av_opt_set (context->priv_data, "profile", "baseline", AV_OPT_SEARCH_CHILDREN);
  }
  if (formatContext->oformat->flags & AVFMT_GLOBALHEADER)
              context->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
  
  int ret = avcodec_open2 (context, encoder, &options);
  av_dict_free (&options);
  
  // audio stream:
  codec = av_guess_codec (formatContext->oformat, nullptr, filename, nullptr, AVMEDIA_TYPE_AUDIO);
  auto* encoder = avcodec_find_encoder (codec);
  
  auto* stream = avformat_new_stream (formatContext, NULL);
  
  auto channelLayout = AV_CH_LAYOUT_STEREO;
  
  stream->time_base = av_make_q (1, settings.timebase);
  auto* context = avcodec_alloc_context3 (encoder);
  context->sample_rate = settings.timebase;
  context->sample_fmt = AV_SAMPLE_FMT_FLTP;
  context->channel_layout = channelLayout;
  context->channels = av_get_channel_layout_nb_channels (channelLayout);
  context->bit_rate = 64000;
  context->frame_size = settings.defaultNumSamples;
  context->bits_per_raw_sample = 32;
  context->time_base = av_make_q (1, settings.timebase);
  avcodec_parameters_from_context (stream->codecpar, context);
  
  if (formatContext->oformat->flags & AVFMT_GLOBALHEADER)
              context->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
  
  int ret = avcodec_open2 (context, encoder, NULL);
  
  // preparing for writing:
  if (!(formatContext->oformat->flags & AVFMT_NOFILE))
      if (avio_open (&formatContext->pb, filename, AVIO_FLAG_WRITE) < 0)
          return false;
  
  auto ret = avformat_write_header (formatContext, nullptr);
  
  // send audio and video frames, writing using
  av_interleaved_write_frame (formatContext, packet);
  
  // closing container:
  // [flushing sending nullptr frames]
  
  av_write_trailer (formatContext);
  
  ```
  
  The full source code is available on github:
  <https://github.com/ffAudio/foleys_video_engine/blob/973019d0c85e740b6f7bfdda190de49ce8d0ce6a/ReadWrite/FFmpeg/FFmpegWriter.cpp>
  
  If necessary, I can add the parts, how I fill the frames and packets as well.
  
  * Are there only certain settings known to work?
  * Did I miss some setting to be declared, like frame duration?
  * Something completely different?
  
  EDIT: this is the output of qtff-movdump:
  
  ```
  ➜  src git:(master) ✗ ./movdump ~/Movies/demo.mp4
  ftyp: s=        32 (0x00000020), o=         0 (0x00000000)
    major_brand: isom (69 73 6f 6d)
    minor_version: 0x00000200
    compatible_brands: isom (69 73 6f 6d), iso2 (69 73 6f 32), avc1 (61 76 63 31), mp41 (6d 70 34 31)
  free: s=         8 (0x00000008), o=        32 (0x00000020)
  mdat: s=   5858977 (0x005966a1), o=        40 (0x00000028)
    ...skipped 5858969 bytes
  moov: s=     44032 (0x0000ac00), o=   5859017 (0x005966c9)
      mvhd: s=       108 (0x0000006c), o=   5859025 (0x005966d1)
        version: 0
        flags: 0x000000
        creation_time: 1904-01-01T00:00:00Z (0 sec since 1904-01-01)
        modification_time: 1904-01-01T00:00:00Z (0 sec since 1904-01-01)
        timescale: 1000
        duration: 83292 (83.292000 sec)
        preferred_rate: 1.000000
        preferred_volume: 1.000000
        reserved: (size 10)  00 00 00 00 00 00 00 00 00 00  |..........|
        matrix:
          1.000000 0.000000 0.000000
          0.000000 1.000000 0.000000
          0.000000 0.000000 1.000000
        preview_time: 0
        preview_duration: 0 (0.000000 sec)
        poster_time: 0
        selection_time: 0
        selection_duration: 0 (0.000000 sec)
        current_time: 0
        next_track_id: 3
      trak: s=     17539 (0x00004483), o=   5859133 (0x0059673d)
          tkhd: s=        92 (0x0000005c), o=   5859141 (0x00596745)
            version: 0
            flags: 0x000003
            creation_time: 1904-01-01T00:00:00Z (0 sec since 1904-01-01)
            modification_time: 1904-01-01T00:00:00Z (0 sec since 1904-01-01)
            track_id: 1
            reserved: 0x00000000
            duration: 83292 (83.292000 sec)
            reserved: (size 8)  00 00 00 00 00 00 00 00  |........|
            layer: 0
            alternate_group: 0
            volume: 0.000000
            reserved: 0x0000
            matrix:
              1.000000 0.000000 0.000000
              0.000000 1.000000 0.000000
              0.000000 0.000000 1.000000
            track_width: 800.000000
            track_height: 576.000000
          edts: s=        36 (0x00000024), o=   5859233 (0x005967a1)
              elst: s=        28 (0x0000001c), o=   5859241 (0x005967a9)
                version: 0
                flags: 0x000000
                edit_list_table (         1):
                       i    duration       time          rate
                    0000       83292          0      1.000000
          mdia: s=     17403 (0x000043fb), o=   5859269 (0x005967c5)
              mdhd: s=        32 (0x00000020), o=   5859277 (0x005967cd)
                version: 0
                flags: 0x000000
                creation_time: 1904-01-01T00:00:00Z (0 sec since 1904-01-01)
                modification_time: 1904-01-01T00:00:00Z (0 sec since 1904-01-01)
                timescale: 24000
                duration: 1998997 (83.291542 sec)
                language: 0x55c4 (und)
                quality: 0
              hdlr: s=        45 (0x0000002d), o=   5859309 (0x005967ed)
                version: 0
                flags: 0x000000
                component_type: .... (00 00 00 00)
                component_sub_type: vide
                component_manufacturer: 0
                component_flags: 0x00000000
                component_flags_mask: 0x00000000
                component_name: 'VideoHandler' + 0x00
              minf: s=     17318 (0x000043a6), o=   5859354 (0x0059681a)
                  vmhd: s=        20 (0x00000014), o=   5859362 (0x00596822)
                    version: 0
                    flags: 0x000001 (no lean ahead)
                    graphics_mode: 00
                    opcolor: RGB(0x0000,0x0000,0x0000)
                  dinf: s=        36 (0x00000024), o=   5859382 (0x00596836)
                      dref: s=        28 (0x0000001c), o=   5859390 (0x0059683e)
                        version: 0
                        flags: 0x000000
                        entries (         1):
                          url : s=        12 (0x0000000c), o=   5859406 (0x0059684e)
                            version: 0
                            flags: 0x000001 (self reference)
                            data: (0 bytes) url:
                  stbl: s=     17254 (0x00004366), o=   5859418 (0x0059685a)
                      stsd: s=       126 (0x0000007e), o=   5859426 (0x00596862)
                        version: 0
                        flags: 0x000000
                        sample_descriptions (0x00000001):
                          size: 0000006e
                          data_format: avc1 (61 76 63 31)
                          reserved: (size 6)  00 00 00 00 00 00  |......|
                          data_ref_index: 0x0001
                          version: 0
                          revision: 0x0000
                          vendor: .... (00 00 00 00)
                          temporal_quality: 0x00000000
                          spatial_quality: 0x00000000
                          width: 800
                          height: 576
                          horizontal_resolution: 72.000000
                          vertical_resolution: 72.000000
                          data_size: 0
                          frame_count: 1
                          compressor_name: '' + 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
                          depth: 24
                          color_table_id: 0xffff
                          avcC: s=         8 (0x00000008), o=   5859528 (0x005968c8)
  Exception: num_read <= CURRENT_ATOM.rem_size failed at line 177
  
  ```
  
  **Tags:** ffmpeg, mp4, libav
  
  > **Comments:**
  > **username_1**: What does movdump show as different between the files, especially on mvhd timescale and stsd?  
  > **username_0**: Thank you @username_1 for pointing me to that tool. I didn't see an output for mvhd and stsd, but that might be to my poor understanding of proper terminology. I'll add the relevant output in the question above.  
  > **username_1**: movdump turns out to be a generic name. I meant the one here: https://github.com/bbc/qtff-parameter-editor  
  > **username_0**: Thanks @username_1, that looks better now. I replaced the output in the post. It might also be a hint, that the movdump stops with an exception.  
  > **username_1**: Your video stream config is corrupt: `avcC: s=         8 (0x00000008)`, this indicates that no extradata was found by the muxer for the video stream.  
  > **username_1**: You should set global header before opening encoders.  
  > **username_0**: That is strange, I verified by setting a breakpoint, that AVFMT_GLOBALHEADER is set in `formatContext->oformat->flags` and I copy the flag into the streams using `context->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;` - also the docs of AVCodecContext state, that extradata is filled by `libavcodec` and in AVFormatContext I don't see extradata.  
  > **username_1**: You do it after `int ret = avcodec_open2 (context, encoder, NULL);`. Do it before and copy parameters from context after opening.  
  > **username_0**: Thanks, I edited the post above: I could verify, that `AVFMT_GLOBALHEADER` is automatically set after calling `avformat_alloc_output_context2()` guessing the format from the mp4 filename. I moved copying the flag to the streams to before calling `avcodec_open2 (context, encoder, &options);` according to your suggestion, but it didn't change the output, neither of movdump nor does it play, unfortunately.  
  
  ---
  
  ## 0 answers
  
  