This commit is contained in:
Brooke Vibber 2023-04-02 20:59:22 -07:00
parent 4affa7315f
commit 4dc40de805
93 changed files with 1 additions and 2511 deletions

1
.gitignore vendored
View file

@ -1,5 +1,6 @@
.DS_Store
*.log
*.mbtree
standalone-*.*
polyphon-*.*
new-*.*

View file

@ -1,36 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>3gp codecs test</title>
</head>
<body>
<h1>3gp codecs test</h1>
<p>H.263/AAC in 3GP: 96p</p>
<video id=flat controls width=640 height=360>
<source type="video/3gpp" src=polyphon-h263-aac-96p.3gp>
</video>
<p>H.263/AAC in 3GP: 144p</p>
<video id=flat2 controls width=640 height=360>
<source type="video/3gpp" src=polyphon-h263-aac-144p.3gp>
</video>
<p>H.263/AAC in 3GP: 288p</p>
<video id=flat controls width=640 height=360>
<source type="video/3gpp" src=polyphon-h263-aac-288p.3gp>
</video>
<p>H.263/AAC in 3GP: 576p</p>
<video id=flat controls width=640 height=360>
<source type="video/3gpp" src=polyphon-h263-aac-576p.3gp>
</video>
<p>H.263/AAC in 3GP: 1152p</p>
<video id=flat controls width=640 height=360>
<source type="video/3gpp" src=polyphon-h263-aac-1152p.3gp>
</video>
</body>
</html>

19
3gp.sh
View file

@ -1,19 +0,0 @@
#MOVFLAGS="-movflags +frag_keyframe+empty_moov+default_base_moof+faststart"
MOVFLAGS="-movflags +faststart"
BITRATE_HI="-b:v 3840k"
BITRATE_LO="-b:v 2560k"
VIDEO_H264="-vcodec h264 $BITRATE_HI"
VIDEO_H263="-vcodec h263 -b:v 1280k"
VIDEO_H263_PLUS="-vcodec h263p -b:v 1280k"
VIDEO_JPEG="-vcodec mjpeg"
VIDEO_VP8="-vcodec libvpx $BITRATE_HI"
VIDEO_VP9="-vcodec libvpx-vp9 -row-mt 1 $BITRATE_LO"
AUDIO_AAC="-acodec aac -ac 1 -ar 44100 -ab 112k"
ffmpeg -i polyphon.ogv -vf "drawtext=text='h263-aac-96p.3gp':fontsize=72:fontcolor=orange, scale=128:96" $VIDEO_H263 -vb 64k $AUDIO_AAC $MOVFLAGS -y polyphon-h263-aac-96p.3gp || exit 1
ffmpeg -i polyphon.ogv -vf "drawtext=text='h263-aac-144p.3gp':fontsize=72:fontcolor=brown, scale=176:144" $VIDEO_H263 -vb 384k $AUDIO_AAC $MOVFLAGS -y polyphon-h263-aac-144p.3gp || exit 1
ffmpeg -i polyphon.ogv -vf "drawtext=text='h263-aac-288p.3gp':fontsize=72:fontcolor=yellow, scale=352:288" $VIDEO_H263 -vb 2048k $AUDIO_AAC $MOVFLAGS -y polyphon-h263-aac-288p.3gp || exit 1
ffmpeg -i polyphon.ogv -vf "drawtext=text='h263-aac-576p.3gp':fontsize=72:fontcolor=red, scale=704:576" $VIDEO_H263 -vb 4096k $AUDIO_AAC $MOVFLAGS -y polyphon-h263-aac-576p.3gp || exit 1
ffmpeg -i polyphon.ogv -vf "drawtext=text='h263-aac-1152p.3gp':fontsize=72:fontcolor=violet, scale=1408:1152" $VIDEO_H263 -vb 8192k $AUDIO_AAC $MOVFLAGS -y polyphon-h263-aac-1152p.3gp || exit 1

View file

@ -1,31 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>3gp codecs test 2</title>
</head>
<body>
<h1>3gp codecs test 2</h1>
<p>H.263/AAC in 3GP: 1M</p>
<video id=flat controls width=640 height=360>
<source type="video/3gpp" src=polyphon-h263-aac-1m.3gp>
</video>
<p>H.263/AAC in 3GP: 2M</p>
<video id=flat2 controls width=640 height=360>
<source type="video/3gpp" src=polyphon-h263-aac-2m.3gp>
</video>
<p>H.263/AAC in 3GP: 4M</p>
<video id=flat controls width=640 height=360>
<source type="video/3gpp" src=polyphon-h263-aac-4m.3gp>
</video>
<p>H.263/AAC in 3GP: 8Mp</p>
<video id=flat controls width=640 height=360>
<source type="video/3gpp" src=polyphon-h263-aac-8m.3gp>
</video>
</body>
</html>

12
3gp2.sh
View file

@ -1,12 +0,0 @@
#MOVFLAGS="-movflags +frag_keyframe+empty_moov+default_base_moof+faststart"
MOVFLAGS="-movflags +faststart"
VIDEO_H263="-vcodec h263"
VIDEO_H263_PLUS="-vcodec h263p"
AUDIO_AAC="-acodec aac -ac 1 -ar 44100 -ab 112k"
ffmpeg -i polyphon.ogv -vf "drawtext=text='h263-aac-288p@1M.3gp':fontsize=72:fontcolor=brown, scale=352:288" $VIDEO_H263 -vb 1024k $AUDIO_AAC $MOVFLAGS -y polyphon-h263-aac-1m.3gp || exit 1
ffmpeg -i polyphon.ogv -vf "drawtext=text='h263-aac-288p@2M.3gp':fontsize=72:fontcolor=yellow, scale=352:288" $VIDEO_H263 -vb 2048k $AUDIO_AAC $MOVFLAGS -y polyphon-h263-aac-2m.3gp || exit 1
ffmpeg -i polyphon.ogv -vf "drawtext=text='h263-aac-288p@4M.3gp':fontsize=72:fontcolor=red, scale=352:288" $VIDEO_H263 -vb 4096k $AUDIO_AAC $MOVFLAGS -y polyphon-h263-aac-4m.3gp || exit 1
ffmpeg -i polyphon.ogv -vf "drawtext=text='h263-aac-288p@8M.3gp':fontsize=72:fontcolor=violet, scale=352:288" $VIDEO_H263 -vb 8192k $AUDIO_AAC $MOVFLAGS -y polyphon-h263-aac-8m.3gp || exit 1

View file

@ -1,51 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS & flat MP4 ALAC test</title>
</head>
<body>
<h1>HLS & flat MP4 ALAC test</h1>
<p>VP9/ALAC in MP4 (HLS)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=combined-vp9-alac.m3u8>
</video>
<p>VP9/ALAC in MP4 (HLS, direct playlist)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=combined-vp9-alac-mp4.m3u8>
</video>
<p>VP9/ALAC in MP4 (flat)</p>
<video controls width=640 height=360>
<source type="video/mp4; codecs=&quot;vp09.00.10.08,alac&quot;"" src=polyphon-vp9-alac.mp4>
</video>
<script>
let codes = {
[MediaError.MEDIA_ERR_ABORTED]: 'MEDIA_ERR_ABORTED',
[MediaError.MEDIA_ERR_NETWORK]: 'MEDIA_ERR_NETWORK',
[MediaError.MEDIA_ERR_DECODE]: 'MEDIA_ERR_DECODE',
[MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED]: 'MEDIA_ERR_SRC_NOT_SUPPORTED',
};
function errify(hls, err) {
hls.addEventListener('error', function() {
let {code, message} = this.error;
let codeName = codes[code];
err.textContent = `${code} ${codeName}: ${message}`;
});
}
for (let hls of document.querySelectorAll('video')) {
let err = document.createElement('p');
if (hls.nextSibling) {
hls.parentNode.insertBefore(err, hls.nextSibling);
} else {
hls.parentNode.appendChild(err);
}
errify(hls, err);
}
</script>
</body>
</html>

View file

@ -1,16 +0,0 @@
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08"
vp9-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08"
vp8-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.60"
mpeg2-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a"
mpeg1-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9"
m4v-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c"
jpeg-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a"
h264-in-mp4.m3u8

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp9"
vp9-in-webm.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp8"
vp8-in-webm.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a"
h264-in-mp4.m3u8

View file

@ -1,10 +0,0 @@
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08"
vp9-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp9"
vp9-in-webm.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp8"
vp8-in-webm.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a"
h264-in-mp4.m3u8

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-aac.mp4
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-alac.mp4
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-flac.mp4
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-mp3.mp3
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-opus.mp4
#EXT-X-ENDLIST

View file

@ -1,96 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS WebM test with codec</title>
</head>
<body>
<h1>HLS WebM test with codec</h1>
<p>AAC in MP4</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-aac-mp4.m3u8>
</video>
<p>ALAC in MP4</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-alac-mp4.m3u8>
</video>
<p>FLAC in MP4</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-flac-mp4.m3u8>
</video>
<p>MP3 stream</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-mp3-mp4.m3u8>
</video>
<p>MP3 in MP4 (as mp4a.6b)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-mp3mp4-h264.m3u8>
</video>
<p>MP3 in MP4 (as mp4a.40.34)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-mp3mp4b-h264.m3u8>
</video>
<p>MP3 in MP4 (as mp3)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-mp3mp4c-h264.m3u8>
</video>
<p>Opus in MP4 (as mp4a.ad)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-opus-mp4.m3u8>
</video>
<p>Opus in MP4 (as opus)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-opusb-mp4.m3u8>
</video>
<p>Opus in MP4 (as Opus)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-opusc-mp4.m3u8>
</video>
<p>Vorbis in MP4 (as mp4a.dd.0)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-vorbis-mp4.m3u8>
</video>
<p>Vorbis in MP4 (as vorbis)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-vorbisb-mp4.m3u8>
</video>
<script>
let codes = {
[MediaError.MEDIA_ERR_ABORTED]: 'MEDIA_ERR_ABORTED',
[MediaError.MEDIA_ERR_NETWORK]: 'MEDIA_ERR_NETWORK',
[MediaError.MEDIA_ERR_DECODE]: 'MEDIA_ERR_DECODE',
[MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED]: 'MEDIA_ERR_SRC_NOT_SUPPORTED',
};
function errify(hls, err) {
hls.addEventListener('error', function() {
let {code, message} = this.error;
let codeName = codes[code];
err.textContent = `${code} ${codeName}: ${message}`;
});
}
for (let hls of document.querySelectorAll('video')) {
let err = document.createElement('p');
if (hls.nextSibling) {
hls.parentNode.insertBefore(err, hls.nextSibling);
} else {
hls.parentNode.appendChild(err);
}
errify(hls, err);
}
</script>
</body>
</html>

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.02",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,18 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1"
vp9-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.40.02",AUDIO="a1"
vp8-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.61,mp4a.40.02",AUDIO="a1"
mpeg2-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a,mp4a.40.02",AUDIO="a1"
mpeg1-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9,mp4a.40.02",AUDIO="a1"
m4v-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.40.02",AUDIO="a1"
jpeg-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.02",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,14 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.61,mp4a.40.02",AUDIO="a1"
mpeg2-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a,mp4a.40.02",AUDIO="a1"
mpeg1-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9,mp4a.40.02",AUDIO="a1"
m4v-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.40.02",AUDIO="a1"
jpeg-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.02",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08,mp4a.40.02",AUDIO="a1"
vp8-in-mp4.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1"
vp9-in-mp4.m3u8

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1"
vp9-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.40.02",AUDIO="a1"
vp8-in-mp4.m3u8

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-alac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,alac",AUDIO="a1"
vp9-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,alac",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,18 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-mp3.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1"
vp9-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.40.02",AUDIO="a1"
vp8-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.60,mp4a.40.02",AUDIO="a1"
mpeg2-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a,mp4a.40.02",AUDIO="a1"
mpeg1-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9,mp4a.40.02",AUDIO="a1"
m4v-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.40.02",AUDIO="a1"
jpeg-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.34",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-flac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,flac",AUDIO="a1"
vp9-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,flac",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-mp3.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.34",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,18 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-mp3.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.6b",AUDIO="a1"
vp9-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.6b",AUDIO="a1"
vp8-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.60,mp4a.6b",AUDIO="a1"
mpeg2-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a,mp4a.6b",AUDIO="a1"
mpeg1-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9,mp4a.6b",AUDIO="a1"
m4v-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.6b",AUDIO="a1"
jpeg-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.6b",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="mp3-in-mp4.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.6b",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="mp3-in-mp4.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.34",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="mp3-in-mp4.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.34",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-mp3.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=352x288,FRAME-RATE=29.970,CODECS="h263"
h263-in-3gp.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-mp3.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=352x288,FRAME-RATE=29.970,CODECS="h263"
h263-in-mov.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-mp3.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=352x288,FRAME-RATE=29.970,CODECS="h263"
h263-in-mp4.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-mp3.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.34",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,18 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-opus.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.ad",AUDIO="a1"
vp9-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.ad",AUDIO="a1"
vp8-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.60,mp4a.ad",AUDIO="a1"
mpeg2-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a,mp4a.ad",AUDIO="a1"
mpeg1-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9,mp4a.ad",AUDIO="a1"
m4v-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.ad",AUDIO="a1"
jpeg-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.ad",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,18 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-opus.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,opus",AUDIO="a1"
vp9-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,opus",AUDIO="a1"
vp8-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.60,opus",AUDIO="a1"
mpeg2-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a,opus",AUDIO="a1"
mpeg1-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9,opus",AUDIO="a1"
m4v-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,opus",AUDIO="a1"
jpeg-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,opus",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,18 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-opus.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,Opus",AUDIO="a1"
vp9-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,Opus",AUDIO="a1"
vp8-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.60,Opus",AUDIO="a1"
mpeg2-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a,Opus",AUDIO="a1"
mpeg1-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9,Opus",AUDIO="a1"
m4v-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,Opus",AUDIO="a1"
jpeg-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,Opus",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="mp3-in-ts.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.34",AUDIO="a1"
h264-in-mp4.m3u8

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp9",AUDIO="a1"
vp9-in-webm.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp8",AUDIO="a1"
vp8-in-webm.m3u8

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1"
vp9-in-webm.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.40.02",AUDIO="a1"
vp8-in-webm.m3u8

View file

@ -1,14 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.aac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1"
caminandes-llamigos.webm.1080p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1"
caminandes-llamigos.webm.720p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1"
caminandes-llamigos.webm.480p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1"
caminandes-llamigos.webm.360p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1"
caminandes-llamigos.webm.240p.vp9.pass2.m3u8

View file

@ -1,18 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.mp3.m3u8"
# mp4a.40.34 is for raw mp3
# mp4a.6b ?
# mp3 ?
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1"
caminandes-llamigos.webm.1080p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1"
caminandes-llamigos.webm.720p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1"
caminandes-llamigos.webm.480p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1"
caminandes-llamigos.webm.360p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1"
caminandes-llamigos.webm.240p.vp9.pass2.m3u8

View file

@ -1,18 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.mp3.m3u8"
# mp4a.40.34 is for raw mp3
# mp4a.6b ?
# mp3 ?
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1"
caminandes-llamigos.webm.1080p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1"
caminandes-llamigos.webm.720p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1"
caminandes-llamigos.webm.480p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1"
caminandes-llamigos.webm.360p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1"
caminandes-llamigos.webm.240p.vp9.pass2.m3u8

View file

@ -1,14 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.vorbis.mp4.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1"
caminandes-llamigos.webm.1080p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1"
caminandes-llamigos.webm.720p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1"
caminandes-llamigos.webm.480p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1"
caminandes-llamigos.webm.360p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1"
caminandes-llamigos.webm.240p.vp9.pass2.m3u8

View file

@ -1,12 +0,0 @@
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08"
caminandes-llamigos.webm.1080p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08"
caminandes-llamigos.webm.720p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08"
caminandes-llamigos.webm.480p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08"
caminandes-llamigos.webm.360p.vp9.pass2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08"
caminandes-llamigos.webm.240p.vp9.pass2.m3u8

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1"
vp9-in-mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.40.02",AUDIO="a1"
jpeg-in-mp4.m3u8

View file

@ -1,29 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS WebM test with codec</title>
</head>
<body>
<h1>HLS WebM test with codec</h1>
<p>The video will try to load an HLS containing a VP9-in-MP4 variant, with AAC audio, with no fallback:</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-aac-vp9.m3u8>
<source type="video/webm; codecs=&quot;vp8, vorbis&quot;" src=polyphon-vp8-vorbis.webm>
</video>
<p id=err></p>
<script>
let codes = {
[MediaError.MEDIA_ERR_ABORTED]: 'MEDIA_ERR_ABORTED',
[MediaError.MEDIA_ERR_NETWORK]: 'MEDIA_ERR_NETWORK',
[MediaError.MEDIA_ERR_DECODE]: 'MEDIA_ERR_DECODE',
[MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED]: 'MEDIA_ERR_SRC_NOT_SUPPORTED',
};
hls1.addEventListener('error', function() {
let {code, message} = this.error;
let codeName = codes[code];
err.textContent = `${code} ${codeName}: ${message}`;
});
</script>
</body>
</html>

View file

@ -1,82 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Flat VP9/WebM test</title>
</head>
<body>
<h1>Flat WebM test</h1>
<p>This video will try to load a flat file containing VP9/Opus or VP8/Vorbis in WebM, or an h264/AAC fallback:</p>
<video id=flat controls width=640 height=360>
<source type="video/webm; codecs=&quot;vp9, opus&quot;" src=polyphon-vp9-opus.webm>
<source type="video/webm; codecs=&quot;vp8, vorbis&quot;" src=polyphon-vp8-vorbis.webm>
<source type="video/mp4; codecs=&quot;avc1.640032, mp4a.40&quot;" src=polyphon-h264-aac.mp4>
</video>
<p>This one will try VP9/AAC in MP4, or an h264/AAC fallback:</p>
<video id=flat2 controls width=640 height=360>
<source type="video/mp4; codecs=&quot;vp09.00.10.08, mp4a.40&quot;" src=polyphon-vp9-aac.mp4>
<source type="video/mp4; codecs=&quot;avc1.640032, mp4a.40&quot;" src=polyphon-h264-aac.mp4>
</video>
<p>This one will be VP9/MP3 in MP4 listed as mp4a.6b:</p>
<video id=flat2a controls width=640 height=360>
<source type="video/mp4; codecs=&quot;vp09.00.10.08, mp4a.6b&quot;" src=polyphon-vp9-mp3.mp4>
</video>
<p>This one will be h264 only:</p>
<video id=flat3 controls width=640 height=360>
<source type="video/mp4; codecs=&quot;avc1.640032, mp4a.40&quot;" src=polyphon-h264-aac.mp4>
</video>
<p>This one will be VP9-in-MP4 only but not specify codecs:</p>
<video id=flat4 controls width=640 height=360>
<source type="video/mp4" src=polyphon-vp9-aac.mp4>
</video>
<p>This one will be h264 only but not specify codecs:</p>
<video id=flat5 controls width=640 height=360>
<source type="video/mp4" src=polyphon-h264-aac.mp4>
</video>
<h1>Hail Marys</h1>
<p>VP8 in MP4, no markings:</p>
<video id=flat6 controls width=640 height=360>
<source type="video/mp4" src=polyphon-vp8.mp4>
</video>
<p>H.263 in MP4, no markings:</p>
<video id=flat7 controls width=640 height=360>
<source type="video/mp4" src=polyphon-h263.mp4>
</video>
<p>H.263 in mov, no markings:</p>
<video id=flat8 controls width=640 height=360>
<source type="video/quicktime" src=polyphon-h263.mov>
</video>
<p>H.263 in 3gp, no markings:</p>
<video id=flat9 controls width=640 height=360>
<source type="video/3gpp" src=polyphon-h263.3gp>
</video>
<p>MPEG-2 in MP4, no markings:</p>
<video id=flat10 controls width=640 height=360>
<source type="video/mp4" src=polyphon-mpeg2.mp4>
</video>
<p>MPEG-1 in MP4, no markings:</p>
<video id=flat11 controls width=640 height=360>
<source type="video/mp4" src=polyphon-mpeg1.mp4>
</video>
<p>MPEG-4 in MP4, no markings:</p>
<video id=flat12 controls width=640 height=360>
<source type="video/mp4" src=polyphon-m4v.mp4>
</video>
</body>
</html>

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-h263.3gp
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-h263.mov
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-h263.mp4
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-h263.ts
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56
polyphon-h264.mp4
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-jpeg.mov
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-jpeg.mp4
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-jpeg.ts
#EXT-X-ENDLIST

View file

@ -1,34 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS WebM test with JPEG</title>
</head>
<body>
<h1>HLS WebM test with JPEG</h1>
<p>The video will try to load an HLS containing a VP9-in-MP4 variant, with AAC audio, with JPEG-in-MP4 fallback:</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=fallback-jpeg.m3u8>
</video>
<p>HLS containing JPEG-in-MP4, with AAC audio:</p>
<video id=hls2 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=only-jpeg.m3u8>
</video>
<p>HLS containing JPEG-in-MOV, with AAC audio:</p>
<video id=hls3 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=only-jpeg-mov.m3u8>
</video>
<p>Flat JPEG-in-MP4:</p>
<video id=flat1 controls width=640 height=360>
<source type="video/mp4; codecs=&quot;jpeg&quot;" src=polyphon-jpeg.mp4>
</video>
<p>Flat JPEG-in-MOV:</p>
<video id=flat2 controls width=640 height=360>
<source type="video/quicktime; codecs=&quot;jpeg&quot;" src=polyphon-jpeg.mov>
</video>
<p>Flat JPEG-in-MOV, with AAC audio:</p>
<video id=flat3 controls width=640 height=360>
<source type="video/quicktime; codecs=&quot;jpeg&quot;" src=polyphon-jpeg-aac.mov>
</video>
</body>
</html>

View file

@ -1,12 +0,0 @@
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5500000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08"
caminandes-llamigos.webm.1080p.vp9.fast.mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3000000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08"
caminandes-llamigos.webm.720p.vp9.fast.mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08"
caminandes-llamigos.webm.480p.vp9.fast.mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=400000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08"
caminandes-llamigos.webm.360p.vp9.fast.mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=300000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08"
caminandes-llamigos.webm.240p.vp9.fast.mp4.m3u8

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-m4v.mp4
#EXT-X-ENDLIST

View file

@ -1,45 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>QuickTime codecs test</title>
</head>
<body>
<h1>QuickTime codecs test</h1>
<p>MJPEG/MP3 in QuickTime</p>
<video id=flat controls width=640 height=360>
<source type="video/quicktime" src=polyphon-jpeg-mp3.mov>
</video>
<p>H.263/MP3 in QuickTime</p>
<video id=flat1 controls width=640 height=360>
<source type="video/quicktime" src=polyphon-h263-mp3.mov>
</video>
<p>H.263+/MP3 in QuickTime</p>
<video id=flat1b controls width=640 height=360>
<source type="video/quicktime" src=polyphon-h263p-mp3.mov>
</video>
<p>MPEG-1/MP3 in QuickTime</p>
<video id=flat2 controls width=640 height=360>
<source type="video/quicktime" src=polyphon-mpeg1-mp3.mov>
</video>
<p>MPEG-2/MP3 in QuickTime</p>
<video id=flat3 controls width=640 height=360>
<source type="video/quicktime" src=polyphon-mpeg2-mp3.mov>
</video>
<p>MPEG-4/MP3 in QuickTime</p>
<video id=flat4 controls width=640 height=360>
<source type="video/quicktime" src=polyphon-m4v-mp3.mov>
</video>
<p>H.264/MP3 in QuickTime</p>
<video id=flat5 controls width=640 height=360>
<source type="video/quicktime" src=polyphon-h264-mp3.mov>
</video>
</body>
</html>

28
mov.sh
View file

@ -1,28 +0,0 @@
MOVFLAGS="-movflags +frag_keyframe+empty_moov+default_base_moof+faststart"
BITRATE_HI="-b:v 3840k"
BITRATE_LO="-b:v 2560k"
VIDEO_H264="-vcodec h264 $BITRATE_HI"
VIDEO_H263="-vcodec h263 -b:v 1280k"
VIDEO_H263_PLUS="-vcodec h263p -b:v 1280k"
VIDEO_JPEG="-vcodec mjpeg $BITRATE_HI"
VIDEO_VP8="-vcodec libvpx $BITRATE_HI"
VIDEO_VP9="-vcodec libvpx-vp9 -row-mt 1 $BITRATE_LO"
AUDIO_AAC="-acodec aac -ac 2 -ar 44100 -ab 128k"
AUDIO_MP3="-acodec libmp3lame -ac 2 -ar 44100 -ab 128k"
AUDIO_OPUS="-acodec libopus -ac 2 -ar 48000 -ab 128k"
AUDIO_VORBIS="-acodec libvorbis -ac 2 -ar 44100 -ab 128k"
ffmpeg -i polyphon.ogv -an -vf "drawtext=text='jpeg.mov':fontsize=72:fontcolor=magenta, scale=640:360" $VIDEO_JPEG $AUDIO_MP3 $MOVFLAGS -y polyphon-jpeg-mp3.mov || exit 1
ffmpeg -i polyphon.ogv -an -vf "drawtext=text='mpeg1.mov':fontsize=72:fontcolor=brown" -vcodec mpeg1video $BITRATE_HI $AUDIO_MP3 $MOVFLAGS -y polyphon-mpeg1-mp3.mov || exit 1
ffmpeg -i polyphon.ogv -an -vf "drawtext=text='mpeg2.mov':fontsize=72:fontcolor=brown" -vcodec mpeg2video $BITRATE_HI $AUDIO_MP3 $MOVFLAGS -y polyphon-mpeg2-mp3.mov || exit 1
ffmpeg -i polyphon.ogv -an -vf "drawtext=text='h263.mov':fontsize=72:fontcolor=brown, scale=352:288" $VIDEO_H263 $AUDIO_MP3 $MOVFLAGS -y polyphon-h263-mp3.mov || exit 1
ffmpeg -i polyphon.ogv -an -vf "drawtext=text='h263p.mov':fontsize=72:fontcolor=brown, scale=720:480" $VIDEO_H263_PLUS $AUDIO_MP3 $MOVFLAGS -y polyphon-h263p-mp3.mov || exit 1
ffmpeg -i polyphon.ogv -an -vf "drawtext=text='m4v.mov':fontsize=72:fontcolor=brown" -vcodec mpeg4 $BITRATE_HI $AUDIO_MP3 $MOVFLAGS -y polyphon-m4v-mp3.mov || exit 1
ffmpeg -i polyphon.ogv -an -vf "drawtext=text='h264.mov':fontsize=72:fontcolor=red" $VIDEO_H264 $AUDIO_MP3 $MOVFLAGS -y polyphon-h264-mp3.mov || exit 1
#ffmpeg -i polyphon.ogv -an -vf "drawtext=text='vp8.mov':fontsize=72:fontcolor=cyan" $VIDEO_VP8 $AUDIO_MP3 -y polyphon-vp8-mp3.mov || exit 1
#ffmpeg -i polyphon.ogv -an -vf "drawtext=text='vp9.mov':fontsize=72:fontcolor=green" $VIDEO_VP9 $AUDIO_MP3 -y polyphon-vp9-mp3.mov || exit 1

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-mp3.mp4
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-mp3.ts
#EXT-X-ENDLIST

View file

@ -1,70 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS WebM test with codec</title>
</head>
<body>
<h1>HLS tests with MP3 audio</h1>
<p>The video will try to load an HLS containing VP9-in-MP4 and fallback variants, with MP3 audio:</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-mp3-mp4.m3u8>
</video>
<p>And with MP3 audio and only H.264 (marked as mp4a.40.34):</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-mp3-h264.m3u8>
</video>
<p>And with MP3-in-MP4 audio (marked as mp4a.6b):</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-mp3mp4-h264.m3u8>
</video>
<p>And with MP3-in-MP4 audio (marked as mp4a.40.34):</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-mp3mp4b-h264.m3u8>
</video>
<p>And with MP3-in-TS audio (marked as mp4a.40.34):</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-ts-h264.m3u8>
</video>
<p>Now VP9 plus MP3 combined in MP4 (marked as mp4a.6b)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=combined-vp9-mp3.m3u8>
</video>
<p>Now VP9 plus MP3 combined in MP4 (direct playlist)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=combined-vp9-mp3-mp4.m3u8>
</video>
<script>
let codes = {
[MediaError.MEDIA_ERR_ABORTED]: 'MEDIA_ERR_ABORTED',
[MediaError.MEDIA_ERR_NETWORK]: 'MEDIA_ERR_NETWORK',
[MediaError.MEDIA_ERR_DECODE]: 'MEDIA_ERR_DECODE',
[MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED]: 'MEDIA_ERR_SRC_NOT_SUPPORTED',
};
function errify(hls, err) {
hls.addEventListener('error', function() {
let {code, message} = this.error;
let codeName = codes[code];
err.textContent = `${code} ${codeName}: ${message}`;
});
}
for (let hls of document.querySelectorAll('video')) {
let err = document.createElement('p');
if (hls.nextSibling) {
hls.parentNode.insertBefore(err, hls.nextSibling);
} else {
hls.parentNode.appendChild(err);
}
errify(hls, err);
}
</script>
</body>
</html>

View file

@ -1,40 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>MP4 codecs test</title>
</head>
<body>
<h1>MP4 codecs test</h1>
<p>MJPEG/MP3 in MP4</p>
<video id=flat controls width=640 height=360>
<source type="video/mp4" src=polyphon-jpeg-mp3.mp4>
</video>
<p>MPEG-1/MP3 in MP4</p>
<video id=flat2 controls width=640 height=360>
<source type="video/mp4" src=polyphon-mpeg1-mp3.mp4>
</video>
<p>MPEG-2/MP3 in MP4</p>
<video id=flat3 controls width=640 height=360>
<source type="video/mp4" src=polyphon-mpeg2-mp3.mp4>
</video>
<p>MPEG-4/MP3 in MP4</p>
<video id=flat4 controls width=640 height=360>
<source type="video/mp4" src=polyphon-m4v-mp3.mp4>
</video>
<p>H.264/MP3 in MP4</p>
<video id=flat5 controls width=640 height=360>
<source type="video/mp4" src=polyphon-h264-mp3.mp4>
</video>
<p>VP9/MP3 in MP4</p>
<video id=flat6 controls width=640 height=360>
<source type="video/mp4" src=polyphon-vp9-mp3.mp4>
</video>
</body>
</html>

27
mp4.sh
View file

@ -1,27 +0,0 @@
MOVFLAGS="-movflags +frag_keyframe+empty_moov+default_base_moof+faststart"
BITRATE_HI="-b:v 3840k"
BITRATE_LO="-b:v 2560k"
VIDEO_H264="-vcodec h264 $BITRATE_HI"
VIDEO_H263="-vcodec h263 -b:v 1280k"
VIDEO_H263_PLUS="-vcodec h263p -b:v 1280k"
VIDEO_JPEG="-vcodec mjpeg"
VIDEO_VP8="-vcodec libvpx $BITRATE_HI"
VIDEO_VP9="-vcodec libvpx-vp9 -row-mt 1 $BITRATE_LO"
AUDIO_AAC="-ac 2 -ar 44100 -vb 128k"
AUDIO_MP3="-acodec libmp3lame -ac 2 -ar 44100 -vb 128k"
AUDIO_OPUS="-acodec libopus -ac 2 -ar 48000 -vb 128k"
AUDIO_VORBIS="-acodec libvorbis -ac 2 -ar 44100 -vb 128k"
ffmpeg -i polyphon.ogv -an -vf "drawtext=text='jpeg-mp3.mp4':fontsize=72:fontcolor=magenta, scale=640:360" $VIDEO_JPEG $AUDIO_MP3 $MOVFLAGS -y polyphon-jpeg-mp3.mp4 || exit 1
ffmpeg -i polyphon.ogv -an -vf "drawtext=text='mpeg1-mp3.mp4':fontsize=72:fontcolor=brown" -vcodec mpeg1video $BITRATE_HI $AUDIO_MP3 $MOVFLAGS -y polyphon-mpeg1-mp3.mp4 || exit 1
ffmpeg -i polyphon.ogv -an -vf "drawtext=text='mpeg2-mp3.mp4':fontsize=72:fontcolor=brown" -vcodec mpeg2video $BITRATE_HI $AUDIO_MP3 $MOVFLAGS -y polyphon-mpeg2-mp3.mp4 || exit 1
#ffmpeg -i polyphon.ogv -an -vf "drawtext=text='h263-mp3.mp4':fontsize=72:fontcolor=brown, scale=352:288" $VIDEO_H263 $AUDIO_MP3 $MOVFLAGS -y polyphon-h263-mp3.mp4 || exit 1
ffmpeg -i polyphon.ogv -an -vf "drawtext=text='h264-mp3.mp4':fontsize=72:fontcolor=red" $VIDEO_H264 $AUDIO_MP3 $MOVFLAGS -y polyphon-h264-mp3.mp4 || exit 1
ffmpeg -i polyphon.ogv -an -vf "drawtext=text='m4v-mp3.mp4':fontsize=72:fontcolor=brown" -vcodec mpeg4 $BITRATE_HI $AUDIO_MP3 $MOVFLAGS -y polyphon-m4v-mp3.mp4 || exit 1
#ffmpeg -i polyphon.ogv -an -vf "drawtext=text='vp8-mp3.mp4':fontsize=72:fontcolor=cyan" $VIDEO_VP8 $AUDIO_MP3 -y polyphon-vp8-mp3.mp4 || exit 1
ffmpeg -i polyphon.ogv -an -vf "drawtext=text='vp9-mp3.mp4':fontsize=72:fontcolor=green" $VIDEO_VP9 $AUDIO_MP3 -y polyphon-vp9-mp3.mp4 || exit 1

View file

@ -1,27 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>MPEG codecs test</title>
</head>
<body>
<h1>MPEG codecs test</h1>
<p>MPEG-1 PS</p>
<video id=flat controls width=640 height=360>
<source type="video/mpeg" src=polyphon-mpeg1.mpeg>
</video>
<p>MPEG-2 PS</p>
<video id=flat2 controls width=640 height=360>
<source type="video/mpeg" src=polyphon-mpeg2.mpeg>
</video>
<p>MPEG-1 PS, no markings</p>
<video id=flat3 controls width=640 height=360 src=polyphon-mpeg1.mpeg></video>
<p>MPEG-2 PS, no markings</p>
<video id=flat4 controls width=640 height=360 src=polyphon-mpeg2.mpeg></video>
</body>
</html>

View file

@ -1,5 +0,0 @@
VIDEO_MPEG1="-vcodec mpeg1video"
VIDEO_MPEG2="-vcodec mpeg2video"
ffmpeg -i polyphon.ogv -vf "drawtext=text='mpeg1.mpeg':fontsize=72:fontcolor=yellow, scale=352:288" $VIDEO_MPEG1 -vb 1024k -ab 128k -y polyphon-mpeg1.mpeg || exit 1
ffmpeg -i polyphon.ogv -vf "drawtext=text='mpeg2.mpeg':fontsize=72:fontcolor=purple, scale=720:480" $VIDEO_MPEG2 -vb 2048k -y polyphon-mpeg2.mpeg || exit 1

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-mpeg1.mp4
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-mpeg2.mp4
#EXT-X-ENDLIST

150
new.html
View file

@ -1,150 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS VP9/fMP4 test</title>
<link rel=stylesheet type=text/css href=video-js/video-js.css>
</head>
<body>
<h1>HLS WebM test</h1>
<p id=hls>Checking HLS support...</p>
<p id=mse>Checking MSE VP9 support...</p>
<p id=webm>Checking flat WebM VP8 / Vorbis support...</p>
<p id=wasm>Checking WebAssembly support...</p>
<h2>Caminandes - Llamigos</h2>
<p>WebM VP9 and VP8 in front, MJPEG next, HLS with VP9-in-MP4 video with Opus-in-MP4 or AAC audio activated on JS.</p>
<video id=hls1 controls width=640 height=360>
<source type="video/webm; codecs=&quot;vp9, opus&quot;" src=new-vp9.webm>
<source type="video/webm; codecs=&quot;vp8, vorbis&quot;" src=new-vp8.webm>
<source type="video/quicktime; codecs=&quot;jpeg, mp4a.6b&quot;" src=new-mjpeg.mov>
<source type=application/vnd.apple.mpegurl src=new.m3u8>
</video>
<h2>Sources</h2>
<p>Flat WebM VP9/Opus</p>
<video controls width=640 height=360>
<source type="video/webm; codecs=&quot;vp9, opus&quot;" src=new-vp9.webm>
</video>
<p>Flat WebM VP8/Vorbis</p>
<video controls width=640 height=360>
<source type="video/webm; codecs=&quot;vp8, vorbis&quot;" src=new-vp8.webm>
</video>
<p>Flat Quicktime MJPEG/MP3</p>
<video controls width=640 height=360>
<source type="video/quicktime; codecs=&quot;jpeg, mp4a.6b&quot;" src=new-mjpeg.mov>
</video>
<p>HLS</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=new.m3u8>
</video>
<h2>Components</h2>
<p>HLS VP9 MP4 alone (no audio)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=new-vp9.m3u8>
</video>
<p>HLS Opus MP4 alone (only audio)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=new-opus.m3u8>
</video>
<p>HLS MP3 MP4 alone (only audio)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=new-mp3-mp4.m3u8>
</video>
<p>HLS MP3 TS alone (only audio)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=new-mp3-ts.m3u8>
</video>
<p>HLS MP3 raw alone (only audio)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=new-mp3.m3u8>
</video>
<script>
let video = document.createElement('video');
if (video.canPlayType('application/vnd.apple.mpegurl')) {
hls.textContent = 'native HLS playback supported';
hls.style.color = 'green';
} else {
hls.textContent = 'no native HLS';
hls.style.color = 'red';
}
if (typeof MediaSource == 'function') {
let codecs = [
['VP9-in-WebM', 'video/webm; codecs="vp9"'],
['Opus-in-WebM', 'audio/webm; codecs="opus"'],
['VP9-in-MP4', 'video/mp4; codecs="vp09.00.10.08"'],
['Opus-in-MP4', 'audio/mp4; codecs="opus"'],
['MP3-in-MP4', 'audio/mp4; codecs="mp4a.6b"'],
['MP3', 'audio/mp3'],
];
let yes = [];
let no = [];
for (let [name, mime] of codecs) {
if (MediaSource.isTypeSupported(mime)) {
yes.push(name);
} else {
no.push(name);
}
}
if (yes.length == codecs.length) {
mse.textContent = 'MSE supports ' + yes.join(', ');
mse.style.color = 'green';
} else {
mse.textContent = 'MSE supports ' + yes.join(', ') + ' but not ' + no.join(', ');
mse.style.color = 'orange';
}
} else {
mse.textContent = 'MSE not supported';
mse.style.color = 'red';
}
if (video.canPlayType('video/webm')) {
webm.textContent = 'flat WebM supported';
webm.style.color = 'green';
} else {
webm.textContent = 'flat WebM not supported';
webm.style.color = 'red';
}
if (typeof WebAssembly == 'object') {
wasm.textContent = 'WebAssembly supported';
wasm.style.color = 'green';
} else {
wasm.textContent = 'no WebAssembly support';
wasm.style.color = 'red';
}
function prep(vid) {
let hls = vid.querySelector('source[type="application/vnd.apple.mpegurl"]');
let mjpeg = vid.querySelector('source[type="video/quicktime; codecs=\\"jpeg, mp4a.6b\\""]');
if (hls && mjpeg && vid.canPlayType('application/vnd.apple.mpegurl')) {
// Move MJPEG to the end, so HLS has a chance first
vid.removeChild(mjpeg);
vid.appendChild(mjpeg);
// Fail over from HLS to MJPEG
let failover = function(event) {
if (this.error.code === MediaError.MEDIA_ERR_DECODE) {
event.preventDefault();
vid.removeEventListener('error', failover);
vid.src = mjpeg.src;
vid.play();
}
};
vid.addEventListener('error', failover);
}
}
prep(hls1);
</script>
</body>
</html>

View file

@ -1,10 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="opus",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="new-opus.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="mp3",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="new-mp3.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=2560000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,opus",AUDIO="opus"
new-vp9.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="mp3"
new-vp9.m3u8

View file

@ -1,234 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS WebM test</title>
<link rel=stylesheet type=text/css href=video-js/video-js.css>
</head>
<body>
<h1>HLS WebM test</h1>
<p id=hls>Checking HLS support...</p>
<p id=mse>Checking MSE VP9 support...</p>
<p id=webm>Checking flat WebM VP8 / Vorbis support...</p>
<p id=wasm>Checking WebAssembly support...</p>
<h2>Caminandes - Llamigos</h2>
<p>HLS with VP9-in-MP4 video and Opus-in-MP4, AAC-in-MP4, and MP3 audio. Flat WebM fallback with ogv.js loader.</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-opus-aac-mp3.m3u8>
<!--<source type=application/vnd.apple.mpegurl src=llamigos-vp9-mp3-opus.m3u8>-->
<!--<source type=application/vnd.apple.mpegurl src=llamigos-vp9-mp3ts-opus.m3u8>-->
<!--<source type=application/vnd.apple.mpegurl src=llamigos-vp9-mp3-vorbis.m3u8>-->
<source type="video/webm; codecs=&quot;vp8, vorbis&quot;" src=caminandes-llamigos.webm.flat.webm>
<source type="video/quicktime; codecs=&quot;jpeg, mp3&quot;" src=polyphon-jpeg-mp3.mov>
</video>
<p>Desired behavior:</p>
<ul>
<li>Firefox/Chrome: play via MSE with VP9/Opus (working)</li>
<li>Desktop Safari with VP9 support: play via MSE with VP9/AAC or MP3 (currently MP3 fails)</li>
<li>iOS Safari with VP9 support: play native HLS with VP9/AAC or MP3 (works)</li>
<li>Older iOS and desktop Safari without VP9: play via ogv.js with WebM VP8/Vorbis (WebKit issue with some devices, in progress)</li>
<li>Older iOS and desktop Safari without WebAssembly or with JS off: play backup MJPEG :D (HLS will take over but fail without JS)</li>
<li>Very old Firefox/Chrome: play native WebM VP8/Vorbis</li>
</ul>
<!--
<p>HLS with VP9 video and Opus, AAC, and MP3 audio. Flag WebM fallback.</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-opus-aac-mp3.m3u8>
<source type=video/webm src=caminandes-llamigos.webm.flat.webm>
</video>
<p>Expected behavior:</p>
<ul>
<li>Firefox/Chrome: MSE VP9/Opus (AAC for now)</li>
<li>Desktop Safari with VP9 support: MSE VP9/MP3 (AAC for now?)</li>
<li>iOS Safari with VP9 support: HLS VP9/MP3 (AAC for now?)</li>
<li>Older iOS and desktop Safari without VP9: ogv.js VP8/Vorbis</li>
<li>Very old Firefox/Chrome: native WebM VP8/Vorbis</li>
</ul>
-->
<!--
<p>HLS with VP9 video and AAC audio. Flag WebM fallback.</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-aac.m3u8>
<source type=video/webm src=caminandes-llamigos.webm.flat.webm>
</video>
<p>Expected behavior:</p>
<ul>
<li>Firefox/Chrome: MSE VP9/Opus (AAC for now)</li>
<li>Desktop Safari with VP9 support: MSE VP9/MP3 (AAC for now?)</li>
<li>iOS Safari with VP9 support: HLS VP9/MP3 (AAC for now?)</li>
<li>Older iOS and desktop Safari without VP9: ogv.js VP8/Vorbis</li>
<li>Very old Firefox/Chrome: native WebM VP8/Vorbis</li>
</ul>
-->
<script>
if (hls1.canPlayType('application/vnd.apple.mpegurl')) {
hls.textContent = 'native HLS playback supported';
hls.style.color = 'green';
} else {
hls.textContent = 'no native HLS';
hls.style.color = 'red';
}
if (typeof MediaSource == 'function') {
let codecs = [
['VP9-in-MP4', 'video/mp4; codecs="vp09.00.10.08"'],
['Opus-in-WebM', 'audio/webm; codecs="opus"'],
['MP3', 'audio/mp3'],
];
let yes = [];
let no = [];
for (let [name, mime] of codecs) {
if (MediaSource.isTypeSupported(mime)) {
yes.push(name);
} else {
no.push(name);
}
}
if (yes.length == codecs.length) {
mse.textContent = 'MSE supports ' + yes.join(', ');
mse.style.color = 'green';
} else {
mse.textContent = 'MSE supports ' + yes.join(', ') + ' but not ' + no.join(', ');
mse.style.color = 'orange';
}
} else {
mse.textContent = 'MSE not supported';
mse.style.color = 'red';
}
if (hls1.canPlayType('video/webm; codecs="vp8, vorbis"')) {
webm.textContent = 'flat WebM VP8/Vorbis supported';
webm.style.color = 'green';
} else {
webm.textContent = 'flat WebM VP8/Vorbis not supported';
webm.style.color = 'red';
}
if (typeof WebAssembly == 'object') {
wasm.textContent = 'WebAssembly supported';
wasm.style.color = 'green';
} else {
wasm.textContent = 'no WebAssembly support';
wasm.style.color = 'red';
}
</script>
<script src=ogvjs-1.8.4/ogv.js></script>
<!--
<script src=video-js/alt/video.core.js></script>
<script src=videojs-http-streaming.js></script>
-->
<script src="node_modules/video.js/dist/video.js"></script>
<script src=videojs-ogvjs.js></script>
<script>
var playerConfig = {
responsive: true,
controlBar: {
volumePanel: {
vertical: true,
inline: false
}
},
techOrder: [ 'html5' ],
html5: {}
};
function can(mime) {
return (typeof MediaSource == 'function') && MediaSource.isTypeSupported(mime);
}
var vp9 = can('video/mp4; codecs="vp09.00.10.08"');
var opus = can('audio/mp4; codecs="opus"');
var aac = can('audio/mp4; codecs="mp4a.40.02');
var mp3 = can('audio/mp3');
//var mp3 = can('audio/mp4; codecs="mp4a.40.34"');
var mse = vp9 && (opus || mp3);
if (mse) {
// enable streaming plugin
playerConfig.html5 = {
vhs: {
overrideNative: true,
useDevicePixelRatio: true
},
nativeAudioTracks: false,
nativeVideoTracks: false
};
console.log('will do mse');
} else {
console.log('wont do mse');
}
var webm = null;
var m3u8 = null;
for (let source of hls1.querySelectorAll('source')) {
if (source.type.startsWith('video/webm')) {
webm = source;
continue;
}
if (source.type == 'application/vnd.apple.mpegurl') {
m3u8 = source;
continue;
}
}
var ogv = webm &&
!mse &&
!hls1.canPlayType(webm.type) &&
(typeof WebAssembly == 'object') &&
(typeof WebAssembly.Module == 'function');
if (ogv) {
console.log('can do ogvjs');
var base = '/misc/hls-test/ogvjs-1.8.4';//new URL('./ogvjs-1.8.4', document.location.pathname)
playerConfig.ogvjs = {
base: base
};
console.log(playerConfig.ogvjs.base);
playerConfig.techOrder.push('ogvjs');
} else {
console.log('wont do ogvjs');
}
videojs.log.level('debug');
hls1.classList.add('video-js');
hls1.classList.add('vjs-default-skin');
var vjs1 = videojs(hls1, playerConfig);
vjs1.on('error', function failover() {
console.log('got error');
var error = vjs1.error();
if (error && error.code == MediaError.MEDIA_ERR_DECODE) {
console.log('saw its a decode error');
// HLS reports this if it can't find a codec it likes
console.log(m3u8);
if (mse && m3u8) {
console.log('going to m3u8: ' + m3u8.getAttribute('src'));
vjs1.src([{
src: m3u8.getAttribute('src'),
type: m3u8.getAttribute('type')
}]);
vjs1.reset();
m3u8 = null;
} else if (webm) {
console.log('going to webm: ' + webm.getAttribute('src'));
vjs1.src([{
src: webm.getAttribute('src'),
type: webm.getAttribute('type')
}]);
vjs1.reset();
webm = null;
}
}
vjs1.off('error', failover);
});
// this fails on Chrome with a blob issue on the HLS player :D
//vjs1.load();
</script>
</body>
</html>

View file

@ -1,231 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS WebM test</title>
<link rel=stylesheet type=text/css href=video-js/video-js.css>
</head>
<body>
<h1>HLS WebM test</h1>
<p id=hls>Checking HLS support...</p>
<p id=mse>Checking MSE VP9 support...</p>
<p id=webm>Checking flat WebM VP8 / Vorbis support...</p>
<p id=wasm>Checking WebAssembly support...</p>
<h2>Caminandes - Llamigos</h2>
<p>HLS with VP9-in-MP4 video and Vorbis-in-WebM or MP3 audio. Flat WebM fallback with ogv.js loader.</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-vorbis-mp3.m3u8>
<source type="video/webm; codecs=&quot;vp8, vorbis&quot;" src=caminandes-llamigos.webm.flat.webm>
<source type="video/quicktime; codecs=&quot;jpeg, mp3&quot;" src=polyphon-jpeg-mp3.mov>
</video>
<p>Desired behavior:</p>
<ul>
<li>Firefox/Chrome: play via MSE with VP9/Opus (working)</li>
<li>Desktop Safari with VP9 support: play via MSE with VP9/AAC or MP3 (currently MP3 fails)</li>
<li>iOS Safari with VP9 support: play native HLS with VP9/AAC or MP3 (works)</li>
<li>Older iOS and desktop Safari without VP9: play via ogv.js with WebM VP8/Vorbis (WebKit issue with some devices, in progress)</li>
<li>Older iOS and desktop Safari without WebAssembly or with JS off: play backup MJPEG :D (HLS will take over but fail without JS)</li>
<li>Very old Firefox/Chrome: play native WebM VP8/Vorbis</li>
</ul>
<!--
<p>HLS with VP9 video and Opus, AAC, and MP3 audio. Flag WebM fallback.</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-opus-aac-mp3.m3u8>
<source type=video/webm src=caminandes-llamigos.webm.flat.webm>
</video>
<p>Expected behavior:</p>
<ul>
<li>Firefox/Chrome: MSE VP9/Opus (AAC for now)</li>
<li>Desktop Safari with VP9 support: MSE VP9/MP3 (AAC for now?)</li>
<li>iOS Safari with VP9 support: HLS VP9/MP3 (AAC for now?)</li>
<li>Older iOS and desktop Safari without VP9: ogv.js VP8/Vorbis</li>
<li>Very old Firefox/Chrome: native WebM VP8/Vorbis</li>
</ul>
-->
<!--
<p>HLS with VP9 video and AAC audio. Flag WebM fallback.</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-aac.m3u8>
<source type=video/webm src=caminandes-llamigos.webm.flat.webm>
</video>
<p>Expected behavior:</p>
<ul>
<li>Firefox/Chrome: MSE VP9/Opus (AAC for now)</li>
<li>Desktop Safari with VP9 support: MSE VP9/MP3 (AAC for now?)</li>
<li>iOS Safari with VP9 support: HLS VP9/MP3 (AAC for now?)</li>
<li>Older iOS and desktop Safari without VP9: ogv.js VP8/Vorbis</li>
<li>Very old Firefox/Chrome: native WebM VP8/Vorbis</li>
</ul>
-->
<script>
if (hls1.canPlayType('application/vnd.apple.mpegurl')) {
hls.textContent = 'native HLS playback supported';
hls.style.color = 'green';
} else {
hls.textContent = 'no native HLS';
hls.style.color = 'red';
}
if (typeof MediaSource == 'function') {
let codecs = [
['VP9-in-MP4', 'video/mp4; codecs="vp09.00.10.08"'],
['Opus-in-WebM', 'audio/webm; codecs="opus"'],
['MP3', 'audio/mp3'],
];
let yes = [];
let no = [];
for (let [name, mime] of codecs) {
if (MediaSource.isTypeSupported(mime)) {
yes.push(name);
} else {
no.push(name);
}
}
if (yes.length == codecs.length) {
mse.textContent = 'MSE supports ' + yes.join(', ');
mse.style.color = 'green';
} else {
mse.textContent = 'MSE supports ' + yes.join(', ') + ' but not ' + no.join(', ');
mse.style.color = 'orange';
}
} else {
mse.textContent = 'MSE not supported';
mse.style.color = 'red';
}
if (hls1.canPlayType('video/webm; codecs="vp8, vorbis"')) {
webm.textContent = 'flat WebM VP8/Vorbis supported';
webm.style.color = 'green';
} else {
webm.textContent = 'flat WebM VP8/Vorbis not supported';
webm.style.color = 'red';
}
if (typeof WebAssembly == 'object') {
wasm.textContent = 'WebAssembly supported';
wasm.style.color = 'green';
} else {
wasm.textContent = 'no WebAssembly support';
wasm.style.color = 'red';
}
</script>
<script src=ogvjs-1.8.4/ogv.js></script>
<!--
<script src=video-js/alt/video.core.js></script>
<script src=videojs-http-streaming.js></script>
-->
<script src="node_modules/video.js/dist/video.js"></script>
<script src=videojs-ogvjs.js></script>
<script>
var playerConfig = {
responsive: true,
controlBar: {
volumePanel: {
vertical: true,
inline: false
}
},
techOrder: [ 'html5' ],
html5: {}
};
function can(mime) {
return (typeof MediaSource == 'function') && MediaSource.isTypeSupported(mime);
}
var vp9 = can('video/mp4; codecs="vp09.00.10.08"');
var opus = can('audio/mp4; codecs="opus"');
var aac = can('audio/mp4; codecs="mp4a.40.02');
var mp3 = can('audio/mp3');
//var mp3 = can('audio/mp4; codecs="mp4a.40.34"');
var mse = vp9 && (opus || mp3);
if (mse) {
// enable streaming plugin
playerConfig.html5 = {
vhs: {
overrideNative: true,
useDevicePixelRatio: true
},
nativeAudioTracks: false,
nativeVideoTracks: false
};
console.log('will do mse');
} else {
console.log('wont do mse');
}
var webm = null;
var m3u8 = null;
for (let source of hls1.querySelectorAll('source')) {
if (source.type.startsWith('video/webm')) {
webm = source;
continue;
}
if (source.type == 'application/vnd.apple.mpegurl') {
m3u8 = source;
continue;
}
}
var ogv = webm &&
!mse &&
!hls1.canPlayType(webm.type) &&
(typeof WebAssembly == 'object') &&
(typeof WebAssembly.Module == 'function');
if (ogv) {
console.log('can do ogvjs');
var base = '/misc/hls-test/ogvjs-1.8.4';//new URL('./ogvjs-1.8.4', document.location.pathname)
playerConfig.ogvjs = {
base: base
};
console.log(playerConfig.ogvjs.base);
playerConfig.techOrder.push('ogvjs');
} else {
console.log('wont do ogvjs');
}
videojs.log.level('debug');
hls1.classList.add('video-js');
hls1.classList.add('vjs-default-skin');
var vjs1 = videojs(hls1, playerConfig);
vjs1.on('error', function failover() {
console.log('got error');
var error = vjs1.error();
if (error && error.code == MediaError.MEDIA_ERR_DECODE) {
console.log('saw its a decode error');
// HLS reports this if it can't find a codec it likes
console.log(m3u8);
if (mse && m3u8) {
console.log('going to m3u8: ' + m3u8.getAttribute('src'));
vjs1.src([{
src: m3u8.getAttribute('src'),
type: m3u8.getAttribute('type')
}]);
vjs1.reset();
m3u8 = null;
} else if (webm) {
console.log('going to webm: ' + webm.getAttribute('src'));
vjs1.src([{
src: webm.getAttribute('src'),
type: webm.getAttribute('type')
}]);
vjs1.reset();
webm = null;
}
}
vjs1.off('error', failover);
});
// this fails on Chrome with a blob issue on the HLS player :D
//vjs1.load();
</script>
</body>
</html>

242
ogv.html
View file

@ -1,242 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS WebM test</title>
<link rel=stylesheet type=text/css href=video-js/video-js.css>
</head>
<body>
<h1>HLS WebM test</h1>
<p id=hls>Checking HLS support...</p>
<p id=mse>Checking MSE VP9 support...</p>
<p id=webm>Checking flat WebM VP8 / Vorbis support...</p>
<p id=wasm>Checking WebAssembly support...</p>
<h2>Caminandes - Llamigos</h2>
<p>HLS with VP9-in-MP4 video with Opus-in-MP4 or MP3 audio. Flat WebM fallback with ogv.js loader.</p>
<video id=hls1 controls width=640 height=360>
<!--<source type=application/vnd.apple.mpegurl src=llamigos-vp9-opus-aac-mp3.m3u8>-->
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-mp3-opus.m3u8>
<!--<source type=application/vnd.apple.mpegurl src=llamigos-vp9-mp3ts-opus.m3u8>-->
<!--<source type=application/vnd.apple.mpegurl src=llamigos-vp9-mp3-vorbis.m3u8>-->
<source type="video/webm; codecs=&quot;vp8, vorbis&quot;" src=caminandes-llamigos.webm.flat.webm>
<source type="video/quicktime; codecs=&quot;jpeg, mp3&quot;" src=polyphon-jpeg-mp3.mov>
</video>
<p>Desired behavior:</p>
<ul>
<li>Firefox/Chrome: play via MSE with VP9/Opus (working)</li>
<li>Desktop Safari with VP9 support: play via MSE with VP9/AAC or MP3 (currently MP3 fails)</li>
<li>iOS Safari with VP9 support: play native HLS with VP9/AAC or MP3 (works)</li>
<li>Older iOS and desktop Safari without VP9: play via ogv.js with WebM VP8/Vorbis (WebKit issue with some devices, in progress)</li>
<li>Older iOS and desktop Safari without WebAssembly or with JS off: play backup MJPEG :D (HLS will take over but fail without JS)</li>
<li>Very old Firefox/Chrome: play native WebM VP8/Vorbis</li>
</ul>
<!--
<p>HLS with VP9 video and Opus, AAC, and MP3 audio. Flag WebM fallback.</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-opus-aac-mp3.m3u8>
<source type=video/webm src=caminandes-llamigos.webm.flat.webm>
</video>
<p>Expected behavior:</p>
<ul>
<li>Firefox/Chrome: MSE VP9/Opus (AAC for now)</li>
<li>Desktop Safari with VP9 support: MSE VP9/MP3 (AAC for now?)</li>
<li>iOS Safari with VP9 support: HLS VP9/MP3 (AAC for now?)</li>
<li>Older iOS and desktop Safari without VP9: ogv.js VP8/Vorbis</li>
<li>Very old Firefox/Chrome: native WebM VP8/Vorbis</li>
</ul>
-->
<!--
<p>HLS with VP9 video and AAC audio. Flag WebM fallback.</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-aac.m3u8>
<source type=video/webm src=caminandes-llamigos.webm.flat.webm>
</video>
<p>Expected behavior:</p>
<ul>
<li>Firefox/Chrome: MSE VP9/Opus (AAC for now)</li>
<li>Desktop Safari with VP9 support: MSE VP9/MP3 (AAC for now?)</li>
<li>iOS Safari with VP9 support: HLS VP9/MP3 (AAC for now?)</li>
<li>Older iOS and desktop Safari without VP9: ogv.js VP8/Vorbis</li>
<li>Very old Firefox/Chrome: native WebM VP8/Vorbis</li>
</ul>
-->
<script>
if (hls1.canPlayType('application/vnd.apple.mpegurl')) {
hls.textContent = 'native HLS playback supported';
hls.style.color = 'green';
} else {
hls.textContent = 'no native HLS';
hls.style.color = 'red';
}
if (typeof MediaSource == 'function') {
let codecs = [
['VP9-in-WebM', 'video/webm; codecs="vp9"'],
['Opus-in-WebM', 'audio/webm; codecs="opus"'],
['Vorbis-in-WebM', 'audio/webm; codecs="vorbis"'],
['VP9-in-MP4', 'video/mp4; codecs="vp09.00.10.08"'],
['Opus-in-MP4', 'audio/mp4; codecs="opus"'],
['MP3 (mp3)', 'audio/mp3'],
['MP3 (mpeg)', 'audio/mpeg'],
];
let yes = [];
let no = [];
for (let [name, mime] of codecs) {
if (MediaSource.isTypeSupported(mime)) {
yes.push(name);
} else {
no.push(name);
}
}
if (yes.length == codecs.length) {
mse.textContent = 'MSE supports ' + yes.join(', ');
mse.style.color = 'green';
} else {
mse.textContent = 'MSE supports ' + yes.join(', ') + ' but not ' + no.join(', ');
mse.style.color = 'orange';
}
} else {
mse.textContent = 'MSE not supported';
mse.style.color = 'red';
}
if (hls1.canPlayType('video/webm; codecs="vp8, vorbis"')) {
webm.textContent = 'flat WebM VP8/Vorbis supported';
webm.style.color = 'green';
} else {
webm.textContent = 'flat WebM VP8/Vorbis not supported';
webm.style.color = 'red';
}
if (typeof WebAssembly == 'object') {
wasm.textContent = 'WebAssembly supported';
wasm.style.color = 'green';
} else {
wasm.textContent = 'no WebAssembly support';
wasm.style.color = 'red';
}
</script>
<script src=ogvjs-1.8.4/ogv.js></script>
<!--
<script src=video-js/alt/video.core.js></script>
<script src=videojs-http-streaming.js></script>
-->
<!--
<script src="node_modules/video.js/dist/video.js"></script>
-->
<script src="node_modules/video.js/dist/alt/video.core.js"></script>
<script src="http-streaming/dist/videojs-http-streaming.js"></script>
<script src=videojs-ogvjs.js></script>
<script>
var playerConfig = {
responsive: true,
controlBar: {
volumePanel: {
vertical: true,
inline: false
}
},
techOrder: [ 'html5' ],
html5: {}
};
function can(mime) {
return (typeof MediaSource == 'function') && MediaSource.isTypeSupported(mime);
}
var vp9 = can('video/mp4; codecs="vp09.00.10.08"');
var opus = can('audio/mp4; codecs="opus"');
var aac = can('audio/mp4; codecs="mp4a.40.02');
var mp3 = can('audio/mp3');
//var mp3 = can('audio/mp4; codecs="mp4a.40.34"');
var mse = vp9 && (opus || mp3);
if (mse) {
// enable streaming plugin
playerConfig.html5 = {
vhs: {
overrideNative: true,
useDevicePixelRatio: true
},
nativeAudioTracks: false,
nativeVideoTracks: false
};
console.log('will do mse');
} else {
console.log('wont do mse');
}
var webm = null;
var m3u8 = null;
for (let source of hls1.querySelectorAll('source')) {
if (source.type.startsWith('video/webm')) {
webm = source;
continue;
}
if (source.type == 'application/vnd.apple.mpegurl') {
m3u8 = source;
continue;
}
}
var ogv = webm &&
!mse &&
!hls1.canPlayType(webm.type) &&
(typeof WebAssembly == 'object') &&
(typeof WebAssembly.Module == 'function');
if (ogv) {
console.log('can do ogvjs');
var base = '/misc/hls-test/ogvjs-1.8.4';//new URL('./ogvjs-1.8.4', document.location.pathname)
playerConfig.ogvjs = {
base: base
};
console.log(playerConfig.ogvjs.base);
playerConfig.techOrder.push('ogvjs');
} else {
console.log('wont do ogvjs');
}
videojs.log.level('debug');
hls1.classList.add('video-js');
hls1.classList.add('vjs-default-skin');
var vjs1 = videojs(hls1, playerConfig);
vjs1.on('error', function failover() {
console.log('got error');
var error = vjs1.error();
if (error && error.code == MediaError.MEDIA_ERR_DECODE) {
console.log('saw its a decode error');
// HLS reports this if it can't find a codec it likes
console.log(m3u8);
if (mse && m3u8) {
console.log('going to m3u8: ' + m3u8.getAttribute('src'));
vjs1.src([{
src: m3u8.getAttribute('src'),
type: m3u8.getAttribute('type')
}]);
vjs1.reset();
m3u8 = null;
} else if (webm) {
console.log('going to webm: ' + webm.getAttribute('src'));
vjs1.src([{
src: webm.getAttribute('src'),
type: webm.getAttribute('type')
}]);
vjs1.reset();
webm = null;
}
}
vjs1.off('error', failover);
});
// this fails on Chrome with a blob issue on the HLS player :D
//vjs1.load();
</script>
</body>
</html>

View file

@ -1,4 +0,0 @@
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a"
h264-in-mp4.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="jpeg,mp4a.40",AUDIO="a1"
jpeg-in-mov.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="jpeg,mp4a.40",AUDIO="a1"
jpeg-in-ts.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.40",AUDIO="a1"
jpeg-in-mp4.m3u8

View file

@ -1,54 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS WebM test with codec</title>
</head>
<body>
<h1>HLS WebM test with codec</h1>
<p>The video will try to load an HLS containing a VP9-in-MP4 variant, with AAC audio, with no fallback:</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-aac-vp9.m3u8>
</video>
<p id=err></p>
<script>
let codes = {
[MediaError.MEDIA_ERR_ABORTED]: 'MEDIA_ERR_ABORTED',
[MediaError.MEDIA_ERR_NETWORK]: 'MEDIA_ERR_NETWORK',
[MediaError.MEDIA_ERR_DECODE]: 'MEDIA_ERR_DECODE',
[MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED]: 'MEDIA_ERR_SRC_NOT_SUPPORTED',
};
hls1.addEventListener('error', function() {
let {code, message} = this.error;
let codeName = codes[code];
err.textContent = `${code} ${codeName}: ${message}`;
});
</script>
<p>Similar with VP8 + AAC</p>
<video id=hls1b controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-aac-vp8.m3u8>
</video>
<p>H.263 in MP4</p>
<video id=hls2 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-only-h263-mp4.m3u8>
</video>
<p>H.263 in mov</p>
<video id=hls3 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-only-h263-mov.m3u8>
</video>
<p>H.263 in 3gp</p>
<video id=hls4 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-only-h263-3gp.m3u8>
</video>
<p>Similar with JPEG</p>
<video id=hls5 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=only-jpeg.m3u8>
</video>
</body>
</html>

View file

@ -1,60 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS WebM test with codec</title>
</head>
<body>
<h1>HLS WebM test with codec</h1>
<p>The video will try to load an HLS containing VP9-in-MP4 and fallback variants, with Opus audio marked as mp4a.ad:</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-opus-mp4.m3u8>
</video>
<p id=err></p>
<p>The video will try to load an HLS containing VP9-in-MP4 and fallback variants, with Opus audio marked as opus:</p>
<video id=hls2 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-opusb-mp4.m3u8>
</video>
<p id=err2></p>
<p>The video will try to load an HLS containing VP9-in-MP4 and fallback variants, with Opus audio marked as Opus:</p>
<video id=hls3 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-opusc-mp4.m3u8>
</video>
<p id=err3></p>
<p>The video will try to load an HLS containing VP9-in-MP4 and fallback variants, with Opus audio marked as Opus also in the FOURCC:</p>
<video id=hls4 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-opusd-mp4.m3u8>
</video>
<p id=err4></p>
<p>Opus audio marked as opus in m3u and Opus in the FOURCC:</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-opuse-mp4.m3u8>
</video>
<script>
let codes = {
[MediaError.MEDIA_ERR_ABORTED]: 'MEDIA_ERR_ABORTED',
[MediaError.MEDIA_ERR_NETWORK]: 'MEDIA_ERR_NETWORK',
[MediaError.MEDIA_ERR_DECODE]: 'MEDIA_ERR_DECODE',
[MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED]: 'MEDIA_ERR_SRC_NOT_SUPPORTED',
};
function errify(hls, err) {
hls.addEventListener('error', function() {
let {code, message} = this.error;
let codeName = codes[code];
err.textContent = `${code} ${codeName}: ${message}`;
});
}
errify(hls1, err1);
errify(hls2, err2);
errify(hls3, err3);
errify(hls4, err4);
</script>
</body>
</html>

101
test.html
View file

@ -1,101 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS WebM test</title>
</head>
<body>
<h1>HLS WebM test</h1>
<p id=hls>Checking HLS support...</p>
<p id=mse>Checking MSE support...</p>
<p id=webm>Checking flat WebM VP8 / Vorbis support...</p>
<p id=webm2>Checking flat WebM generic support...</p>
<p id=wasm>Checking WebAssembly support...</p>
<p>This video will try to load an HLS containing VP9-in-MP4, VP8-in-MP4, and H.264:</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=all-mp4.m3u8>
</video>
<p>HLS with AAC audio and VP9, VP8, and H.264 video:</p>
<video id=hls2 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-aac-mp4.m3u8>
</video>
<p>HLS with AAC audio and VP9/VP8 video only:</p>
<video id=hls3 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-aac-vpx.m3u8>
</video>
<p>HLS with AAC audio and VP8 video only:</p>
<video id=hls4 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-aac-vp8.m3u8>
</video>
<p>Same, with a flat WebM fallback source:</p>
<video id=hls5 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-aac-vp8.m3u8>
<source type="video/webm" src=polyphon-vp8-vorbis.webm>
</video>
<p>Only a flat WebM source (no codec specified):</p>
<video id=flat1 controls width=640 height=360>
<source type="video/webm" src=polyphon-vp8-vorbis.webm>
</video>
<p>Only a flat WebM source, VP8 / Vorbis:</p>
<video id=flat2 controls width=640 height=360>
<source type="video/webm; codecs=&quot;vp8, vorbis&quot;" src=polyphon-vp8-vorbis.webm>
</video>
<p>All non-VPX MP4 formats</p>
<video id=hls99 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-aac-mpeg.m3u8>
</video>
<script>
if (hls1.canPlayType('application/vnd.apple.mpegurl')) {
hls.textContent = 'native HLS playback supported';
hls.style.color = 'green';
} else {
hls.textContent = 'no native HLS';
hls.style.color = 'red';
}
if (typeof MediaSource == 'function') {
if (MediaSource.isTypeSupported('video/mp4; codecs="vp09.00.10.08"') &&
MediaSource.isTypeSupported('audio/mp4; codecs="mp4a.40.02"')) {
mse.textContent = 'MSE supports VP9 & AAC-LC in MP4';
mse.style.color = 'green';
} else {
mse.textContent = 'MSE doesn\'t support one of VP9 or AAC in MP4';
mse.style.color = 'orange';
}
} else {
mse.textContent = 'MSE not supported';
mse.style.color = 'red';
}
if (flat1.canPlayType('video/webm')) {
webm.textContent = 'flat WebM generic supported';
webm.style.color = 'green';
} else {
webm.textContent = 'flat WebM generic not supported';
webm.style.color = 'red';
}
if (flat2.canPlayType('video/webm; codecs="vp8, vorbis"')) {
webm2.textContent = 'flat WebM VP8/Vorbis supported';
webm2.style.color = 'green';
} else {
webm2.textContent = 'flat WebM VP8/Vorbis not supported';
webm2.style.color = 'red';
}
if (typeof WebAssembly == 'object') {
wasm.textContent = 'WebAssembly supported';
wasm.style.color = 'green';
} else {
wasm.textContent = 'no WebAssembly support';
wasm.style.color = 'red';
}
</script>
</body>
</html>

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-vp8.mp4
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-vp8.webm
#EXT-X-ENDLIST

View file

@ -1,40 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Flat VP8 WebM tests</title>
</head>
<body>
<h1>Flat VP8 WebM tests</h1>
<p>WebM VP8/Vorbis marked as <code>video/webm; codecs="vp8, vorbis"</code>:</p>
<video controls width=640 height=360>
<source type="video/webm; codecs=&quot;vp8, vorbis&quot;" src=polyphon-vp8-vorbis.webm>
</video>
<p>WebM VP8/Vorbis marked as <code>video/webm</code>:</p>
<video controls width=640 height=360>
<source type="video/webm" src=polyphon-vp8-vorbis.webm>
</video>
<p>WebM VP8/Vorbis unmarked:</p>
<video controls width=640 height=360 src=polyphon-vp8-vorbis.webm>
</video>
<p>WebM VP8 (no audio) marked as <code>video/webm; codecs="vp8"</code>:</p>
<video controls width=640 height=360>
<source type="video/webm; codecs=&quot;vp8&quot;" src=polyphon-vp8.webm>
</video>
<p>WebM VP8 (no audio) marked as <code>video/webm</code>:</p>
<video controls width=640 height=360>
<source type="video/webm" src=polyphon-vp8.webm>
</video>
<p>WebM VP8 (no audio) unmarked:</p>
<video controls width=640 height=360 src=polyphon-vp8.webm>
</video>
</body>
</html>

View file

@ -1,43 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Flat VP8 tests</title>
</head>
<body>
<h1>Flat WebM test</h1>
<p>WebM VP8/Vorbis marked as such:</p>
<video controls width=640 height=360>
<source type="video/webm; codecs=&quot;vp8, vorbis&quot;" src=polyphon-vp8-vorbis.webm>
</video>
<p>WebM VP8/Vorbis unmarked:</p>
<video controls width=640 height=360 src=polyphon-vp8-vorbis.webm>
</video>
<p>WebM VP8 (no audio) marked as such:</p>
<video controls width=640 height=360>
<source type="video/webm; codecs=&quot;vp8&quot;" src=polyphon-vp8.webm>
</video>
<p>WebM VP8 (no audio) unmarked:</p>
<video controls width=640 height=360 src=polyphon-vp8.webm>
</video>
<p>MP4 VP8 (no audio), marked as vp8 (expected to fail):</p>
<video controls width=640 height=360>
<source type="video/mp4; codecs=&quot;vp8&quot;" src=polyphon-vp8.mp4>
</video>
<p>MP4 VP8 (no audio), marked as vp08:</p>
<video controls width=640 height=360>
<source type="video/mp4; codecs=&quot;vp08&quot;" src=polyphon-vp8.mp4>
</video>
<p>MP4 VP8 (no audio), unmarked:</p>
<video controls width=640 height=360 src=polyphon-vp8.mp4>
</video>
</body>
</html>

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-vp9.mp4
#EXT-X-ENDLIST

View file

@ -1,8 +0,0 @@
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:45
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:40.56,
polyphon-vp9.webm
#EXT-X-ENDLIST

View file

@ -1,57 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Flat VP9 tests</title>
</head>
<body>
<h1>Flat WebM test</h1>
<p>WebM VP9/Opus marked as such:</p>
<video id=flat1 controls width=640 height=360>
<source type="video/webm; codecs=&quot;vp9, opus&quot;" src=polyphon-vp9-opus.webm>
</video>
<p>WebM VP9/Opus unmarked:</p>
<video id=flat2 controls width=640 height=360 src=polyphon-vp9-opus.webm>
</video>
<p>WebM VP9 (no audio) unmarked:</p>
<video id=flat3 controls width=640 height=360 src=polyphon-vp9.webm>
</video>
<p>MP4 VP9/MP3, marked as vp09.00.10.08, mp4a.6b:</p>
<video id=flat4 controls width=640 height=360>
<source type="video/mp4; codecs=&quot;vp09.00.10.08, mp4a.6b&quot;" src=polyphon-vp9-mp3.mp4>
</video>
<p>MP4 VP9/MP3, marked as vp09.00.10.08, mp3:</p>
<video id=flat5 controls width=640 height=360>
<source type="video/mp4; codecs=&quot;vp09.00.10.08, mp3&quot;" src=polyphon-vp9-mp3.mp4>
</video>
<p>MP4 VP9/MP3, marked as vp9, mp3:</p>
<video id=flat6 controls width=640 height=360>
<source type="video/mp4; codecs=&quot;vp9, mp3&quot;" src=polyphon-vp9-mp3.mp4>
</video>
<p>MP4 VP9/MP3, unmarked:</p>
<video id=flat7 controls width=640 height=360 src=polyphon-vp9-mp3.mp4>
</video>
<p>MP4 VP9 (no audio), marked as vp09.00.10.08:</p>
<video id=flat8 controls width=640 height=360>
<source type="video/mp4; codecs=&quot;vp09.00.10.08&quot;" src=polyphon-vp9.mp4>
</video>
<p>MP4 VP9 (no audio), marked as vp9:</p>
<video id=flat9 controls width=640 height=360>
<source type="video/mp4; codecs=&quot;vp9&quot;" src=polyphon-vp9.mp4>
</video>
<p>MP4 VP9 (no audio), unmarked:</p>
<video id=flat10 controls width=640 height=360 src=polyphon-vp9.mp4>
</video>
</body>
</html>

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp9"
vp9-in-webm.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp8"
vp8-in-webm.m3u8

View file

@ -1,6 +0,0 @@
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.40.02"
vp9-in-webm.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.40.02"
vp8-in-webm.m3u8

View file

@ -1,32 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS WebM test with codec</title>
</head>
<p>
<h1>HLS WebM test with codec</h1>
<p>HLS VP9 in WebM</p>
<video id=hls1 controls width=640 height=360>
<source type="application/vnd.apple.mpegurl" src=av-vpx-webm.m3u8>
</video>
<p>HLS VP9 in WebM with long codec</p>
<video id=hls2 controls width=640 height=360>
<source type="application/vnd.apple.mpegurl" src=av-vpx2-webm.m3u8>
</video>
<p>HLS VP9 in WebM, AAC in MP4</p>
<video id=hls3 controls width=640 height=360>
<source type="application/vnd.apple.mpegurl" src=vpx-webm.m3u8>
</video>
<p>HLS VP9 in WebM with long codec, AAC in MP4</p>
<video id=hls4 controls width=640 height=360>
<source type="application/vnd.apple.mpegurl" src=vpx2-webm.m3u8>
</video>
</body>
</html>

View file

@ -1,20 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS WebM test with audio</title>
</head>
<body>
<h1>HLS WebM test with audio</h1>
<p>The video will try to load an HLS containing an VP9-in-MP4 variant and a h264 fallback, and AAC audio:</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-aac-mp4.m3u8>
</video>
<h1>HLS WebM test with audio</h1>
<p>VP9-in-MP4 variant and a h264 fallback, and MP3 audio:</p>
<video id=hls2 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-all-mp4.m3u8>
</video>
</body>
</html>

View file

@ -1,31 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>HLS WebM test with codec</title>
</head>
<p>
<h1>HLS WebM test with codec</h1>
<p>The video will try to load an HLS containing a VP9-in-MP4 and other variants, with AAC audio, with codec string marked for VP9:</p>
<video id=hls1 controls width=640 height=360>
<source type="application/vnd.apple.mpegurl; codecs=&quot;vp09.00.10.08, mp4a.40.02&quot;" src=av-aac-mp4.m3u8>
</video>
<p>Same, but simple codec string:</p>
<video id=hls2 controls width=640 height=360>
<source type="application/vnd.apple.mpegurl; codecs=&quot;vp9, mp4a.40.02&quot;" src=av-aac-mp4.m3u8>
</video>
<p>Same, with codec string asking for H.264:</p>
<video id=hls3 controls width=640 height=360>
<source type="application/vnd.apple.mpegurl; codecs=&quot;avc1.42e00a, mp4a.40.02&quot;" src=av-aac-mp4.m3u8>
</video>
<p>Same, unmarked:</p>
<video id=hls4 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-aac-mp4.m3u8>
</video>
</body>
</html>