Vanilagy / webm-muxer

WebM multiplexer in pure TypeScript with support for WebCodecs API, video & audio.
https://vanilagy.github.io/webm-muxer/demo
MIT License
197 stars 12 forks source link

Streaming support #16

Closed happylinks closed 1 year ago

happylinks commented 1 year ago

Added support for streaming webm where we never write "in the past".

Verified the files with mkvinfo and ffprobe:

MKVInfo

``` + EBML head |+ EBML version: 1 |+ EBML read version: 1 |+ Maximum EBML ID length: 4 |+ Maximum EBML size length: 8 |+ Document type: webm |+ Document type version: 2 |+ Document type read version: 2 + Segment: size unknown |+ Segment information | + Timestamp scale: 1000000 | + Multiplexing application: https://github.com/Vanilagy/webm-muxer | + Writing application: https://github.com/Vanilagy/webm-muxer |+ Tracks | + Track | + Track number: 1 (track ID for mkvmerge & mkvextract: 0) | + Track UID: 1 | + Track type: video | + Codec ID: V_VP9 | + Default duration: 00:00:00.033333333 (30.000 frames/fields per second for a video track) | + Video track | + Pixel width: 640 | + Pixel height: 480 | + Video color information | + Color matrix coefficients: 1 | + Color transfer: 13 | + Color primaries: 1 | + Color range: 1 | + Track | + Track number: 2 (track ID for mkvmerge & mkvextract: 1) | + Track UID: 2 | + Track type: audio | + Codec ID: A_OPUS | + Codec's private data: size 19 | + Audio track | + Sampling frequency: 48000 | + Channels: 1 |+ Cluster | + Cluster timestamp: 00:00:00.000000000 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.000000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:00.000000000 | + Frame with size 235 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.020000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.033000000 | + Frame with size 30 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.040000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.060000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.066000000 | + Frame with size 28 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.080000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.100000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:00.100000000 | + Frame with size 46424 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.120000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.133000000 | + Frame with size 3951 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.140000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.160000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.166000000 | + Frame with size 3994 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.180000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.200000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:00.200000000 | + Frame with size 54341 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.220000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.233000000 | + Frame with size 939 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.240000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.259000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.266000000 | + Frame with size 3257 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.280000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.300000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:00.300000000 | + Frame with size 61602 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.320000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.333000000 | + Frame with size 2433 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.340000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.360000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.366000000 | + Frame with size 450 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.380000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.400000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:00.400000000 | + Frame with size 70636 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.420000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.433000000 | + Frame with size 1585 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.440000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.460000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.466000000 | + Frame with size 3088 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.480000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.500000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:00.500000000 | + Frame with size 79906 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.519000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.533000000 | + Frame with size 1141 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.540000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.560000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.567000000 | + Frame with size 3633 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.580000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.600000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:00.600000000 | + Frame with size 86758 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.620000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.633000000 | + Frame with size 889 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.640000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.660000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.667000000 | + Frame with size 18200 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.680000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.700000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:00.700000000 | + Frame with size 78484 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.720000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.733000000 | + Frame with size 9805 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.740000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.760000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.767000000 | + Frame with size 3525 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.780000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.800000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:00.800000000 | + Frame with size 70179 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.820000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.833000000 | + Frame with size 2459 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.840000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.860000000 | + Frame with size 253 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.867000000 | + Frame with size 2460 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.880000000 | + Frame with size 194 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.900000000 | + Frame with size 158 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:00.900000000 | + Frame with size 69772 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.920000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.933000000 | + Frame with size 2301 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.940000000 | + Frame with size 161 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.960000000 | + Frame with size 196 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:00.967000000 | + Frame with size 2591 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:00.980000000 | + Frame with size 126 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.000000000 | + Frame with size 161 |+ Cluster | + Cluster timestamp: 00:00:01.000000000 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:01.000000000 | + Frame with size 72901 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.020000000 | + Frame with size 216 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.034000000 | + Frame with size 2089 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.039000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.060000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.067000000 | + Frame with size 1950 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.080000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.100000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:01.100000000 | + Frame with size 76190 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.120000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.134000000 | + Frame with size 1629 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.140000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.160000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.167000000 | + Frame with size 2178 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.180000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.200000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:01.200000000 | + Frame with size 77612 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.220000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.234000000 | + Frame with size 1365 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.240000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.260000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.267000000 | + Frame with size 2302 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.280000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.300000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:01.300000000 | + Frame with size 77427 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.320000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.334000000 | + Frame with size 28648 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.340000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.360000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.367000000 | + Frame with size 2150 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.380000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.400000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:01.400000000 | + Frame with size 76399 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.420000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.434000000 | + Frame with size 1921 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.440000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.460000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.467000000 | + Frame with size 2253 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.480000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.500000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:01.500000000 | + Frame with size 76828 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.520000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.534000000 | + Frame with size 1658 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.540000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.560000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.567000000 | + Frame with size 2242 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.580000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.600000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:01.601000000 | + Frame with size 77698 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.620000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.634000000 | + Frame with size 1836 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.640000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.660000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.667000000 | + Frame with size 11819 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.680000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.700000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:01.701000000 | + Frame with size 79079 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.720000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.734000000 | + Frame with size 1762 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.740000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.760000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.767000000 | + Frame with size 2091 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.780000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.800000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:01.801000000 | + Frame with size 79539 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.820000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.834000000 | + Frame with size 1635 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.840000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.860000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.867000000 | + Frame with size 2276 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.880000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.900000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:01.901000000 | + Frame with size 80952 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.920000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.934000000 | + Frame with size 1591 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.940000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.960000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:01.967000000 | + Frame with size 1867 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:01.980000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.000000000 | + Frame with size 3 |+ Cluster | + Cluster timestamp: 00:00:02.001000000 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:02.001000000 | + Frame with size 83110 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.020000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.034000000 | + Frame with size 726 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.040000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.059000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.068000000 | + Frame with size 2328 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.079000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.100000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:02.101000000 | + Frame with size 83946 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.120000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.134000000 | + Frame with size 1832 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.140000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.160000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.168000000 | + Frame with size 3414 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.180000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.200000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:02.201000000 | + Frame with size 83405 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.220000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.234000000 | + Frame with size 1193 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.240000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.260000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.268000000 | + Frame with size 1845 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.280000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.300000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:02.301000000 | + Frame with size 84292 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.320000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.334000000 | + Frame with size 15191 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.340000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.360000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.368000000 | + Frame with size 473 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.380000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.400000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:02.401000000 | + Frame with size 85517 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.420000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.434000000 | + Frame with size 997 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.440000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.460000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.468000000 | + Frame with size 2663 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.480000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.500000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:02.501000000 | + Frame with size 86163 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.520000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.534000000 | + Frame with size 2468 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.540000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.560000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.568000000 | + Frame with size 5368 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.580000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.600000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:02.601000000 | + Frame with size 83517 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.620000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.635000000 | + Frame with size 2412 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.640000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.660000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.668000000 | + Frame with size 23083 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.680000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.700000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:02.701000000 | + Frame with size 83347 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.720000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.735000000 | + Frame with size 802 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.740000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.760000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.768000000 | + Frame with size 2093 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.780000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.800000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:02.801000000 | + Frame with size 83768 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.820000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.835000000 | + Frame with size 1077 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.840000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.860000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.868000000 | + Frame with size 2577 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.880000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.900000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:02.901000000 | + Frame with size 83769 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.920000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.935000000 | + Frame with size 1796 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.940000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.960000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:02.968000000 | + Frame with size 2691 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:02.980000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.000000000 | + Frame with size 3 |+ Cluster | + Cluster timestamp: 00:00:03.001000000 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:03.001000000 | + Frame with size 84317 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.020000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.035000000 | + Frame with size 592 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.040000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.060000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.068000000 | + Frame with size 3013 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.080000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.100000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:03.102000000 | + Frame with size 85230 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.120000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.135000000 | + Frame with size 2705 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.140000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.160000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.168000000 | + Frame with size 2775 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.180000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.200000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:03.202000000 | + Frame with size 84953 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.220000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.235000000 | + Frame with size 1001 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.240000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.260000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.268000000 | + Frame with size 2506 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.280000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.300000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:03.302000000 | + Frame with size 85520 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.320000000 | + Frame with size 161 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.335000000 | + Frame with size 18281 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.340000000 | + Frame with size 161 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.360000000 | + Frame with size 161 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.368000000 | + Frame with size 1051 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.380000000 | + Frame with size 161 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.400000000 | + Frame with size 161 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:03.402000000 | + Frame with size 85668 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.420000000 | + Frame with size 161 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.435000000 | + Frame with size 2688 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.440000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.460000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.468000000 | + Frame with size 3879 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.480000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.500000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:03.502000000 | + Frame with size 83898 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.520000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.535000000 | + Frame with size 2148 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.540000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.560000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.568000000 | + Frame with size 2978 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.580000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.600000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:03.602000000 | + Frame with size 83348 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.620000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.635000000 | + Frame with size 991 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.640000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.660000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.669000000 | + Frame with size 21325 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.680000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.700000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:03.702000000 | + Frame with size 83437 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.720000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.735000000 | + Frame with size 1893 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.740000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.760000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.769000000 | + Frame with size 2060 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.780000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.800000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:03.802000000 | + Frame with size 83993 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.820000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.835000000 | + Frame with size 640 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.840000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.860000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.869000000 | + Frame with size 3120 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.880000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.900000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:03.902000000 | + Frame with size 84756 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.920000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.935000000 | + Frame with size 1853 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.940000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.960000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:03.969000000 | + Frame with size 2592 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:03.980000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.000000000 | + Frame with size 3 |+ Cluster | + Cluster timestamp: 00:00:04.002000000 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:04.002000000 | + Frame with size 84640 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.020000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.035000000 | + Frame with size 744 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.040000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.060000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.069000000 | + Frame with size 3547 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.080000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.099000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:04.102000000 | + Frame with size 85232 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.119000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.136000000 | + Frame with size 743 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.139000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.159000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.169000000 | + Frame with size 4060 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.179000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.200000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:04.202000000 | + Frame with size 85481 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.220000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.236000000 | + Frame with size 1374 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.240000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.260000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.269000000 | + Frame with size 2212 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.280000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.300000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:04.302000000 | + Frame with size 85932 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.320000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.336000000 | + Frame with size 19705 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.340000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.360000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.369000000 | + Frame with size 2989 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.380000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.400000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:04.402000000 | + Frame with size 84645 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.420000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.436000000 | + Frame with size 2516 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.440000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.460000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.469000000 | + Frame with size 3346 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.480000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.500000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:04.502000000 | + Frame with size 83849 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.520000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.536000000 | + Frame with size 1988 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.540000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.560000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.569000000 | + Frame with size 2322 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.580000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.600000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:04.602000000 | + Frame with size 84188 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.620000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.636000000 | + Frame with size 1212 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.640000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.660000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.669000000 | + Frame with size 18108 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.680000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.700000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:04.703000000 | + Frame with size 85240 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.720000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.736000000 | + Frame with size 2495 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.740000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.760000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.769000000 | + Frame with size 3124 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.780000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.800000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:04.803000000 | + Frame with size 82349 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.820000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.836000000 | + Frame with size 2034 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.840000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.860000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.869000000 | + Frame with size 1856 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.880000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.900000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:04.903000000 | + Frame with size 83159 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.920000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.936000000 | + Frame with size 1177 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.940000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.960000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:04.969000000 | + Frame with size 2571 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:04.980000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.000000000 | + Frame with size 3 |+ Cluster | + Cluster timestamp: 00:00:05.003000000 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:05.003000000 | + Frame with size 82677 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.020000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.036000000 | + Frame with size 2157 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.040000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.060000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.069000000 | + Frame with size 2208 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.080000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.100000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:05.103000000 | + Frame with size 82922 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.120000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.136000000 | + Frame with size 294 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.140000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.160000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.170000000 | + Frame with size 1561 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.180000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.200000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:05.203000000 | + Frame with size 84752 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.220000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.236000000 | + Frame with size 1146 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.240000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.260000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.270000000 | + Frame with size 2880 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.280000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.300000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:05.303000000 | + Frame with size 85416 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.320000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.336000000 | + Frame with size 21124 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.340000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.360000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.370000000 | + Frame with size 1834 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.380000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.400000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:05.403000000 | + Frame with size 85732 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.420000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.436000000 | + Frame with size 6627 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.440000000 | + Frame with size 216 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.460000000 | + Frame with size 227 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.470000000 | + Frame with size 1952 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.480000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.500000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:05.503000000 | + Frame with size 82673 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.520000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.536000000 | + Frame with size 375 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.540000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.560000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.570000000 | + Frame with size 3725 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.580000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.600000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:05.603000000 | + Frame with size 84604 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.620000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.636000000 | + Frame with size 1010 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.640000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.660000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.670000000 | + Frame with size 18976 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.680000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.700000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:05.703000000 | + Frame with size 85363 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.720000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.737000000 | + Frame with size 1373 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.740000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.760000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.770000000 | + Frame with size 2954 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.780000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.800000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:05.803000000 | + Frame with size 86053 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.820000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.837000000 | + Frame with size 2209 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.840000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.860000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.870000000 | + Frame with size 2604 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.880000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.900000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:05.903000000 | + Frame with size 85907 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.920000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.937000000 | + Frame with size 1002 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.940000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.960000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:05.970000000 | + Frame with size 3426 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:05.980000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.000000000 | + Frame with size 3 |+ Cluster | + Cluster timestamp: 00:00:06.003000000 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:06.003000000 | + Frame with size 85543 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.020000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.037000000 | + Frame with size 2552 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.040000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.060000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.070000000 | + Frame with size 2926 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.080000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.100000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:06.103000000 | + Frame with size 84126 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.120000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.137000000 | + Frame with size 1695 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.140000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.160000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.170000000 | + Frame with size 2451 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.180000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.200000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:06.204000000 | + Frame with size 83531 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.220000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.237000000 | + Frame with size 2701 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.240000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.260000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.270000000 | + Frame with size 2419 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.280000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.300000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:06.304000000 | + Frame with size 81626 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.320000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.337000000 | + Frame with size 28934 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.340000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.360000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.370000000 | + Frame with size 2047 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.380000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.400000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:06.404000000 | + Frame with size 82236 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.420000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.437000000 | + Frame with size 1700 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.440000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.460000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.470000000 | + Frame with size 1460 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.480000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.500000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:06.504000000 | + Frame with size 83933 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.520000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.537000000 | + Frame with size 329 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.540000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.560000000 | + Frame with size 234 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.570000000 | + Frame with size 1578 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.580000000 | + Frame with size 169 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.600000000 | + Frame with size 93 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:06.604000000 | + Frame with size 85338 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.620000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.637000000 | + Frame with size 2162 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.640000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.660000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.670000000 | + Frame with size 26669 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.680000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.700000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:06.704000000 | + Frame with size 84496 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.720000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.737000000 | + Frame with size 4765 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.740000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.760000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.771000000 | + Frame with size 2460 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.780000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.800000000 | + Frame with size 3 | + Simple block: key, track number 1, 1 frame(s), timestamp 00:00:06.804000000 | + Frame with size 84018 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.820000000 | + Frame with size 3 | + Simple block: track number 1, 1 frame(s), timestamp 00:00:06.837000000 | + Frame with size 1290 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.840000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.860000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.880000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.900000000 | + Frame with size 3 | + Simple block: key, track number 2, 1 frame(s), timestamp 00:00:06.920000000 | + Frame with size 3 |+ Cues (subentries will be skipped) Statistics for track number 1: number of blocks: 206; size in bytes: 6065416; duration in seconds: 6.870333333; approximate bitrate in bits/second: 7062732 Statistics for track number 2: number of blocks: 347; size in bytes: 4354; duration in seconds: 6.92; approximate bitrate in bits/second: 5033 ```

FFProbe

``` ffprobe version 5.1.2 Copyright (c) 2007-2022 the FFmpeg developers built with Apple clang version 14.0.0 (clang-1400.0.29.202) configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.1.2_6 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon libavutil 57. 28.100 / 57. 28.100 libavcodec 59. 37.100 / 59. 37.100 libavformat 59. 27.100 / 59. 27.100 libavdevice 59. 7.100 / 59. 7.100 libavfilter 8. 44.100 / 8. 44.100 libswscale 6. 7.100 / 6. 7.100 libswresample 4. 7.100 / 4. 7.100 libpostproc 56. 6.100 / 56. 6.100 Input #0, matroska,webm, from 'picasso (45).webm': Metadata: encoder : https://github.com/Vanilagy/webm-muxer Duration: N/A, start: 0.000000, bitrate: N/A Stream #0:0(eng): Video: vp9 (Profile 0), yuv420p(tv, bt709/bt709/iec61966-2-1), 640x480, SAR 1:1 DAR 4:3, 30 fps, 30 tbr, 1k tbn (default) Stream #0:1(eng): Audio: opus, 48000 Hz, mono, fltp (default) ```

happylinks commented 1 year ago

Mmm, I broke something in the non-streaming code. Investigating...

happylinks commented 1 year ago

Not sure what I did wrong yet, it's not recognizing the EBML header properly for the non-streaming version:

(MKVInfo) No EBML head found. This file is probably not a Matroska file.

picasso (53).webm

Can continue investigating a bit later, any tips welcome!

Vanilagy commented 1 year ago

Looks mostly good! I've looked into the code and there a few things I'd change (and I found the fix to the bug), but honestly, I think it's faster if I just do this instead of doing a proper code review or something like that. So, I think I'll merge this in!

For the next time, remember to have ESLint running in your IDE (VSCode), as that will point out lint violations in the project. (There were just a few)

You know what would also be cool? If on the streaming demo we could somehow show the muxed WebM file in a

Vanilagy commented 1 year ago

Alright, did the fix commit! The bug was related to writing the Colour element, which in non-streaming mode didn't have a position set because you overrode the entire element (before that, I only overrode the data property on it). A change that I made is that I initialize all of the elements ahead of time, so we can get rid of some if-statements in the #createTracks logic.

Also, I replaced the code at the start of #writeSimpleBlock with:

    /** Writes an EBML SimpleBlock containing video or audio data to the file. */
    #writeSimpleBlock(chunk: InternalMediaChunk) {
        // When streaming, we create the tracks and segment after we've received the first media chunks.
        // Due to the interlacing algorithm, this code will be run once we've seen one chunk from every media track.
        if (this.#options.streaming && !this.#tracksElement) {
            this.#createTracks();
            this.#createSegment();
        }
    ...

This should be sufficient logic, so the if-statements aren't necessary anymore. Before that I think, you had a bug that this code would never run if there was only one track (I assume you always tested it with video+audio).

Vanilagy commented 1 year ago

I also updated the README docs for streaming, as well as webm-muxer.d.ts. I removed the technical explanation about how it doesn't write the size for Cluster and Segment, etc., since the user shouldn't require knowledge about the format internals to understand the docs.

happylinks commented 1 year ago

Thanks so much! Appreciate you fixing it and cleaning it up😁 I'll test it in our app in the coming week.

Vanilagy commented 1 year ago

Alright, I edited the streaming demo to stream the muxed output directly into a

Let me know if it works well for you :)

happylinks commented 1 year ago

Just tested, it works great, thanks again!