| |
| Test for metadata tracks from Apple HLS stream. |
| |
| |
| ** Set video.src, wait for media data to load |
| RUN(video.src = 'http://127.0.0.1:8000/media/resources/hls/metadata/prog_index.m3u8') |
| |
| EVENT(addtrack) |
| EXPECTED (tracks.length == '1') OK |
| RUN(track = video.textTracks[0]) |
| EXPECTED (track.kind == 'metadata') OK |
| EXPECTED (track.mode == 'disabled') OK |
| RUN(track.mode = 'hidden') |
| EVENT(canplaythrough) |
| |
| ** Start playback, wait for all cues to load |
| RUN(video.play()) |
| |
| ** Validate cue data |
| * 1 |
| EXPECTED (typeof(cue) != 'undefined') OK |
| EXPECTED (cue.data == 'null') OK |
| EXPECTED (cue.type == 'com.apple.quicktime.HLS') OK |
| EXPECTED (cue.value != 'null') OK |
| EXPECTED (cue.value.key == '"X-START-OFFSET"') OK |
| EXPECTED (cue.value.data == '"0.000000"') OK |
| |
| * 2 |
| EXPECTED (typeof(cue) != 'undefined') OK |
| EXPECTED (cue.data == 'null') OK |
| EXPECTED (cue.type == 'com.apple.quicktime.HLS') OK |
| EXPECTED (cue.value != 'null') OK |
| EXPECTED (cue.value.key == '"X-END-OFFSET"') OK |
| EXPECTED (cue.value.data == '"5.000000"') OK |
| |
| * 3 |
| EXPECTED (typeof(cue) != 'undefined') OK |
| EXPECTED (cue.data == 'null') OK |
| EXPECTED (cue.type == 'org.id3') OK |
| EXPECTED (cue.value != 'null') OK |
| EXPECTED (cue.value.key == '"TIT2"') OK |
| EXPECTED (cue.value.data == '"Stream Counting"') OK |
| |
| * 4 |
| EXPECTED (typeof(cue) != 'undefined') OK |
| EXPECTED (cue.data == 'null') OK |
| EXPECTED (cue.type == 'org.id3') OK |
| EXPECTED (cue.value != 'null') OK |
| EXPECTED (cue.value.key == '"TPE1"') OK |
| EXPECTED (cue.value.data == '"Andy"') OK |
| |
| * 5 |
| EXPECTED (typeof(cue) != 'undefined') OK |
| EXPECTED (cue.data == 'null') OK |
| EXPECTED (cue.type == 'org.id3') OK |
| EXPECTED (cue.value != 'null') OK |
| EXPECTED (cue.value.key == '"TALB"') OK |
| EXPECTED (cue.value.data == '"Greatest Hits"') OK |
| |
| * 6 |
| EXPECTED (typeof(cue) != 'undefined') OK |
| EXPECTED (cue.data == 'null') OK |
| EXPECTED (cue.type == 'org.id3') OK |
| EXPECTED (cue.value != 'null') OK |
| EXPECTED (cue.value.key == '"GEOB"') OK |
| EXPECTED (cue.value.data == '{}') OK |
| EXPECTED (cue.value.type == '"image/png"') OK |
| EXPECTED (cue.value.info == '"Our Hero"') OK |
| EXPECTED (cue.value.name == '"abe.png"') OK |
| |
| * 7 |
| EXPECTED (typeof(cue) != 'undefined') OK |
| EXPECTED (cue.data == 'null') OK |
| EXPECTED (cue.type == 'org.id3') OK |
| EXPECTED (cue.value != 'null') OK |
| EXPECTED (cue.value.key == '"APIC"') OK |
| EXPECTED (cue.value.data == '{}') OK |
| EXPECTED (cue.value.type == '"image/png"') OK |
| |
| * 8 |
| EXPECTED (typeof(cue) != 'undefined') OK |
| EXPECTED (cue.data == 'null') OK |
| EXPECTED (cue.type == 'org.id3') OK |
| EXPECTED (cue.value != 'null') OK |
| EXPECTED (cue.value.key == '"TXXX"') OK |
| EXPECTED (cue.value.data == '"Text Blob"') OK |
| |
| ** Extract images from cue data, validate by setting img.src |
| RUN(cueImageData = track.cues[5].value.data) |
| EXPECTED (cueImageData instanceof ArrayBuffer == 'true') OK |
| RUN(blobUrl = URL.createObjectURL(new Blob([cueImageData], { type: 'image/png' }))) |
| RUN(imageElement.src = blobUrl) |
| EVENT(load) |
| EXPECTED (imageElement.width == '76') OK |
| EXPECTED (imageElement.height == '103') OK |
| |
| RUN(cueImageData = track.cues[6].value.data) |
| EXPECTED (cueImageData instanceof ArrayBuffer == 'true') OK |
| RUN(blobUrl = URL.createObjectURL(new Blob([cueImageData], { type: 'image/png' }))) |
| RUN(imageElement.src = blobUrl) |
| EVENT(load) |
| EXPECTED (imageElement.width == '100') OK |
| EXPECTED (imageElement.height == '100') OK |
| |
| END OF TEST |
| |