w3c / media-source

Media Source Extensions
https://w3c.github.io/media-source/
Other
267 stars 57 forks source link

Capturing MediaStream from HTMLMediaElement where src is set to MediaSource crashes tab #207

Closed guest271314 closed 6 years ago

guest271314 commented 6 years ago

Attempting to capture MediaStream from HTMLMediaElement where src is set to MediaSource consistently crashes tab at Chromium 64, see https://github.com/w3c/web-platform-tests/issues/9947

<!DOCTYPE html>
<html>
<head>
  <title>Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource</title>
</head>
<body>
  <script>
    class MediaFragmentRecorder {
      constructor({
        urls = [], video = document.createElement("video"), width = 320, height = 280
      } = {}) {
        if (urls.length === 0) {
          throw new TypeError("no urls passed to MediaFragmentRecorder");
        }
        return (async() => {
          video.height = height;
          video.width = width;
          video.autoplay = true;
          video.preload = "auto";
          const chunks = [];
          let duration = 0;
          let media = await Promise.all(
            urls.map(async({
              from, to, src
            }, index) => {
              const url = new URL(src);
              // get media fragment hash from `src`
              if (url.hash.length) {
                [from, to] = url.hash.match(/\d+/g);
              }
              return {
                blob: await fetch(src).then(response => response.blob()),
                from,
                to
              }
            }));         
          // using `Promise.all()` here apparently is not the same
          // as recording the media in sequence as the next video
          // is not played when a buffer is added to `MediaSource`
          for (let {
              from, to, blob
            }
            of media) {
            await new Promise(async(resolve) => {
              let recorder;
              const blobURL = URL.createObjectURL(blob);
              video.addEventListener("playing", e => {
                const stream = video.captureStream();
                recorder = new MediaRecorder(stream, {
                  mimeType: "video/webm"
                });
                recorder.start();
                recorder.addEventListener("stop", e => {
                  resolve();
                  console.log(e);
                }, {
                  once: true
                });
                recorder.addEventListener("dataavailable", async(e) => {
                  console.log(e);
                  chunks.push(await new Response(e.data).arrayBuffer());
                  URL.revokeObjectURL(blobURL);
                });
                video.addEventListener("pause", e => {
                  if (recorder.state === "recording") {
                    recorder.stop();
                  } else {
                    recorder.requestData();
                  }
                  duration += video.currentTime - from;
                }, {
                  once: true
                });

              }, {
                once: true
              });
              video.src = `${blobURL}#t=${from},${to}`;
            })
          };
          // using same `<video>` element at `.then()` does not
          // return expected result as to `autoplay`
          video.src = "";
          return {
            chunks, duration, width, height
          }
        })()
      }
    }
    let urls = [{
      src: "https://upload.wikimedia.org/wikipedia/commons/a/a4/Xacti-AC8EX-Sample_video-001.ogv",
      from: 0,
      to: 4
    }, {
      src: "https://mirrors.creativecommons.org/movingimages/webm/ScienceCommonsJesseDylan_240p.webm#t=10,20"
    }, {
      from: 55,
      to: 60,
      src: "https://nickdesaulniers.github.io/netfix/demo/frag_bunny.mp4"
    }, {
      from: 0,
      to: 5,
      src: "https://raw.githubusercontent.com/w3c/web-platform-tests/master/media-source/mp4/test.mp4"
    }, {
      from: 0,
      to: 5,
      src: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4"
    }, {
      from: 0,
      to: 5,
      src: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerJoyrides.mp4"
    }, {
      src: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerMeltdowns.mp4#t=0,6"
    }];

    new MediaFragmentRecorder({
        urls
      })
      .then(({
        chunks, duration, width, height
      }) => {
        let recorder, mediaStream;
        console.log(chunks, duration);
        const video = document.createElement("video");
        document.body.appendChild(video);
        video.controls = true;
        video.preload = "auto";
        video.autoplay = true;
        video.width = width;
        video.height = height;
        const mediaSource = new MediaSource();
        const mimeCodec = "video/webm;codecs=vp8,opus";
        const sourceOpen = e => {
          console.log(e);
          const sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
          sourceBuffer.mode = "sequence";
          sourceBuffer.addEventListener("updateend", e => {
            console.log(e);
          });
          sourceBuffer.appendBuffer(chunks.shift());
        }
        const handleWaiting = e => {
          console.log(e);
          if (chunks.length) {
            mediaSource.sourceBuffers[0].appendBuffer(chunks.shift())
          } else {
            console.log(e);
            video.autoplay = false;
            video.removeEventListener("waiting", handleWaiting);
            // https://bugs.chromium.org/p/chromium/issues/detail?id=642012
            // `seeked` is not dispatched here
            /*
            video.addEventListener("seeked", e => {
                video.currentTime = 0;
                console.info(e, video.duration);
            }, {once:true});
            video.currentTime = 1e5;
            */
            // we do not get this far before tab crashes
            recorder.stop();
          }
        }
        mediaSource.sourceBuffers.addEventListener("addsourcebuffer", e => {
          console.log(e)
        });
        video.addEventListener("canplay", e => {
          console.log(e, duration, video.buffered.end(0), video.duration, mediaSource.duration);
        });
        video.addEventListener("playing", e => {
          // consistently crashes tab at Chromium 64       
          mediaStream = video.captureStream();
          recorder = new MediaRecorder(mediaStream, {mimeType:"video/webm"});
          recorder.addEventListener("dataavailable", e => {
            console.log(e);
          });
          recorder.start();         
          console.log(e, duration, video.buffered.end(0), video.duration, mediaSource.duration);
        }, {
          once: true
        });
        video.addEventListener("waiting", handleWaiting);
        video.addEventListener("pause", e => console.log(e));
        mediaSource.addEventListener("sourceopen", sourceOpen);
        video.src = URL.createObjectURL(mediaSource);
      })
  </script>
</body>
</html>
wolenetz commented 6 years ago

This would best be reported as a bug in Chromium (crbug.com). Regardless, I'll take a look soon.

guest271314 commented 6 years ago

https://bugs.chromium.org/p/chromium/issues/detail?id=820489

FWIW media-internals.txt

[
  {
    "properties": {
      "render_id": 6,
      "player_id": 0,
      "origin_url": "https://run.plnkr.co/",
      "frame_url": "https://run.plnkr.co/1cLJbQ96jyx49nuU/",
      "frame_title": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource",
      "url": "blob:https://run.plnkr.co/9ec5c054-0824-4816-aa21-2d5ca54c888b#t=0,4",
      "total_bytes": 4704555,
      "streaming": false,
      "single_origin": true,
      "passed_cors_access_check": false,
      "range_header_supported": true,
      "pipeline_state": "kStopped",
      "info": "Effective playback rate changed from 0 to 1",
      "audio_channels_count": 2,
      "audio_codec_name": "vorbis",
      "audio_sample_format": "Float 32-bit planar",
      "audio_samples_per_second": 48000,
      "bitrate": 7587991,
      "found_audio_stream": true,
      "found_video_stream": true,
      "height": 576,
      "max_duration": 4.96,
      "start_time": -0.002667,
      "time_base": "1/25",
      "video_codec_name": "theora",
      "video_format": "PIXEL_FORMAT_YV12",
      "video_is_encrypted": false,
      "width": 768,
      "audio_dds": false,
      "audio_decoder": "FFmpegAudioDecoder",
      "video_dds": false,
      "video_decoder": "FFmpegVideoDecoder",
      "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "audio_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "event": "WEBMEDIAPLAYER_DESTROYED",
      "duration": 4.96,
      "debug": "FFmpegDemuxer: av_read_frame(): End of file"
    },
    "events": [
      {
        "time": 0,
        "key": "origin_url",
        "value": "https://run.plnkr.co/"
      },
      {
        "time": 0.019000008702278137,
        "key": "frame_url",
        "value": "https://run.plnkr.co/1cLJbQ96jyx49nuU/"
      },
      {
        "time": 0.025000005960464478,
        "key": "frame_title",
        "value": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource"
      },
      {
        "time": 0.2840000092983246,
        "key": "url",
        "value": "blob:https://run.plnkr.co/9ec5c054-0824-4816-aa21-2d5ca54c888b#t=0,4"
      },
      {
        "time": 4.935000002384186,
        "key": "total_bytes",
        "value": 4704555
      },
      {
        "time": 4.950000002980232,
        "key": "streaming",
        "value": false
      },
      {
        "time": 4.961000010371208,
        "key": "single_origin",
        "value": true
      },
      {
        "time": 4.961999997496605,
        "key": "passed_cors_access_check",
        "value": false
      },
      {
        "time": 4.964000001549721,
        "key": "range_header_supported",
        "value": true
      },
      {
        "time": 14.231000006198883,
        "key": "pipeline_state",
        "value": "kStarting"
      },
      {
        "time": 36.91099999845028,
        "key": "info",
        "value": "FFmpegDemuxer: created video stream, config codec: theora format: 2 profile: theora coded size: [720,576] visible rect: [0,0,720,576] natural size: [768,576] has extra data? true encrypted? false rotation: 0°"
      },
      {
        "time": 37.04500000178814,
        "key": "info",
        "value": "FFmpegDemuxer: created audio stream, config codec: vorbis bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 48000 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 37.18400000035763,
        "key": "audio_channels_count",
        "value": 2
      },
      {
        "time": 37.18400000035763,
        "key": "audio_codec_name",
        "value": "vorbis"
      },
      {
        "time": 37.18400000035763,
        "key": "audio_sample_format",
        "value": "Float 32-bit planar"
      },
      {
        "time": 37.18400000035763,
        "key": "audio_samples_per_second",
        "value": 48000
      },
      {
        "time": 37.18400000035763,
        "key": "bitrate",
        "value": 7587991
      },
      {
        "time": 37.18400000035763,
        "key": "found_audio_stream",
        "value": true
      },
      {
        "time": 37.18400000035763,
        "key": "found_video_stream",
        "value": true
      },
      {
        "time": 37.18400000035763,
        "key": "height",
        "value": 576
      },
      {
        "time": 37.18400000035763,
        "key": "max_duration",
        "value": 4.96
      },
      {
        "time": 37.18400000035763,
        "key": "start_time",
        "value": -0.002667
      },
      {
        "time": 37.18400000035763,
        "key": "time_base",
        "value": "1/25"
      },
      {
        "time": 37.18400000035763,
        "key": "video_codec_name",
        "value": "theora"
      },
      {
        "time": 37.18400000035763,
        "key": "video_format",
        "value": "PIXEL_FORMAT_YV12"
      },
      {
        "time": 37.18400000035763,
        "key": "video_is_encrypted",
        "value": false
      },
      {
        "time": 37.18400000035763,
        "key": "width",
        "value": 720
      },
      {
        "time": 39.50500001013279,
        "key": "audio_dds",
        "value": false
      },
      {
        "time": 39.511000007390976,
        "key": "audio_decoder",
        "value": "FFmpegAudioDecoder"
      },
      {
        "time": 39.53500001132488,
        "key": "info",
        "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: vorbis bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 48000 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 45.85999999940395,
        "key": "video_dds",
        "value": false
      },
      {
        "time": 45.89699999988079,
        "key": "video_decoder",
        "value": "FFmpegVideoDecoder"
      },
      {
        "time": 45.927000001072884,
        "key": "info",
        "value": "Selected FFmpegVideoDecoder for video decoding, config: codec: theora format: 2 profile: theora coded size: [720,576] visible rect: [0,0,720,576] natural size: [768,576] has extra data? true encrypted? false rotation: 0°"
      },
      {
        "time": 46.038000002503395,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 70.1410000026226,
        "key": "height",
        "value": 576
      },
      {
        "time": 70.1410000026226,
        "key": "width",
        "value": 768
      },
      {
        "time": 89.97800000011921,
        "key": "video_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 104.375,
        "key": "audio_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 104.53100000321865,
        "key": "pipeline_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 104.8369999974966,
        "key": "info",
        "value": "Effective playback rate changed from 0 to 1"
      },
      {
        "time": 104.90399999916553,
        "key": "event",
        "value": "PLAY"
      },
      {
        "time": 37.16000001132488,
        "key": "duration",
        "value": 4.96
      },
      {
        "time": 2779.3760000020266,
        "key": "debug",
        "value": "FFmpegDemuxer: av_read_frame(): End of file"
      },
      {
        "time": 4362.2900000065565,
        "key": "event",
        "value": "PAUSE"
      },
      {
        "time": 4385.8180000036955,
        "key": "pipeline_state",
        "value": "kStopping"
      },
      {
        "time": 4387.030000001192,
        "key": "pipeline_state",
        "value": "kStopped"
      },
      {
        "time": 4392.601999998093,
        "key": "event",
        "value": "WEBMEDIAPLAYER_DESTROYED"
      }
    ]
  },
  {
    "properties": {
      "render_id": 6,
      "player_id": 1,
      "origin_url": "https://run.plnkr.co/",
      "frame_url": "https://run.plnkr.co/1cLJbQ96jyx49nuU/",
      "frame_title": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource",
      "url": "blob:https://run.plnkr.co/36fdce7c-a561-49e5-9128-bf5e71e89ce5#t=10,20",
      "total_bytes": 4260031,
      "streaming": false,
      "single_origin": true,
      "passed_cors_access_check": false,
      "range_header_supported": true,
      "pipeline_state": "kStopped",
      "info": "Effective playback rate changed from 0 to 1",
      "audio_channels_count": 2,
      "audio_codec_name": "vorbis",
      "audio_sample_format": "Float 32-bit planar",
      "audio_samples_per_second": 48000,
      "bitrate": 285103,
      "found_audio_stream": true,
      "found_video_stream": true,
      "height": 240,
      "max_duration": 119.536208,
      "start_time": 0,
      "time_base": "1/1000",
      "video_codec_name": "vp8",
      "video_format": "PIXEL_FORMAT_YV12",
      "video_is_encrypted": false,
      "width": 480,
      "audio_dds": false,
      "audio_decoder": "FFmpegAudioDecoder",
      "video_dds": false,
      "video_decoder": "FFmpegVideoDecoder",
      "seek_target": 10,
      "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "audio_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "event": "WEBMEDIAPLAYER_DESTROYED",
      "duration": 119.536208
    },
    "events": [
      {
        "time": 0,
        "key": "origin_url",
        "value": "https://run.plnkr.co/"
      },
      {
        "time": 0.013999998569488525,
        "key": "frame_url",
        "value": "https://run.plnkr.co/1cLJbQ96jyx49nuU/"
      },
      {
        "time": 0.01799999177455902,
        "key": "frame_title",
        "value": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource"
      },
      {
        "time": 0.12199999392032623,
        "key": "url",
        "value": "blob:https://run.plnkr.co/36fdce7c-a561-49e5-9128-bf5e71e89ce5#t=10,20"
      },
      {
        "time": 3.9759999960660934,
        "key": "total_bytes",
        "value": 4260031
      },
      {
        "time": 3.989999994635582,
        "key": "streaming",
        "value": false
      },
      {
        "time": 4.001000002026558,
        "key": "single_origin",
        "value": true
      },
      {
        "time": 4.001999989151955,
        "key": "passed_cors_access_check",
        "value": false
      },
      {
        "time": 4.002999991178513,
        "key": "range_header_supported",
        "value": true
      },
      {
        "time": 5.207999989390373,
        "key": "pipeline_state",
        "value": "kStarting"
      },
      {
        "time": 19.435999989509583,
        "key": "info",
        "value": "FFmpegDemuxer: created video stream, config codec: vp8 format: 2 profile: vp8 coded size: [480,240] visible rect: [0,0,480,240] natural size: [480,240] has extra data? false encrypted? false rotation: 0°"
      },
      {
        "time": 19.52199999988079,
        "key": "info",
        "value": "FFmpegDemuxer: created audio stream, config codec: vorbis bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 48000 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 19.54899999499321,
        "key": "audio_channels_count",
        "value": 2
      },
      {
        "time": 19.54899999499321,
        "key": "audio_codec_name",
        "value": "vorbis"
      },
      {
        "time": 19.54899999499321,
        "key": "audio_sample_format",
        "value": "Float 32-bit planar"
      },
      {
        "time": 19.54899999499321,
        "key": "audio_samples_per_second",
        "value": 48000
      },
      {
        "time": 19.54899999499321,
        "key": "bitrate",
        "value": 285103
      },
      {
        "time": 19.54899999499321,
        "key": "found_audio_stream",
        "value": true
      },
      {
        "time": 19.54899999499321,
        "key": "found_video_stream",
        "value": true
      },
      {
        "time": 19.54899999499321,
        "key": "height",
        "value": 240
      },
      {
        "time": 19.54899999499321,
        "key": "max_duration",
        "value": 119.536208
      },
      {
        "time": 19.54899999499321,
        "key": "start_time",
        "value": 0
      },
      {
        "time": 19.54899999499321,
        "key": "time_base",
        "value": "1/1000"
      },
      {
        "time": 19.54899999499321,
        "key": "video_codec_name",
        "value": "vp8"
      },
      {
        "time": 19.54899999499321,
        "key": "video_format",
        "value": "PIXEL_FORMAT_YV12"
      },
      {
        "time": 19.54899999499321,
        "key": "video_is_encrypted",
        "value": false
      },
      {
        "time": 19.54899999499321,
        "key": "width",
        "value": 480
      },
      {
        "time": 21.28999999165535,
        "key": "audio_dds",
        "value": false
      },
      {
        "time": 21.296999990940094,
        "key": "audio_decoder",
        "value": "FFmpegAudioDecoder"
      },
      {
        "time": 21.319999992847443,
        "key": "info",
        "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: vorbis bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 48000 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 21.486999988555908,
        "key": "video_dds",
        "value": false
      },
      {
        "time": 21.667999997735023,
        "key": "video_decoder",
        "value": "FFmpegVideoDecoder"
      },
      {
        "time": 21.685999989509583,
        "key": "info",
        "value": "Selected FFmpegVideoDecoder for video decoding, config: codec: vp8 format: 2 profile: vp8 coded size: [480,240] visible rect: [0,0,480,240] natural size: [480,240] has extra data? false encrypted? false rotation: 0°"
      },
      {
        "time": 21.723999992012978,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 29.172999992966652,
        "key": "seek_target",
        "value": 10
      },
      {
        "time": 30.746999993920326,
        "key": "height",
        "value": 240
      },
      {
        "time": 30.746999993920326,
        "key": "width",
        "value": 480
      },
      {
        "time": 30.98600000143051,
        "key": "pipeline_state",
        "value": "kSeeking"
      },
      {
        "time": 36.677000001072884,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 88.9219999909401,
        "key": "video_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 90.34099999070168,
        "key": "audio_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 91.21099999547005,
        "key": "pipeline_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 91.34999999403954,
        "key": "info",
        "value": "Effective playback rate changed from 0 to 1"
      },
      {
        "time": 91.53599999845028,
        "key": "event",
        "value": "PLAY"
      },
      {
        "time": 19.53999999165535,
        "key": "duration",
        "value": 119.536208
      },
      {
        "time": 10342.226999998093,
        "key": "event",
        "value": "PAUSE"
      },
      {
        "time": 10356.66099999845,
        "key": "pipeline_state",
        "value": "kStopping"
      },
      {
        "time": 10357.189999997616,
        "key": "pipeline_state",
        "value": "kStopped"
      },
      {
        "time": 10357.491999998689,
        "key": "event",
        "value": "WEBMEDIAPLAYER_DESTROYED"
      }
    ]
  },
  {
    "properties": {
      "render_id": 6,
      "player_id": 2,
      "origin_url": "https://run.plnkr.co/",
      "frame_url": "https://run.plnkr.co/1cLJbQ96jyx49nuU/",
      "frame_title": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource",
      "url": "blob:https://run.plnkr.co/0bd71124-1cdc-4faf-9ab3-ace97cfaccdf#t=55,60",
      "total_bytes": 5524488,
      "streaming": false,
      "single_origin": true,
      "passed_cors_access_check": false,
      "range_header_supported": true,
      "pipeline_state": "kStopped",
      "info": "Effective playback rate changed from 0 to 1",
      "audio_channels_count": 2,
      "audio_codec_name": "aac",
      "audio_sample_format": "Float 32-bit planar",
      "audio_samples_per_second": 22050,
      "bitrate": 734320,
      "found_audio_stream": true,
      "found_video_stream": true,
      "height": 360,
      "max_duration": 60.186122,
      "start_time": 0,
      "time_base": "1/600",
      "video_codec_name": "h264",
      "video_format": "PIXEL_FORMAT_YV12",
      "video_is_encrypted": false,
      "width": 640,
      "seek_target": 55,
      "audio_dds": false,
      "audio_decoder": "FFmpegAudioDecoder",
      "video_dds": false,
      "video_decoder": "FFmpegVideoDecoder",
      "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "audio_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "event": "WEBMEDIAPLAYER_DESTROYED",
      "duration": 60.186122,
      "debug": "FFmpegDemuxer: av_read_frame(): End of file"
    },
    "events": [
      {
        "time": 0,
        "key": "origin_url",
        "value": "https://run.plnkr.co/"
      },
      {
        "time": 0.01199999451637268,
        "key": "frame_url",
        "value": "https://run.plnkr.co/1cLJbQ96jyx49nuU/"
      },
      {
        "time": 0.015000000596046448,
        "key": "frame_title",
        "value": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource"
      },
      {
        "time": 0.08400000631809235,
        "key": "url",
        "value": "blob:https://run.plnkr.co/0bd71124-1cdc-4faf-9ab3-ace97cfaccdf#t=55,60"
      },
      {
        "time": 22.27699999511242,
        "key": "total_bytes",
        "value": 5524488
      },
      {
        "time": 22.291999995708466,
        "key": "streaming",
        "value": false
      },
      {
        "time": 22.304000005126,
        "key": "single_origin",
        "value": true
      },
      {
        "time": 22.305000007152557,
        "key": "passed_cors_access_check",
        "value": false
      },
      {
        "time": 22.305999994277954,
        "key": "range_header_supported",
        "value": true
      },
      {
        "time": 24.72699999809265,
        "key": "pipeline_state",
        "value": "kStarting"
      },
      {
        "time": 113.03900000452995,
        "key": "info",
        "value": "FFmpegDemuxer: created audio stream, config codec: aac bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 22050 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 113.10300000011921,
        "key": "info",
        "value": "FFmpegDemuxer: created video stream, config codec: h264 format: 2 profile: h264 baseline coded size: [640,360] visible rect: [0,0,640,360] natural size: [640,360] has extra data? true encrypted? false rotation: 0°"
      },
      {
        "time": 113.1630000025034,
        "key": "audio_channels_count",
        "value": 2
      },
      {
        "time": 113.1630000025034,
        "key": "audio_codec_name",
        "value": "aac"
      },
      {
        "time": 113.1630000025034,
        "key": "audio_sample_format",
        "value": "Float 32-bit planar"
      },
      {
        "time": 113.1630000025034,
        "key": "audio_samples_per_second",
        "value": 22050
      },
      {
        "time": 113.1630000025034,
        "key": "bitrate",
        "value": 734320
      },
      {
        "time": 113.1630000025034,
        "key": "found_audio_stream",
        "value": true
      },
      {
        "time": 113.1630000025034,
        "key": "found_video_stream",
        "value": true
      },
      {
        "time": 113.1630000025034,
        "key": "height",
        "value": 360
      },
      {
        "time": 113.1630000025034,
        "key": "max_duration",
        "value": 60.186122
      },
      {
        "time": 113.1630000025034,
        "key": "start_time",
        "value": 0
      },
      {
        "time": 113.1630000025034,
        "key": "time_base",
        "value": "1/600"
      },
      {
        "time": 113.1630000025034,
        "key": "video_codec_name",
        "value": "h264"
      },
      {
        "time": 113.1630000025034,
        "key": "video_format",
        "value": "PIXEL_FORMAT_YV12"
      },
      {
        "time": 113.1630000025034,
        "key": "video_is_encrypted",
        "value": false
      },
      {
        "time": 113.1630000025034,
        "key": "width",
        "value": 640
      },
      {
        "time": 113.38500000536442,
        "key": "seek_target",
        "value": 55
      },
      {
        "time": 115.29899999499321,
        "key": "audio_dds",
        "value": false
      },
      {
        "time": 115.30900000035763,
        "key": "audio_decoder",
        "value": "FFmpegAudioDecoder"
      },
      {
        "time": 115.3369999974966,
        "key": "info",
        "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: aac bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 22050 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 115.81900000572205,
        "key": "video_dds",
        "value": false
      },
      {
        "time": 115.82400000095367,
        "key": "video_decoder",
        "value": "FFmpegVideoDecoder"
      },
      {
        "time": 115.84600000083447,
        "key": "info",
        "value": "Selected FFmpegVideoDecoder for video decoding, config: codec: h264 format: 2 profile: h264 baseline coded size: [640,360] visible rect: [0,0,640,360] natural size: [640,360] has extra data? true encrypted? false rotation: 0°"
      },
      {
        "time": 115.88799999654293,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 124.12600000202656,
        "key": "pipeline_state",
        "value": "kSeeking"
      },
      {
        "time": 128.67000000178814,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 193.26100000739098,
        "key": "height",
        "value": 360
      },
      {
        "time": 193.26100000739098,
        "key": "width",
        "value": 640
      },
      {
        "time": 196.21400000154972,
        "key": "video_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 199.25,
        "key": "audio_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 199.3100000023842,
        "key": "pipeline_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 199.41899999976158,
        "key": "info",
        "value": "Effective playback rate changed from 0 to 1"
      },
      {
        "time": 199.49899999797344,
        "key": "event",
        "value": "PLAY"
      },
      {
        "time": 113.15399999916553,
        "key": "duration",
        "value": 60.186122
      },
      {
        "time": 2974.6870000064373,
        "key": "debug",
        "value": "FFmpegDemuxer: av_read_frame(): End of file"
      },
      {
        "time": 5450.701000005007,
        "key": "event",
        "value": "PAUSE"
      },
      {
        "time": 5465.895999997854,
        "key": "pipeline_state",
        "value": "kStopping"
      },
      {
        "time": 5466.41400000453,
        "key": "pipeline_state",
        "value": "kStopped"
      },
      {
        "time": 5466.474000006914,
        "key": "event",
        "value": "WEBMEDIAPLAYER_DESTROYED"
      }
    ]
  },
  {
    "properties": {
      "render_id": 6,
      "player_id": 3,
      "origin_url": "https://run.plnkr.co/",
      "frame_url": "https://run.plnkr.co/1cLJbQ96jyx49nuU/",
      "frame_title": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource",
      "url": "blob:https://run.plnkr.co/f5b9273e-e278-4efc-8180-afdf83151e00#t=0,5",
      "total_bytes": 187227,
      "streaming": false,
      "single_origin": true,
      "passed_cors_access_check": false,
      "range_header_supported": true,
      "pipeline_state": "kStopped",
      "info": "Effective playback rate changed from 0 to 1",
      "audio_channels_count": 2,
      "audio_codec_name": "aac",
      "audio_sample_format": "Float 32-bit planar",
      "audio_samples_per_second": 22050,
      "bitrate": 227055,
      "found_audio_stream": true,
      "found_video_stream": true,
      "height": 300,
      "max_duration": 6.5967,
      "start_time": 0,
      "time_base": "1/90000",
      "video_codec_name": "h264",
      "video_format": "PIXEL_FORMAT_YV12",
      "video_is_encrypted": false,
      "width": 400,
      "audio_dds": false,
      "audio_decoder": "FFmpegAudioDecoder",
      "video_dds": false,
      "video_decoder": "FFmpegVideoDecoder",
      "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "audio_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "event": "WEBMEDIAPLAYER_DESTROYED",
      "duration": 6.5967,
      "debug": "FFmpegDemuxer: av_read_frame(): End of file"
    },
    "events": [
      {
        "time": 0,
        "key": "origin_url",
        "value": "https://run.plnkr.co/"
      },
      {
        "time": 0.010999992489814758,
        "key": "frame_url",
        "value": "https://run.plnkr.co/1cLJbQ96jyx49nuU/"
      },
      {
        "time": 0.015000000596046448,
        "key": "frame_title",
        "value": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource"
      },
      {
        "time": 0.80799999833107,
        "key": "url",
        "value": "blob:https://run.plnkr.co/f5b9273e-e278-4efc-8180-afdf83151e00#t=0,5"
      },
      {
        "time": 6.262999996542931,
        "key": "total_bytes",
        "value": 187227
      },
      {
        "time": 6.277999997138977,
        "key": "streaming",
        "value": false
      },
      {
        "time": 6.289000004529953,
        "key": "single_origin",
        "value": true
      },
      {
        "time": 6.28999999165535,
        "key": "passed_cors_access_check",
        "value": false
      },
      {
        "time": 6.290999993681908,
        "key": "range_header_supported",
        "value": true
      },
      {
        "time": 7.203999996185303,
        "key": "pipeline_state",
        "value": "kStarting"
      },
      {
        "time": 34.15999999642372,
        "key": "info",
        "value": "FFmpegDemuxer: created video stream, config codec: h264 format: 2 profile: h264 main coded size: [400,300] visible rect: [0,0,400,300] natural size: [400,300] has extra data? true encrypted? false rotation: 0°"
      },
      {
        "time": 34.22800000011921,
        "key": "info",
        "value": "FFmpegDemuxer: created audio stream, config codec: aac bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 22050 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 34.252000004053116,
        "key": "audio_channels_count",
        "value": 2
      },
      {
        "time": 34.252000004053116,
        "key": "audio_codec_name",
        "value": "aac"
      },
      {
        "time": 34.252000004053116,
        "key": "audio_sample_format",
        "value": "Float 32-bit planar"
      },
      {
        "time": 34.252000004053116,
        "key": "audio_samples_per_second",
        "value": 22050
      },
      {
        "time": 34.252000004053116,
        "key": "bitrate",
        "value": 227055
      },
      {
        "time": 34.252000004053116,
        "key": "found_audio_stream",
        "value": true
      },
      {
        "time": 34.252000004053116,
        "key": "found_video_stream",
        "value": true
      },
      {
        "time": 34.252000004053116,
        "key": "height",
        "value": 300
      },
      {
        "time": 34.252000004053116,
        "key": "max_duration",
        "value": 6.5967
      },
      {
        "time": 34.252000004053116,
        "key": "start_time",
        "value": 0
      },
      {
        "time": 34.252000004053116,
        "key": "time_base",
        "value": "1/90000"
      },
      {
        "time": 34.252000004053116,
        "key": "video_codec_name",
        "value": "h264"
      },
      {
        "time": 34.252000004053116,
        "key": "video_format",
        "value": "PIXEL_FORMAT_YV12"
      },
      {
        "time": 34.252000004053116,
        "key": "video_is_encrypted",
        "value": false
      },
      {
        "time": 34.252000004053116,
        "key": "width",
        "value": 400
      },
      {
        "time": 35.79500000178814,
        "key": "audio_dds",
        "value": false
      },
      {
        "time": 35.802000001072884,
        "key": "audio_decoder",
        "value": "FFmpegAudioDecoder"
      },
      {
        "time": 35.82500000298023,
        "key": "info",
        "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: aac bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 22050 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 36.0789999961853,
        "key": "video_dds",
        "value": false
      },
      {
        "time": 36.10699999332428,
        "key": "video_decoder",
        "value": "FFmpegVideoDecoder"
      },
      {
        "time": 36.12399999797344,
        "key": "info",
        "value": "Selected FFmpegVideoDecoder for video decoding, config: codec: h264 format: 2 profile: h264 main coded size: [400,300] visible rect: [0,0,400,300] natural size: [400,300] has extra data? true encrypted? false rotation: 0°"
      },
      {
        "time": 36.163000002503395,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 47.19699999690056,
        "key": "height",
        "value": 300
      },
      {
        "time": 47.19699999690056,
        "key": "width",
        "value": 400
      },
      {
        "time": 51.689999997615814,
        "key": "video_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 52.965999990701675,
        "key": "audio_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 56.631999999284744,
        "key": "pipeline_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 56.73299999535084,
        "key": "info",
        "value": "Effective playback rate changed from 0 to 1"
      },
      {
        "time": 57.69499999284744,
        "key": "event",
        "value": "PLAY"
      },
      {
        "time": 34.24099999666214,
        "key": "duration",
        "value": 6.5967
      },
      {
        "time": 4230.202999994159,
        "key": "debug",
        "value": "FFmpegDemuxer: av_read_frame(): End of file"
      },
      {
        "time": 5308.320999994874,
        "key": "event",
        "value": "PAUSE"
      },
      {
        "time": 5329.259999990463,
        "key": "pipeline_state",
        "value": "kStopping"
      },
      {
        "time": 5329.745999991894,
        "key": "pipeline_state",
        "value": "kStopped"
      },
      {
        "time": 5329.887999996543,
        "key": "event",
        "value": "WEBMEDIAPLAYER_DESTROYED"
      }
    ]
  },
  {
    "properties": {
      "render_id": 6,
      "player_id": 4,
      "origin_url": "https://run.plnkr.co/",
      "frame_url": "https://run.plnkr.co/1cLJbQ96jyx49nuU/",
      "frame_title": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource",
      "url": "blob:https://run.plnkr.co/fe4ceffa-437a-4a0f-93bf-d62a96399b09#t=0,5",
      "total_bytes": 2498125,
      "streaming": false,
      "single_origin": true,
      "passed_cors_access_check": false,
      "range_header_supported": true,
      "pipeline_state": "kStopped",
      "info": "Effective playback rate changed from 0 to 1",
      "audio_channels_count": 2,
      "audio_codec_name": "aac",
      "audio_sample_format": "Float 32-bit planar",
      "audio_samples_per_second": 44100,
      "bitrate": 1330411,
      "found_audio_stream": true,
      "found_video_stream": true,
      "height": 720,
      "max_duration": 15.023311,
      "start_time": 0,
      "time_base": "1/48000",
      "video_codec_name": "h264",
      "video_format": "PIXEL_FORMAT_YV12",
      "video_is_encrypted": false,
      "width": 1280,
      "audio_dds": false,
      "audio_decoder": "FFmpegAudioDecoder",
      "video_dds": false,
      "video_decoder": "FFmpegVideoDecoder",
      "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "audio_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "event": "WEBMEDIAPLAYER_DESTROYED",
      "duration": 15.023311
    },
    "events": [
      {
        "time": 0,
        "key": "origin_url",
        "value": "https://run.plnkr.co/"
      },
      {
        "time": 0.015000000596046448,
        "key": "frame_url",
        "value": "https://run.plnkr.co/1cLJbQ96jyx49nuU/"
      },
      {
        "time": 0.019999995827674866,
        "key": "frame_title",
        "value": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource"
      },
      {
        "time": 4.384999990463257,
        "key": "url",
        "value": "blob:https://run.plnkr.co/fe4ceffa-437a-4a0f-93bf-d62a96399b09#t=0,5"
      },
      {
        "time": 17.018999993801117,
        "key": "total_bytes",
        "value": 2498125
      },
      {
        "time": 19.373999997973442,
        "key": "streaming",
        "value": false
      },
      {
        "time": 19.390000000596046,
        "key": "single_origin",
        "value": true
      },
      {
        "time": 19.391000002622604,
        "key": "passed_cors_access_check",
        "value": false
      },
      {
        "time": 19.391999989748,
        "key": "range_header_supported",
        "value": true
      },
      {
        "time": 23.98199999332428,
        "key": "pipeline_state",
        "value": "kStarting"
      },
      {
        "time": 141.88599999248981,
        "key": "info",
        "value": "FFmpegDemuxer: created video stream, config codec: h264 format: 2 profile: h264 high coded size: [1280,720] visible rect: [0,0,1280,720] natural size: [1280,720] has extra data? true encrypted? false rotation: 0°"
      },
      {
        "time": 141.99599999189377,
        "key": "info",
        "value": "FFmpegDemuxer: created audio stream, config codec: aac bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 44100 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 142.02799999713898,
        "key": "audio_channels_count",
        "value": 2
      },
      {
        "time": 142.02799999713898,
        "key": "audio_codec_name",
        "value": "aac"
      },
      {
        "time": 142.02799999713898,
        "key": "audio_sample_format",
        "value": "Float 32-bit planar"
      },
      {
        "time": 142.02799999713898,
        "key": "audio_samples_per_second",
        "value": 44100
      },
      {
        "time": 142.02799999713898,
        "key": "bitrate",
        "value": 1330411
      },
      {
        "time": 142.02799999713898,
        "key": "found_audio_stream",
        "value": true
      },
      {
        "time": 142.02799999713898,
        "key": "found_video_stream",
        "value": true
      },
      {
        "time": 142.02799999713898,
        "key": "height",
        "value": 720
      },
      {
        "time": 142.02799999713898,
        "key": "max_duration",
        "value": 15.023311
      },
      {
        "time": 142.02799999713898,
        "key": "start_time",
        "value": 0
      },
      {
        "time": 142.02799999713898,
        "key": "time_base",
        "value": "1/48000"
      },
      {
        "time": 142.02799999713898,
        "key": "video_codec_name",
        "value": "h264"
      },
      {
        "time": 142.02799999713898,
        "key": "video_format",
        "value": "PIXEL_FORMAT_YV12"
      },
      {
        "time": 142.02799999713898,
        "key": "video_is_encrypted",
        "value": false
      },
      {
        "time": 142.02799999713898,
        "key": "width",
        "value": 1280
      },
      {
        "time": 143.65099999308586,
        "key": "audio_dds",
        "value": false
      },
      {
        "time": 143.65699999034405,
        "key": "audio_decoder",
        "value": "FFmpegAudioDecoder"
      },
      {
        "time": 143.67899999022484,
        "key": "info",
        "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: aac bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 44100 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 143.95899999141693,
        "key": "video_dds",
        "value": false
      },
      {
        "time": 143.9860000014305,
        "key": "video_decoder",
        "value": "FFmpegVideoDecoder"
      },
      {
        "time": 144.0029999911785,
        "key": "info",
        "value": "Selected FFmpegVideoDecoder for video decoding, config: codec: h264 format: 2 profile: h264 high coded size: [1280,720] visible rect: [0,0,1280,720] natural size: [1280,720] has extra data? true encrypted? false rotation: 0°"
      },
      {
        "time": 144.0409999936819,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 173.40099999308586,
        "key": "height",
        "value": 720
      },
      {
        "time": 173.40099999308586,
        "key": "width",
        "value": 1280
      },
      {
        "time": 183.23299999535084,
        "key": "video_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 189.83200000226498,
        "key": "audio_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 196.41099999845028,
        "key": "pipeline_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 196.57400000095367,
        "key": "info",
        "value": "Effective playback rate changed from 0 to 1"
      },
      {
        "time": 197.20299999415874,
        "key": "event",
        "value": "PLAY"
      },
      {
        "time": 142.01299999654293,
        "key": "duration",
        "value": 15.023311
      },
      {
        "time": 5463.973999992013,
        "key": "event",
        "value": "PAUSE"
      },
      {
        "time": 5528.644999995828,
        "key": "pipeline_state",
        "value": "kStopping"
      },
      {
        "time": 5529.891999989748,
        "key": "pipeline_state",
        "value": "kStopped"
      },
      {
        "time": 5531.5680000036955,
        "key": "event",
        "value": "WEBMEDIAPLAYER_DESTROYED"
      }
    ]
  },
  {
    "properties": {
      "render_id": 6,
      "player_id": 5,
      "origin_url": "https://run.plnkr.co/",
      "frame_url": "https://run.plnkr.co/1cLJbQ96jyx49nuU/",
      "frame_title": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource",
      "url": "blob:https://run.plnkr.co/eabf3673-2cda-48d4-8e29-cd9a5b52b2ea#t=0,5",
      "total_bytes": 2372820,
      "streaming": false,
      "single_origin": true,
      "passed_cors_access_check": false,
      "range_header_supported": true,
      "pipeline_state": "kStopped",
      "info": "Effective playback rate changed from 0 to 1",
      "audio_channels_count": 2,
      "audio_codec_name": "aac",
      "audio_sample_format": "Float 32-bit planar",
      "audio_samples_per_second": 44100,
      "bitrate": 1261718,
      "found_audio_stream": true,
      "found_video_stream": true,
      "height": 720,
      "max_duration": 15.046531,
      "start_time": 0,
      "time_base": "1/48",
      "video_codec_name": "h264",
      "video_format": "PIXEL_FORMAT_YV12",
      "video_is_encrypted": false,
      "width": 1280,
      "audio_dds": false,
      "audio_decoder": "FFmpegAudioDecoder",
      "video_dds": false,
      "video_decoder": "FFmpegVideoDecoder",
      "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "audio_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "event": "WEBMEDIAPLAYER_DESTROYED",
      "duration": 15.046531
    },
    "events": [
      {
        "time": 0,
        "key": "origin_url",
        "value": "https://run.plnkr.co/"
      },
      {
        "time": 0.013999998569488525,
        "key": "frame_url",
        "value": "https://run.plnkr.co/1cLJbQ96jyx49nuU/"
      },
      {
        "time": 0.018000006675720215,
        "key": "frame_title",
        "value": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource"
      },
      {
        "time": 0.81700000166893,
        "key": "url",
        "value": "blob:https://run.plnkr.co/eabf3673-2cda-48d4-8e29-cd9a5b52b2ea#t=0,5"
      },
      {
        "time": 9.679000005126,
        "key": "total_bytes",
        "value": 2372820
      },
      {
        "time": 9.694000005722046,
        "key": "streaming",
        "value": false
      },
      {
        "time": 9.706000000238419,
        "key": "single_origin",
        "value": true
      },
      {
        "time": 9.708000004291534,
        "key": "passed_cors_access_check",
        "value": false
      },
      {
        "time": 9.709000006318092,
        "key": "range_header_supported",
        "value": true
      },
      {
        "time": 11.621999993920326,
        "key": "pipeline_state",
        "value": "kStarting"
      },
      {
        "time": 101.94900000095367,
        "key": "info",
        "value": "FFmpegDemuxer: created video stream, config codec: h264 format: 2 profile: h264 high coded size: [1280,720] visible rect: [0,0,1280,720] natural size: [1280,720] has extra data? true encrypted? false rotation: 0°"
      },
      {
        "time": 102.01199999451637,
        "key": "info",
        "value": "FFmpegDemuxer: created audio stream, config codec: aac bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 44100 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 102.03399999439716,
        "key": "audio_channels_count",
        "value": 2
      },
      {
        "time": 102.03399999439716,
        "key": "audio_codec_name",
        "value": "aac"
      },
      {
        "time": 102.03399999439716,
        "key": "audio_sample_format",
        "value": "Float 32-bit planar"
      },
      {
        "time": 102.03399999439716,
        "key": "audio_samples_per_second",
        "value": 44100
      },
      {
        "time": 102.03399999439716,
        "key": "bitrate",
        "value": 1261718
      },
      {
        "time": 102.03399999439716,
        "key": "found_audio_stream",
        "value": true
      },
      {
        "time": 102.03399999439716,
        "key": "found_video_stream",
        "value": true
      },
      {
        "time": 102.03399999439716,
        "key": "height",
        "value": 720
      },
      {
        "time": 102.03399999439716,
        "key": "max_duration",
        "value": 15.046531
      },
      {
        "time": 102.03399999439716,
        "key": "start_time",
        "value": 0
      },
      {
        "time": 102.03399999439716,
        "key": "time_base",
        "value": "1/48"
      },
      {
        "time": 102.03399999439716,
        "key": "video_codec_name",
        "value": "h264"
      },
      {
        "time": 102.03399999439716,
        "key": "video_format",
        "value": "PIXEL_FORMAT_YV12"
      },
      {
        "time": 102.03399999439716,
        "key": "video_is_encrypted",
        "value": false
      },
      {
        "time": 102.03399999439716,
        "key": "width",
        "value": 1280
      },
      {
        "time": 103.51500000059605,
        "key": "audio_dds",
        "value": false
      },
      {
        "time": 103.52500000596046,
        "key": "audio_decoder",
        "value": "FFmpegAudioDecoder"
      },
      {
        "time": 103.58200000226498,
        "key": "info",
        "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: aac bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 44100 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 103.91699999570847,
        "key": "video_dds",
        "value": false
      },
      {
        "time": 103.94699999690056,
        "key": "video_decoder",
        "value": "FFmpegVideoDecoder"
      },
      {
        "time": 103.96500000357628,
        "key": "info",
        "value": "Selected FFmpegVideoDecoder for video decoding, config: codec: h264 format: 2 profile: h264 high coded size: [1280,720] visible rect: [0,0,1280,720] natural size: [1280,720] has extra data? true encrypted? false rotation: 0°"
      },
      {
        "time": 104.00699999928474,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 142.71400000154972,
        "key": "height",
        "value": 720
      },
      {
        "time": 142.71400000154972,
        "key": "width",
        "value": 1280
      },
      {
        "time": 162.34600000083447,
        "key": "video_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 182.11400000751019,
        "key": "audio_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 191.3530000001192,
        "key": "pipeline_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 191.46400000154972,
        "key": "info",
        "value": "Effective playback rate changed from 0 to 1"
      },
      {
        "time": 191.73999999463558,
        "key": "event",
        "value": "PLAY"
      },
      {
        "time": 102.02500000596046,
        "key": "duration",
        "value": 15.046531
      },
      {
        "time": 5465.62800000608,
        "key": "event",
        "value": "PAUSE"
      },
      {
        "time": 5535.6539999991655,
        "key": "pipeline_state",
        "value": "kStopping"
      },
      {
        "time": 5536.866999998689,
        "key": "pipeline_state",
        "value": "kStopped"
      },
      {
        "time": 5536.921000003815,
        "key": "event",
        "value": "WEBMEDIAPLAYER_DESTROYED"
      }
    ]
  },
  {
    "properties": {
      "render_id": 6,
      "player_id": 6,
      "origin_url": "https://run.plnkr.co/",
      "frame_url": "https://run.plnkr.co/1cLJbQ96jyx49nuU/",
      "frame_title": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource",
      "url": "blob:https://run.plnkr.co/cf572270-8132-400a-be5a-9ff5ed20b1ed#t=0,6",
      "total_bytes": 2252313,
      "streaming": false,
      "single_origin": true,
      "passed_cors_access_check": false,
      "range_header_supported": true,
      "pipeline_state": "kStopped",
      "info": "Effective playback rate changed from 0 to 1",
      "audio_channels_count": 2,
      "audio_codec_name": "aac",
      "audio_sample_format": "Float 32-bit planar",
      "audio_samples_per_second": 44100,
      "bitrate": 1197640,
      "found_audio_stream": true,
      "found_video_stream": true,
      "height": 720,
      "max_duration": 15.046531,
      "start_time": 0,
      "time_base": "1/48",
      "video_codec_name": "h264",
      "video_format": "PIXEL_FORMAT_YV12",
      "video_is_encrypted": false,
      "width": 1280,
      "audio_dds": false,
      "audio_decoder": "FFmpegAudioDecoder",
      "video_dds": false,
      "video_decoder": "FFmpegVideoDecoder",
      "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "audio_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "event": "WEBMEDIAPLAYER_DESTROYED",
      "duration": 15.046531
    },
    "events": [
      {
        "time": 0,
        "key": "origin_url",
        "value": "https://run.plnkr.co/"
      },
      {
        "time": 0.011000007390975952,
        "key": "frame_url",
        "value": "https://run.plnkr.co/1cLJbQ96jyx49nuU/"
      },
      {
        "time": 0.015000000596046448,
        "key": "frame_title",
        "value": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource"
      },
      {
        "time": 0.45400001108646393,
        "key": "url",
        "value": "blob:https://run.plnkr.co/cf572270-8132-400a-be5a-9ff5ed20b1ed#t=0,6"
      },
      {
        "time": 4.686000004410744,
        "key": "total_bytes",
        "value": 2252313
      },
      {
        "time": 4.700000002980232,
        "key": "streaming",
        "value": false
      },
      {
        "time": 4.712000012397766,
        "key": "single_origin",
        "value": true
      },
      {
        "time": 4.712999999523163,
        "key": "passed_cors_access_check",
        "value": false
      },
      {
        "time": 4.714000001549721,
        "key": "range_header_supported",
        "value": true
      },
      {
        "time": 6.15200001001358,
        "key": "pipeline_state",
        "value": "kStarting"
      },
      {
        "time": 94.125,
        "key": "info",
        "value": "FFmpegDemuxer: created video stream, config codec: h264 format: 2 profile: h264 high coded size: [1280,720] visible rect: [0,0,1280,720] natural size: [1280,720] has extra data? true encrypted? false rotation: 0°"
      },
      {
        "time": 94.18900001049042,
        "key": "info",
        "value": "FFmpegDemuxer: created audio stream, config codec: aac bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 44100 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 94.21100001037121,
        "key": "audio_channels_count",
        "value": 2
      },
      {
        "time": 94.21100001037121,
        "key": "audio_codec_name",
        "value": "aac"
      },
      {
        "time": 94.21100001037121,
        "key": "audio_sample_format",
        "value": "Float 32-bit planar"
      },
      {
        "time": 94.21100001037121,
        "key": "audio_samples_per_second",
        "value": 44100
      },
      {
        "time": 94.21100001037121,
        "key": "bitrate",
        "value": 1197640
      },
      {
        "time": 94.21100001037121,
        "key": "found_audio_stream",
        "value": true
      },
      {
        "time": 94.21100001037121,
        "key": "found_video_stream",
        "value": true
      },
      {
        "time": 94.21100001037121,
        "key": "height",
        "value": 720
      },
      {
        "time": 94.21100001037121,
        "key": "max_duration",
        "value": 15.046531
      },
      {
        "time": 94.21100001037121,
        "key": "start_time",
        "value": 0
      },
      {
        "time": 94.21100001037121,
        "key": "time_base",
        "value": "1/48"
      },
      {
        "time": 94.21100001037121,
        "key": "video_codec_name",
        "value": "h264"
      },
      {
        "time": 94.21100001037121,
        "key": "video_format",
        "value": "PIXEL_FORMAT_YV12"
      },
      {
        "time": 94.21100001037121,
        "key": "video_is_encrypted",
        "value": false
      },
      {
        "time": 94.21100001037121,
        "key": "width",
        "value": 1280
      },
      {
        "time": 95.84000000357628,
        "key": "audio_dds",
        "value": false
      },
      {
        "time": 95.84800000488758,
        "key": "audio_decoder",
        "value": "FFmpegAudioDecoder"
      },
      {
        "time": 95.87600000202656,
        "key": "info",
        "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: aac bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 44100 sample_format: 6 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 96.16700001060963,
        "key": "video_dds",
        "value": false
      },
      {
        "time": 96.19700001180172,
        "key": "video_decoder",
        "value": "FFmpegVideoDecoder"
      },
      {
        "time": 96.21400000154972,
        "key": "info",
        "value": "Selected FFmpegVideoDecoder for video decoding, config: codec: h264 format: 2 profile: h264 high coded size: [1280,720] visible rect: [0,0,1280,720] natural size: [1280,720] has extra data? true encrypted? false rotation: 0°"
      },
      {
        "time": 96.25400000810623,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 149.28500001132488,
        "key": "video_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 167.94400000572205,
        "key": "audio_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 201.53100000321865,
        "key": "height",
        "value": 720
      },
      {
        "time": 201.53100000321865,
        "key": "width",
        "value": 1280
      },
      {
        "time": 205.1160000115633,
        "key": "pipeline_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 205.2030000090599,
        "key": "info",
        "value": "Effective playback rate changed from 0 to 1"
      },
      {
        "time": 205.46400000154972,
        "key": "event",
        "value": "PLAY"
      },
      {
        "time": 94.20200000703335,
        "key": "duration",
        "value": 15.046531
      },
      {
        "time": 6501.106000006199,
        "key": "event",
        "value": "PAUSE"
      },
      {
        "time": 6606.817000001669,
        "key": "pipeline_state",
        "value": "kStopping"
      },
      {
        "time": 6608.194000005722,
        "key": "pipeline_state",
        "value": "kStopped"
      },
      {
        "time": 6608.822000011802,
        "key": "event",
        "value": "WEBMEDIAPLAYER_DESTROYED"
      }
    ]
  },
  {
    "properties": {
      "render_id": 6,
      "player_id": 7,
      "origin_url": "https://run.plnkr.co/",
      "frame_url": "https://run.plnkr.co/1cLJbQ96jyx49nuU/",
      "frame_title": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource",
      "url": "blob:https://run.plnkr.co/4756a4b5-51dc-45fd-9cdd-d90dbba1e86b",
      "info": "Effective playback rate changed from 0 to 1",
      "pipeline_state": "kPlaying",
      "found_audio_stream": true,
      "audio_codec_name": "opus",
      "found_video_stream": true,
      "video_codec_name": "vp8",
      "debug": "Audio buffer splice at PTS=3036000us. Trimmed tail of overlapped buffer (PTS=2993000us) by 17000us.",
      "audio_dds": false,
      "audio_decoder": "FFmpegAudioDecoder",
      "video_dds": false,
      "video_decoder": "VpxVideoDecoder",
      "error": "Failed to reconcile encoded audio times with decoded output.",
      "height": 576,
      "width": 768,
      "audio_buffering_state": "BUFFERING_HAVE_NOTHING",
      "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "event": "PLAY",
      "duration": "unknown"
    },
    "events": [
      {
        "time": 0,
        "key": "origin_url",
        "value": "https://run.plnkr.co/"
      },
      {
        "time": 0.01600000262260437,
        "key": "frame_url",
        "value": "https://run.plnkr.co/1cLJbQ96jyx49nuU/"
      },
      {
        "time": 0.02000001072883606,
        "key": "frame_title",
        "value": "Record media fragments of any MIME type to single video using HTMLMediaElement.captureStream(), MediaRecorder, and MediaSource"
      },
      {
        "time": 0.5,
        "key": "url",
        "value": "blob:https://run.plnkr.co/4756a4b5-51dc-45fd-9cdd-d90dbba1e86b"
      },
      {
        "time": 0.5150000005960464,
        "key": "info",
        "value": "ChunkDemuxer: buffering by DTS"
      },
      {
        "time": 0.5600000023841858,
        "key": "pipeline_state",
        "value": "kStarting"
      },
      {
        "time": 17.886000007390976,
        "key": "found_audio_stream",
        "value": true
      },
      {
        "time": 17.894000008702278,
        "key": "audio_codec_name",
        "value": "opus"
      },
      {
        "time": 17.901000007987022,
        "key": "found_video_stream",
        "value": true
      },
      {
        "time": 17.912000000476837,
        "key": "video_codec_name",
        "value": "vp8"
      },
      {
        "time": 19.679000005126,
        "key": "debug",
        "value": "(Log limit reached. Further similar entries may be suppressed): Warning: using MSE 'sequence' AppendMode for a SourceBuffer with multiple tracks may cause loss of track synchronization. In some cases, buffered range gaps and playback stalls can occur. It is recommended to instead use 'segments' mode for a multitrack SourceBuffer."
      },
      {
        "time": 20.671000003814697,
        "key": "audio_dds",
        "value": false
      },
      {
        "time": 20.67500001192093,
        "key": "audio_decoder",
        "value": "FFmpegAudioDecoder"
      },
      {
        "time": 20.702000007033348,
        "key": "info",
        "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: opus bytes_per_channel: 4 channel_layout: 3 channels: 2 samples_per_second: 48000 sample_format: 4 bytes_per_frame: 8 seek_preroll: 0ms codec_delay: 0 has extra data? true encrypted? false discard decoder delay? true"
      },
      {
        "time": 20.78200000524521,
        "key": "video_dds",
        "value": false
      },
      {
        "time": 20.785000011324883,
        "key": "video_decoder",
        "value": "VpxVideoDecoder"
      },
      {
        "time": 20.80000001192093,
        "key": "info",
        "value": "Selected VpxVideoDecoder for video decoding, config: codec: vp8 format: 4 profile: vp8 coded size: [768,576] visible rect: [0,0,768,576] natural size: [768,576] has extra data? false encrypted? false rotation: 0°"
      },
      {
        "time": 20.83900000154972,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 57.82300001382828,
        "key": "info",
        "value": "Estimating WebM block duration to be 114ms for the last (Simple)Block in the Cluster for this Track. Use BlockGroups with BlockDurations at the end of each Track in a Cluster to avoid estimation."
      },
      {
        "time": 57.86100000143051,
        "key": "debug",
        "value": "Audio buffer splice at PTS=3036000us. Trimmed tail of overlapped buffer (PTS=2993000us) by 17000us."
      },
      {
        "time": 59.547000005841255,
        "key": "error",
        "value": "Failed to reconcile encoded audio times with decoded output."
      },
      {
        "time": 61.53200000524521,
        "key": "height",
        "value": 576
      },
      {
        "time": 61.53200000524521,
        "key": "width",
        "value": 768
      },
      {
        "time": 77.84500001370907,
        "key": "audio_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 78.26700000464916,
        "key": "video_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 80.93000000715256,
        "key": "pipeline_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 81.15200001001358,
        "key": "info",
        "value": "Effective playback rate changed from 0 to 1"
      },
      {
        "time": 81.48499999940395,
        "key": "event",
        "value": "PLAY"
      },
      {
        "time": 19.418000012636185,
        "key": "duration",
        "value": "unknown"
      },
      {
        "time": 4274.298000007868,
        "key": "audio_buffering_state",
        "value": "BUFFERING_HAVE_NOTHING"
      }
    ]
  }
]
wolenetz commented 6 years ago

Thanks for reporting https://bugs.chromium.org/p/chromium/issues/detail?id=820489. Further discussion of relevant use case w.r.t. HTML5 + MSE can occur on https://github.com/w3c/media-source/issues/190 (see some context links mentioned in https://bugs.chromium.org/p/chromium/issues/detail?id=820489#c5 through c7