wip
This commit is contained in:
parent
4affa7315f
commit
4dc40de805
93 changed files with 1 additions and 2511 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,5 +1,6 @@
|
|||
.DS_Store
|
||||
*.log
|
||||
*.mbtree
|
||||
standalone-*.*
|
||||
polyphon-*.*
|
||||
new-*.*
|
||||
|
|
36
3gp.html
36
3gp.html
|
@ -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
19
3gp.sh
|
@ -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
|
31
3gp2.html
31
3gp2.html
|
@ -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
12
3gp2.sh
|
@ -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
|
51
alac.html
51
alac.html
|
@ -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="vp09.00.10.08,alac""" 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>
|
16
all-mp4.m3u8
16
all-mp4.m3u8
|
@ -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
|
|
@ -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
|
10
all.m3u8
10
all.m3u8
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
96
audio.html
96
audio.html
|
@ -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>
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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="vp8, vorbis"" 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>
|
82
flat.html
82
flat.html
|
@ -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="vp9, opus"" src=polyphon-vp9-opus.webm>
|
||||
<source type="video/webm; codecs="vp8, vorbis"" src=polyphon-vp8-vorbis.webm>
|
||||
<source type="video/mp4; codecs="avc1.640032, mp4a.40"" 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="vp09.00.10.08, mp4a.40"" src=polyphon-vp9-aac.mp4>
|
||||
<source type="video/mp4; codecs="avc1.640032, mp4a.40"" 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="vp09.00.10.08, mp4a.6b"" 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="avc1.640032, mp4a.40"" 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>
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
34
jpeg.html
34
jpeg.html
|
@ -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="jpeg"" src=polyphon-jpeg.mp4>
|
||||
</video>
|
||||
<p>Flat JPEG-in-MOV:</p>
|
||||
<video id=flat2 controls width=640 height=360>
|
||||
<source type="video/quicktime; codecs="jpeg"" 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="jpeg"" src=polyphon-jpeg-aac.mov>
|
||||
</video>
|
||||
</body>
|
||||
</html>
|
|
@ -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
|
|
@ -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
|
45
mov.html
45
mov.html
|
@ -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
28
mov.sh
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
70
mp3.html
70
mp3.html
|
@ -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>
|
40
mp4.html
40
mp4.html
|
@ -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
27
mp4.sh
|
@ -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
|
27
mpeg.html
27
mpeg.html
|
@ -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>
|
5
mpeg.sh
5
mpeg.sh
|
@ -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
|
|
@ -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
|
|
@ -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
150
new.html
|
@ -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="vp9, opus"" src=new-vp9.webm>
|
||||
<source type="video/webm; codecs="vp8, vorbis"" src=new-vp8.webm>
|
||||
<source type="video/quicktime; codecs="jpeg, mp4a.6b"" 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="vp9, opus"" src=new-vp9.webm>
|
||||
</video>
|
||||
|
||||
<p>Flat WebM VP8/Vorbis</p>
|
||||
<video controls width=640 height=360>
|
||||
<source type="video/webm; codecs="vp8, vorbis"" src=new-vp8.webm>
|
||||
</video>
|
||||
|
||||
<p>Flat Quicktime MJPEG/MP3</p>
|
||||
<video controls width=640 height=360>
|
||||
<source type="video/quicktime; codecs="jpeg, mp4a.6b"" 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>
|
10
new.m3u8
10
new.m3u8
|
@ -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
|
234
ogv-aac.html
234
ogv-aac.html
|
@ -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="vp8, vorbis"" src=caminandes-llamigos.webm.flat.webm>
|
||||
<source type="video/quicktime; codecs="jpeg, mp3"" 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>
|
231
ogv-vorbis.html
231
ogv-vorbis.html
|
@ -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="vp8, vorbis"" src=caminandes-llamigos.webm.flat.webm>
|
||||
<source type="video/quicktime; codecs="jpeg, mp3"" 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
242
ogv.html
|
@ -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="vp8, vorbis"" src=caminandes-llamigos.webm.flat.webm>
|
||||
<source type="video/quicktime; codecs="jpeg, mp3"" 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>
|
|
@ -1,4 +0,0 @@
|
|||
#EXTM3U
|
||||
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a"
|
||||
h264-in-mp4.m3u8
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
54
only.html
54
only.html
|
@ -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>
|
60
opus.html
60
opus.html
|
@ -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
101
test.html
|
@ -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="vp8, vorbis"" 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>
|
|
@ -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
|
|
@ -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
|
|
@ -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="vp8, vorbis"" 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="vp8"" 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>
|
43
vp8.html
43
vp8.html
|
@ -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="vp8, vorbis"" 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="vp8"" 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="vp8"" 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="vp08"" 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>
|
|
@ -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
|
|
@ -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
|
57
vp9.html
57
vp9.html
|
@ -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="vp9, opus"" 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="vp09.00.10.08, mp4a.6b"" 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="vp09.00.10.08, mp3"" 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="vp9, mp3"" 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="vp09.00.10.08"" 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="vp9"" 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>
|
|
@ -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
|
|
@ -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
|
32
webm.html
32
webm.html
|
@ -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>
|
|
@ -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>
|
|
@ -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="vp09.00.10.08, mp4a.40.02"" 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="vp9, mp4a.40.02"" 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="avc1.42e00a, mp4a.40.02"" 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>
|
Loading…
Reference in a new issue