This commit is contained in:
Brooke Vibber 2023-02-13 14:05:37 -08:00
commit 43f577bfb9
31 changed files with 2019 additions and 125 deletions

1
.gitignore vendored
View file

@ -14,3 +14,4 @@
*.aac
*.h263
*.log
http-streaming/*

0
3gp.sh Normal file → Executable file
View file

0
3gp2.sh Normal file → Executable file
View file

0
booster.sh Normal file → Executable file
View file

View file

@ -1,54 +1,70 @@
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:11
#EXTINF:10.005397,
#EXT-X-BYTERANGE:160151@0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:10.005900,
#EXT-X-BYTERANGE:175404@0
#EXT-X-BYTERANGE:2624741@0
caminandes-llamigos.webm.audio.mp3
#EXTINF:10.004898,
#EXT-X-BYTERANGE:160151@160151
#EXTINF:10.004900,
#EXT-X-BYTERANGE:174840@175404
#EXT-X-BYTERANGE:2624741@2624741
caminandes-llamigos.webm.audio.mp3
#EXTINF:10.004898,
#EXT-X-BYTERANGE:160152@320302
#EXTINF:10.004900,
#EXT-X-BYTERANGE:174840@350244
#EXT-X-BYTERANGE:2624741@5249482
caminandes-llamigos.webm.audio.mp3
#EXTINF:10.004898,
#EXT-X-BYTERANGE:160151@480454
#EXTINF:10.004578,
#EXT-X-BYTERANGE:174840@525084
#EXT-X-BYTERANGE:2624741@7874223
caminandes-llamigos.webm.audio.mp3
#EXTINF:10.004898,
#EXT-X-BYTERANGE:160151@640605
#EXTINF:10.005056,
#EXT-X-BYTERANGE:174840@699924
#EXT-X-BYTERANGE:2624741@10498964
caminandes-llamigos.webm.audio.mp3
#EXTINF:9.978776,
#EXT-X-BYTERANGE:159734@800756
#EXTINF:9.978611,
#EXT-X-BYTERANGE:174464@874764
#EXT-X-BYTERANGE:2624741@13123705
caminandes-llamigos.webm.audio.mp3
#EXTINF:10.004898,
#EXT-X-BYTERANGE:160151@960490
#EXTINF:10.005222,
#EXT-X-BYTERANGE:174840@1049228
#EXT-X-BYTERANGE:2624741@15748446
caminandes-llamigos.webm.audio.mp3
#EXTINF:10.004898,
#EXT-X-BYTERANGE:160152@1120641
#EXTINF:10.004900,
#EXT-X-BYTERANGE:174840@1224068
#EXT-X-BYTERANGE:2624741@18373187
caminandes-llamigos.webm.audio.mp3
#EXTINF:10.004898,
#EXT-X-BYTERANGE:160151@1280793
#EXTINF:10.004889,
#EXT-X-BYTERANGE:174840@1398908
#EXT-X-BYTERANGE:2624741@20997928
caminandes-llamigos.webm.audio.mp3
#EXTINF:10.004898,
#EXT-X-BYTERANGE:160151@1440944
#EXTINF:10.004744,
#EXT-X-BYTERANGE:174840@1573748
#EXT-X-BYTERANGE:2624741@23622669
caminandes-llamigos.webm.audio.mp3
#EXTINF:9.978776,
#EXT-X-BYTERANGE:159734@1601095
#EXTINF:9.978778,
#EXT-X-BYTERANGE:174464@1748588
#EXT-X-BYTERANGE:2624741@26247410
caminandes-llamigos.webm.audio.mp3
#EXTINF:10.004898,
#EXT-X-BYTERANGE:160151@1760829
#EXTINF:10.005056,
#EXT-X-BYTERANGE:174840@1923052
#EXT-X-BYTERANGE:2624741@28872151
caminandes-llamigos.webm.audio.mp3
#EXTINF:10.004898,
#EXT-X-BYTERANGE:160151@1920980
#EXTINF:10.004733,
#EXT-X-BYTERANGE:174840@2097892
#EXT-X-BYTERANGE:2624741@31496892
caminandes-llamigos.webm.audio.mp3
#EXTINF:10.004898,
#EXT-X-BYTERANGE:160152@2081131
#EXTINF:10.005056,
#EXT-X-BYTERANGE:174840@2272732
#EXT-X-BYTERANGE:2624741@34121633
caminandes-llamigos.webm.audio.mp3
#EXTINF:10.004898,
#EXT-X-BYTERANGE:160151@2241283
#EXTINF:10.004900,
#EXT-X-BYTERANGE:174840@2447572
#EXT-X-BYTERANGE:2624741@36746374
caminandes-llamigos.webm.audio.mp3
#EXTINF:0.119819,
#EXT-X-BYTERANGE:2163@2401434
#EXTINF:0.119822,
#EXT-X-BYTERANGE:2256@2622412
#EXT-X-BYTERANGE:2624741@39371115
caminandes-llamigos.webm.audio.mp3
#EXT-X-ENDLIST

View file

@ -3,53 +3,37 @@
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="caminandes-llamigos.webm.audio.mp3.mp4.mp4",BYTERANGE="755@0"
#EXT-X-MAP:URI="init.mp4"
#EXTINF:10.005896,
#EXT-X-BYTERANGE:163302@755
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0000.mp4
#EXTINF:10.004898,
#EXT-X-BYTERANGE:163302@164057
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0001.mp4
#EXTINF:10.004898,
#EXT-X-BYTERANGE:163303@327359
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0002.mp4
#EXTINF:10.004580,
#EXT-X-BYTERANGE:163302@490662
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0003.mp4
#EXTINF:10.005057,
#EXT-X-BYTERANGE:163302@653964
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0004.mp4
#EXTINF:9.978617,
#EXT-X-BYTERANGE:162877@817266
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0005.mp4
#EXTINF:10.005215,
#EXT-X-BYTERANGE:163302@980143
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0006.mp4
#EXTINF:10.004898,
#EXT-X-BYTERANGE:163303@1143445
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0007.mp4
#EXTINF:10.004898,
#EXT-X-BYTERANGE:163302@1306748
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0008.mp4
#EXTINF:10.004739,
#EXT-X-BYTERANGE:163302@1470050
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0009.mp4
#EXTINF:9.978776,
#EXT-X-BYTERANGE:162877@1633352
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0010.mp4
#EXTINF:10.005057,
#EXT-X-BYTERANGE:163302@1796229
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0011.mp4
#EXTINF:10.004739,
#EXT-X-BYTERANGE:163302@1959531
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0012.mp4
#EXTINF:10.005057,
#EXT-X-BYTERANGE:163303@2122833
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0013.mp4
#EXTINF:10.004898,
#EXT-X-BYTERANGE:163302@2286136
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0014.mp4
#EXTINF:0.119819,
#EXT-X-BYTERANGE:2270@2449438
caminandes-llamigos.webm.audio.mp3.mp4.mp4
caminandes-llamigos.webm.audio.mp3.0015.mp4
#EXT-X-ENDLIST

View file

@ -3,6 +3,7 @@
<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>
@ -15,36 +16,88 @@
<h2>Caminandes - Llamigos</h2>
<p>HLS with AAC audio and VP9-in-MP4 at several resolutions:</p>
<video id=hls1 controls width=640 height=360>
<h3>VP9</h3>
<!--
<p>HLS with AAC-in-MP4 audio and VP9-in-MP4 at several resolutions:</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-aac.m3u8>
</video>
<p>HLS with MP3 audio and VP9-in-MP4 at several resolutions:</p>
<video id=hls1b controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-mp3.m3u8?>
<p>HLS with Opus-in-MP4 audio and VP9-in-MP4 at several resolutions:</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-opus.m3u8>
</video>
-->
<h3>Mixed codecs</h3>
<p>HLS with ((VP9-fMP4 + (Opus-fMP4 | MP3)) | (MJPEG-QuickTime + MP3)):</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-opus-mp3-mjpeg.m3u8>
</video>
<p>HLS with no audio and VP9-in-MP4 at several resolutions:</p>
<video id=hls1c controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9.m3u8>
<h3>VP9 only</h3>
<p>HLS with (VP9-fMP4 + (Opus-fMP4 | MP3)):</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-mp3-opus.m3u8>
</video>
<h2>Short polyphon test</h2>
<h3>MJPEG only</h3>
<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>
<p>HLS standalone (MJPEG-MP3-MP4):</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=standalone-mjpeg-mp3.m3u8>
</video>
<p>HLS standalone (MJPEG-AAC-MP4):</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=standalone-mjpeg-aac.m3u8>
</video>
<p>HLS standalone (MJPEG-noaudio-MP4):</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=standalone-mjpeg.m3u8>
</video>
<p>Same, with a flat WebM fallback source:</p>
<video id=hls3 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=av-aac-mp4.m3u8>
<source type="video/webm" src=polyphon-vp8-vorbis.webm>
<p>HLS standalone (MJPEG-noaudio-QuickTime):</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=standalone-mjpeg-mp3-mov.m3u8>
</video>
<p>HLS standalone (MJPEG-noaudio-QuickTime):</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=standalone-mjpeg-aac-mov.m3u8>
</video>
<p>HLS standalone (MJPEG-noaudio-QuickTime):</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=standalone-mjpeg-mov.m3u8>
</video>
<p>Flat QT with (MJPEG-MP3-QuickTime):</p>
<video controls width=640 height=360>
<source type="video/quicktime" src=standalone-mjpeg-mp3.mov>
</video>
<p>Flat QT with (MJPEG-AAC-QuickTime):</p>
<video controls width=640 height=360>
<source type="video/quicktime" src=standalone-mjpeg-aac.mov>
</video>
<p>Flat QT with (MJPEG-noaudio-QuickTime):</p>
<video controls width=640 height=360>
<source type="video/quicktime" src=standalone-mjpeg.mov>
</video>
<!--
<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>
if (hls1.canPlayType('application/vnd.apple.mpegurl')) {
let video = document.createElement('video');
if (video.canPlayType('application/vnd.apple.mpegurl')) {
hls.textContent = 'native HLS playback supported';
hls.style.color = 'green';
} else {
@ -52,26 +105,63 @@
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';
let video = [];
let audio = [];
if (MediaSource.isTypeSupported('video/webm; codecs="vp8"')) {
video.push('VP8-in-WebM (vp8)');
}
if (MediaSource.isTypeSupported('video/webm; codecs="vp9"')) {
video.push('VP9-in-WebM (vp9)');
}
if (MediaSource.isTypeSupported('video/mp4; codecs="vp09.00.10.08"')) {
video.push('VP9-in-MP4 (vp09)');
}
if (MediaSource.isTypeSupported('video/mp4; codecs="vp9"')) {
video.push('VP9-in-MP4 (vp9)');
}
if (MediaSource.isTypeSupported('audio/mp4; codecs="mp4a.40.02"')) {
audio.push('AAC-in-MP4');
}
if (MediaSource.isTypeSupported('audio/mp4; codecs="mp4a.40.34"')) {
audio.push('MP3-in-MP4 (mp4a.40.34)');
}
if (MediaSource.isTypeSupported('audio/mp4; codecs="mp4a.6b"')) {
audio.push('MP3-in-MP4 (mp4a.6b)');
}
if (MediaSource.isTypeSupported('audio/mp4; codecs="mp3"')) {
audio.push('MP3-in-MP4 (mp3)');
}
if (MediaSource.isTypeSupported('audio/mp4; codecs="opus"')) {
audio.push('Opus-in-MP4');
}
if (MediaSource.isTypeSupported('audio/webm; codecs="opus"')) {
audio.push('Opus-in-WebM');
}
if (MediaSource.isTypeSupported('audio/webm; codecs="vorbis"')) {
audio.push('Vorbis-in-WebM');
}
if (MediaSource.isTypeSupported('audio/mp3')) {
audio.push('MP3 raw');
}
if (video.length > 0 && audio.length > 0) {
mse.style.color = 'green';
} else {
mse.textContent = 'MSE doesn\'t support one of VP9 or AAC in MP4';
mse.style.color = 'orange';
}
mse.textContent = `MSE supports video: ${video.join(', ')}; audio: ${audio.join(',')}`;
} else {
mse.textContent = 'MSE not supported';
mse.style.color = 'red';
}
if (hls2.canPlayType('video/webm')) {
if (video.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 (hls2.canPlayType('video/webm; codecs="vp8, vorbis"')) {
if (video.canPlayType('video/webm; codecs="vp8, vorbis"')) {
webm2.textContent = 'flat WebM VP8/Vorbis supported';
webm2.style.color = 'green';
} else {
@ -85,6 +175,27 @@
wasm.textContent = 'no WebAssembly support';
wasm.style.color = 'red';
}
var playerConfig = {
responsive: true,
controlBar: {
volumePanel: {
vertical: true,
inline: false
}
},
techOrder: [ 'html5' ],
html5: {}
};
videojs.log.level('debug');
if (window.MediaSource && MediaSource.isTypeSupported('video/mp4; codecs="vp09,opus"')) {
for (let video of document.querySelectorAll('video')) {
video.classList.add('video-js');
video.classList.add('vjs-default-skin');
videojs(video, playerConfig);
}
}
</script>
</body>
</html>

0
make-flat.sh Normal file → Executable file
View file

40
make-hls-new.sh Executable file
View file

@ -0,0 +1,40 @@
MOVFLAGS="-movflags +frag_keyframe+empty_moov+default_base_moof+faststart"
HLSFLAGS="-hls_time 10 -hls_list_size 0 -hls_segment_type fmp4 -hls_flags single_file -hls_playlist_type vod"
BITRATE_HI="-b:v 3840k"
BITRATE_LO="-b:v 2560k"
VIDEO_H264="-vcodec h264 $BITRATE_HI"
VIDEO_JPEG="-vcodec mjpeg $BITRATE_HI"
VIDEO_VP8="-vcodec libvpx -cpu-used 4 $BITRATE_HI"
VIDEO_VP9="-vcodec libvpx-vp9 -row-mt 1 -cpu-used 4 $BITRATE_LO"
AUDIO_VORBIS="-acodec libvorbis -ac 2 -ar 44100 -vb 128k"
AUDIO_OPUS="-acodec libopus -ac 2 -ar 48000 -vb 96k"
AUDIO_AAC="-ac 2 -ar 44100 -vb 128k"
AUDIO_MP3="-acodec libmp3lame -ac 2 -ar 44100 -vb 128k"
INFILE=polyphon.ogv
# Flat WebM
ffmpeg -i $INFILE $VIDEO_VP8 $AUDIO_VORBIS -y new-vp8.webm || exit 1
ffmpeg -i $INFILE $VIDEO_VP9 $AUDIO_OPUS -y new-vp9.webm || exit 1
# Flat Quicktime
ffmpeg -i $INFILE -s 1280x720 -vcodec mpeg2video $BITRATE_HI $AUDIO_MP3 $MOVFLAGS -y new-mpeg2.mov || exit 1
ffmpeg -i $INFILE -s 640x360 -vcodec mpeg1video $BITRATE_HI $AUDIO_MP3 $MOVFLAGS -y new-mpeg1.mov || exit 1
ffmpeg -i $INFILE -s 320x180 -vcodec cinepak $BITRATE_HI $AUDIO_MP3 $MOVFLAGS -y new-cinepak.mov || exit 1
#ffmpeg -i $INFILE -s 320x180 -vcodec rpza $BITRATE_HI $AUDIO_MP3 $MOVFLAGS -y new-rpza.mov || exit 1
ffmpeg -i $INFILE -s 320x180 $VIDEO_JPEG $AUDIO_MP3 $MOVFLAGS -y new-mjpeg.mov || exit 1
exit 0
# Audio for HLS
ffmpeg -i $INFILE -vn $AUDIO_AAC $HLSFLAGS -hls_segment_filename new-aac.mp4 -y new-aac.m3u8 || exit 1
ffmpeg -i $INFILE -vn $AUDIO_OPUS $HLSFLAGS -hls_segment_filename new-opus.mp4 -y new-opus.m3u8 || exit 1
# Video for HLS
ffmpeg -i $INFILE -an $VIDEO_VP9 $HLSFLAGS -hls_segment_filename new-vp9.mp4 -y new-vp9.m3u8 || exit 1
ffmpeg -i $INFILE -an $VIDEO_JPEG $HLSFLAGS -hls_segment_filename new-jpeg.mp4 -y new-jpeg.m3u8 || exit 1
ffmpeg -i $INFILE -an -vcodec mpeg2video $BITRATE_HI $HLSFLAGS -hls_segment_filename new-mpeg2.mp4 -y new-mpeg2.m3u8 || exit 1
ffmpeg -i $INFILE -an -vcodec mpeg1video $BITRATE_HI $HLSFLAGS -hls_segment_filename new-mpeg1.mp4 -y new-mpeg1.m3u8 || exit 1

0
make-hls.sh Normal file → Executable file
View file

2
make-hls2.sh Normal file → Executable file
View file

@ -15,7 +15,6 @@ AUDIO_MP3="-acodec libmp3lame -ac 2 -ar 44100 -vb 128k"
AUDIO_MP2="-acodec mp2 -ac 2 -ar 44100 -vb 128k"
AUDIO_ALAC="-acodec alac -sample_fmt s16 -ac 1 -ar 22050"
if false
then
ffmpeg -i polyphon.ogv -vn $AUDIO_MP3 -y polyphon-mp3.mp3
@ -23,6 +22,7 @@ ffmpeg -i polyphon.ogv -vn $AUDIO_MP3 $MOVFLAGS -y polyphon-mp3.mp4
ffmpeg -i polyphon.ogv -vn $AUDIO_AAC $MOVFLAGS -y polyphon-aac.mp4
ffmpeg -i polyphon.ogv -vn $AUDIO_OPUS -y polyphon-opus.webm
ffmpeg -i polyphon.ogv -vn $AUDIO_OPUS $MOVFLAGS -y polyphon-opus.mp4
ffmpeg -i polyphon.ogv -vn $AUDIO_OPUS $MOVFLAGS -tag:a Opus -y polyphon-opus-tagged.mp4
ffmpeg -i polyphon.ogv -vn $AUDIO_VORBIS $MOVFLAGS -y polyphon-vorbis.mp4
ffmpeg -i polyphon.ogv -vn $AUDIO_MP2 $MOVFLAGS -y polyphon-mp2.mp4
ffmpeg -i polyphon.ogv -vn $AUDIO_ALAC $MOVFLAGS -y polyphon-alac.mp4

40
make-standalone.sh Executable file
View file

@ -0,0 +1,40 @@
MOVFLAGS="-movflags +frag_keyframe+empty_moov+default_base_moof+faststart"
HLSFLAGS="-hls_time 10 -hls_list_size 0 -hls_segment_type fmp4 -hls_flags single_file -hls_playlist_type vod"
RES_MAIN="-s 854x480"
RES_SMALL="-s 256x144"
BITRATE_HI="-b:v 1024k"
BITRATE_LO="-b:v 768k"
VIDEO_H264="-vcodec h264 $BITRATE_HI"
VIDEO_JPEG="-vcodec mjpeg $BITRATE_LO -s 426x240"
VIDEO_VP8="-vcodec libvpx -cpu-used 4 $BITRATE_HI"
VIDEO_VP9="-vcodec libvpx-vp9 -row-mt 1 -cpu-used 4 $BITRATE_LO"
AUDIO_VORBIS="-acodec libvorbis -ac 2 -ar 44100 -vb 128k"
AUDIO_OPUS="-acodec libopus -ac 2 -ar 48000 -vb 96k"
AUDIO_MP3="-acodec libmp3lame -ac 2 -ar 44100 -vb 128k"
AUDIO_AAC="-ac 2 -ar 44100 -vb 128k"
#INFILE=polyphon.ogv
INFILE=caminandes-llamigos.webm
# Flat WebM
ffmpeg -i $INFILE $RES_MAIN $VIDEO_VP9 $AUDIO_OPUS -y standalone-vp9-opus.webm || exit 1
ffmpeg -i $INFILE $RES_MAIN $VIDEO_VP9 -an -y standalone-vp9.webm || exit 1
ffmpeg -i $INFILE $RES_MAIN $VIDEO_VP8 $AUDIO_VORBIS -y standalone-vp8-vorbis.webm || exit 1
ffmpeg -i $INFILE $RES_MAIN $VIDEO_VP8 -an -y standalone-vp8.webm || exit 1
# Flat MJPEG+MP3/AAC/none mov
ffmpeg -i $INFILE $RES_SMALL $VIDEO_JPEG -an $MOVFLAGS -y standalone-mjpeg.mov || exit 1
ffmpeg -i $INFILE $RES_SMALL $VIDEO_JPEG $AUDIO_MP3 $MOVFLAGS -y standalone-mjpeg-mp3.mov || exit 1
ffmpeg -i $INFILE $RES_SMALL $VIDEO_JPEG $AUDIO_AAC $MOVFLAGS -y standalone-mjpeg-aac.mov || exit 1
# Standalone HLS
ffmpeg -i $INFILE $RES_SMALL $VIDEO_JPEG $AUDIO_AAC $HLSFLAGS -hls_segment_filename standalone-mjpeg-aac.mp4 -y standalone-mjpeg-aac.m3u8 || exit 1
ffmpeg -i $INFILE $RES_SMALL $VIDEO_JPEG $AUDIO_MP3 $HLSFLAGS -hls_segment_filename standalone-mjpeg-mp3.mp4 -y standalone-mjpeg-mp3.m3u8 || exit 1
ffmpeg -i $INFILE $RES_SMALL $VIDEO_JPEG -an $HLSFLAGS -hls_segment_filename standalone-mjpeg.mp4 -y standalone-mjpeg.m3u8 || exit 1
ffmpeg -i $INFILE $RES_MAIN $VIDEO_VP9 $AUDIO_AAC $HLSFLAGS -hls_segment_filename standalone-vp9-aac.mp4 -y standalone-vp9-aac.m3u8 || exit 1
ffmpeg -i $INFILE $RES_MAIN $VIDEO_VP9 $AUDIO_MP3 $HLSFLAGS -hls_segment_filename standalone-vp9-mp3.mp4 -y standalone-vp9-mp3.m3u8 || exit 1
ffmpeg -i $INFILE $RES_MAIN $VIDEO_VP9 -an $HLSFLAGS -hls_segment_filename standalone-vp9.mp4 -y standalone-vp9.m3u8 || exit 1

0
mov.sh Normal file → Executable file
View file

0
mp4.sh Normal file → Executable file
View file

0
mpeg.sh Normal file → Executable file
View file

207
new.html Normal file
View file

@ -0,0 +1,207 @@
<!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>HLS with VP9-in-MP4 video with Opus-in-MP4 or AAC audio.</p>
<video id=hls1 controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=new.m3u8>
<source type="video/webm; codecs=&quot;vp8, vorbis&quot;" src=caminandes-llamigos.webm.flat.webm>
<source type="video/quicktime; codecs=&quot;jpeg, mp3&quot;" src=polyphon-jpeg-mp3.mov>
</video>
<p>Flat WebM VP8/Vorbis</p>
<video id=webm controls width=640 height=360>
<source type="video/webm; codecs=&quot;vp8, vorbis&quot;" src=new-vp8.webm>
</video>
<p>Flat Quicktime MJPEG/MP3</p>
<video id=mjpeg controls width=640 height=360>
<source type="video/quicktime" src=new-mjpeg.mov>
</video>
<p>Flat Quicktime MPEG-2</p>
<video id=mjpeg controls width=640 height=360>
<source type="video/quicktime" src=new-mpeg2.mov>
</video>
<p>Flat Quicktime MPEG-1</p>
<video id=mjpeg controls width=640 height=360>
<source type="video/quicktime" src=new-mpeg1.mov>
</video>
<p>Flat Quicktime Cinepak</p>
<video id=mjpeg controls width=640 height=360>
<source type="video/quicktime" src=new-cinepak.mov>
</video>
<p>HLS MJPEG MP4 alone (no audio)</p>
<video id=mjpeg-hls controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=new-jpeg.m3u8>
</video>
<p>Flat MJPEG MP4 alone (no audio)</p>
<video id=mjpeg-hls controls width=640 height=360>
<source type=video/mp4 src=new-jpeg.mp4>
</video>
<p>HLS MPEG-1 MP4 alone (no audio)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=new-mpeg1.m3u8>
</video>
<p>Flat MPEG-1 MP4 alone (no audio)</p>
<video controls width=640 height=360>
<source type=video/mp4 src=new-mpeg1.mp4>
</video>
<p>HLS MPEG-2 MP4 alone (no audio)</p>
<video controls width=640 height=360>
<source type=application/vnd.apple.mpegurl src=new-mpeg2.m3u8>
</video>
<p>Flat MPEG-2 MP4 alone (no audio)</p>
<video controls width=640 height=360>
<source type=video/mp4 src=new-mpeg2.mp4>
</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') {
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"'],
];
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="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 type="text/disabled">
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"');
console.log({
vp9, opus, aac
})
var mse = vp9 && (opus || aac);
if (mse) {
// enable streaming plugin
playerConfig.html5 = {
vhs: {
overrideNative: true,
useDevicePixelRatio: true
},
nativeAudioTracks: false,
nativeVideoTracks: false
};
console.log('will do mse');
var m3u8 = null;
for (let source of hls1.querySelectorAll('source')) {
if (source.type == 'application/vnd.apple.mpegurl') {
m3u8 = source;
continue;
}
}
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;
}
}
vjs1.off('error', failover);
});
}
</script>
</body>
</html>

234
ogv-aac.html Normal file
View file

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

231
ogv-vorbis.html Normal file
View file

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

View file

@ -15,10 +15,10 @@
<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>
<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-opus-aac-mp3.m3u8>-->
<source type=application/vnd.apple.mpegurl src=llamigos-vp9-mp3-opus.m3u8>
<!--<source type=application/vnd.apple.mpegurl src=llamigos-vp9-mp3ts-opus.m3u8>-->
<!--<source type=application/vnd.apple.mpegurl src=llamigos-vp9-mp3-vorbis.m3u8>-->
<source type="video/webm; codecs=&quot;vp8, vorbis&quot;" src=caminandes-llamigos.webm.flat.webm>
@ -79,9 +79,13 @@
}
if (typeof MediaSource == 'function') {
let codecs = [
['VP9-in-MP4', 'video/mp4; codecs="vp09.00.10.08"'],
['VP9-in-WebM', 'video/webm; codecs="vp9"'],
['Opus-in-WebM', 'audio/webm; codecs="opus"'],
['MP3', 'audio/mp3'],
['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 = [];
@ -123,8 +127,12 @@
<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 = {

View file

@ -25,6 +25,17 @@
</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',
@ -42,6 +53,7 @@
errify(hls1, err1);
errify(hls2, err2);
errify(hls3, err3);
errify(hls4, err4);
</script>
</body>

Some files were not shown because too many files have changed in this diff Show more