diff --git a/extract-playlist.php b/extract-playlist.php index 263d26d..36c1f35 100644 --- a/extract-playlist.php +++ b/extract-playlist.php @@ -773,7 +773,9 @@ if ( $ext === '.mp3' ) { } else { die( "Unexpected file extension $ext\n" ); } -$segments = consolidate( $target, $segments ); +if ( $ext === '.mp3' ) { + $segments = consolidate( $target, $segments ); +} /* foreach ( $segments as $key => $segment ) { diff --git a/fmp4-tracks.html b/fmp4-tracks.html index a0cbaa1..ffd63ce 100644 --- a/fmp4-tracks.html +++ b/fmp4-tracks.html @@ -10,49 +10,7 @@

Caminandes - Llamigos

-

back to main fmp4 entryy

- -

Full fallbacks

- -

WebM VP9 and VP8 in front, HLS with VP9/MJPEG video and Opus/MP3 audio behind.

- - -

Single video codecs

- -

HLS VP9 + Opus/MP3:

- - -

HLS Motion-JPEG.mov + Opus/MP3:

- - -

HLS H.263.mov + Opus/MP3:

- - -

HLS H.263.3gp + Opus/MP3:

- - -

HLS MPEG-4 Visual + Opus/MP3:

- - -

HLS H.264 + Opus/MP3:

- - +

back to main fmp4 entry

Component tracks

HLS VP9 in fMP4:

@@ -65,11 +23,6 @@ -

HLS h.263.mov in fMP4:

- -

HLS h.263.3gp in fMP4:

-

HLS MP3:

+

HLS MP3 raw:

+

HLS MP3 QuickTime .mov:

+ + +

HLS MP3 .mp4:

+ + \ No newline at end of file diff --git a/fmp4.html b/fmp4.html index 91aa47e..1b539dd 100644 --- a/fmp4.html +++ b/fmp4.html @@ -10,16 +10,42 @@

Caminandes - Llamigos

-

Full fallbacks

+ -

HLS with VP9/MJPEG video tracks and Opus/MP3 audio tracks.

+

With fallbacks

+ +

HLS with VP9/MJPEG video tracks and Opus/MP3 audio tracks. Video.js enabled to provide HLS-over-MSE for Chrome/Firefox.

-

see full fmp4 track variants list

+

Current behavior:

+ @@ -32,22 +58,33 @@ inline: false } }, - techOrder: [ 'html5' ], - html5: {} + html5: { + vhs: { + // Currently the MP3 audio track fails in Safari + // and it doesn't grok the Opus + // Either fix MP3 handling in vhs or use AAC. + // Switching to fragmented QuickTime ;) + // seems to be helping maybe? + overrideNative: false + } + }, }; videojs.log.level('debug'); - console.log('hey'); - console.log(MediaSource); - console.log(MediaSource.isTypeSupported('video/mp4; codecs="vp09.00.41.08,opus"')); - if (window.MediaSource && MediaSource.isTypeSupported('video/mp4; codecs="vp09.00.41.08,opus"')) { - console.log('yeah'); + console.log(typeof MediaSource) + if (typeof MediaSource !== 'undefined') { + //let vp9 = MediaSource.isTypeSupported('video/mp4; codecs="vp09.00.41.08"'); + //let opus = MediaSource.isTypeSupported('video/mp4; codecs="opus"'); + //let mp3 = MediaSource.isTypeSupported('audio/mpeg'); + //if (vp9 && (opus || mp3)) { + for (let video of document.querySelectorAll('video')) { - console.log(video); video.classList.add('video-js'); video.classList.add('vjs-default-skin'); videojs(video, playerConfig); } + + // } } diff --git a/make-fmp4.sh b/make-fmp4.sh index 7080115..d5305d2 100755 --- a/make-fmp4.sh +++ b/make-fmp4.sh @@ -7,7 +7,7 @@ BITRATE_LO="-b:v 1000k" SIZE_MAIN="-s 854x480" SIZE_H263="-s 352x288" -SIZE_SMALL="-s 212x120" +SIZE_SMALL="-s 256x144" VIDEO_H264="-vcodec h264 -g 240 $BITRATE_HI $SIZE_MAIN" VIDEO_MPEG4="-vcodec mpeg4 -g 240 $BITRATE_HI $SIZE_MAIN" @@ -16,8 +16,8 @@ VIDEO_MJPEG="-vcodec mjpeg $BITRATE_HI $SIZE_SMALL" VIDEO_VP9="-vcodec libvpx-vp9 -tile-columns 2 -row-mt 1 -cpu-used 3 -g 240 $BITRATE_LO $SIZE_MAIN" AUDIO_OPUS="-acodec libopus -ac 2 -ar 48000 -ab 96k" -AUDIO_AAC="-ac 2 -ar 44100 -ab 128k" -AUDIO_MP3="-acodec libmp3lame -ac 2 -ar 44100 -ab 128k" +AUDIO_AAC="-ac 2 -ar 48000 -ab 128k" +AUDIO_MP3="-acodec libmp3lame -ac 2 -ar 48000 -ab 128k" INFILE=caminandes-llamigos.webm @@ -25,6 +25,8 @@ set -e # Audio for HLS #ffmpeg -i $INFILE -vn $AUDIO_MP3 -y fmp4.audio.mpeg.mp3 +#ffmpeg -i $INFILE -vn $AUDIO_MP3 $AUDFLAGS -y fmp4.audio.mpeg.mp4 +#ffmpeg -i $INFILE -vn $AUDIO_MP3 $AUDFLAGS -y fmp4.audio.mpeg.mov #ffmpeg -i $INFILE -vn $AUDIO_AAC $AUDFLAGS -y fmp4.audio.aac.mp4 #ffmpeg -i $INFILE -vn $AUDIO_OPUS $AUDFLAGS -y fmp4.audio.opus.mp4 @@ -49,6 +51,8 @@ set -e # Playlist processing php extract-playlist.php fmp4.audio.mpeg.mp3 > fmp4.audio.mpeg.mp3.m3u8 +php extract-playlist.php fmp4.audio.mpeg.mp4 > fmp4.audio.mpeg.mp4.m3u8 +php extract-playlist.php fmp4.audio.mpeg.mov > fmp4.audio.mpeg.mov.m3u8 php extract-playlist.php fmp4.audio.aac.mp4 > fmp4.audio.aac.mp4.m3u8 php extract-playlist.php fmp4.audio.opus.mp4 > fmp4.audio.opus.mp4.m3u8 php extract-playlist.php fmp4.480p.vp9.mp4 > fmp4.480p.vp9.mp4.m3u8 @@ -58,17 +62,21 @@ php extract-playlist.php fmp4.288p.h263.3gp > fmp4.288p.h263.3gp.m3u8 php extract-playlist.php fmp4.120p.mjpeg.mp4 > fmp4.120p.mjpeg.mp4.m3u8 php extract-playlist.php fmp4.120p.mjpeg.mov > fmp4.120p.mjpeg.mov.m3u8 -php meta-playlist.php fmp4 audio.opus.mp4 audio.mpeg.mp3 480p.vp9.mp4 > fmp4.vp9.m3u8 -php meta-playlist.php fmp4 audio.opus.mp4 audio.mpeg.mp3 480p.h264.mp4 > fmp4.h264.m3u8 -php meta-playlist.php fmp4 audio.opus.mp4 audio.mpeg.mp3 480p.mpeg4.mp4 > fmp4.mpeg4.m3u8 -php meta-playlist.php fmp4 audio.opus.mp4 audio.mpeg.mp3 288p.h263.3gp > fmp4.h263.3gp.m3u8 -php meta-playlist.php fmp4 audio.opus.mp4 audio.mpeg.mp3 288p.h263.mov > fmp4.h263.mov.m3u8 -php meta-playlist.php fmp4 audio.opus.mp4 audio.mpeg.mp3 120p.mjpeg.mp4 > fmp4.mjpeg.m3u8 -php meta-playlist.php fmp4 audio.opus.mp4 audio.mpeg.mp3 120p.mjpeg.mov > fmp4.mjpeg.mov.m3u8 +MPEG_TRACK=audio.mpeg.mp3 +#MPEG_TRACK=audio.mpeg.mov +#MPEG_TRACK=audio.mpeg.mp4 -php meta-playlist.php fmp4 audio.opus.mp4 audio.mpeg.mp3 480p.vp9.mp4 480p.h264.mp4 > fmp4.vp9-h264.m3u8 -php meta-playlist.php fmp4 audio.opus.mp4 audio.mpeg.mp3 480p.vp9.mp4 480p.mpeg4.mp4 > fmp4.vp9-mpeg4.m3u8 -php meta-playlist.php fmp4 audio.opus.mp4 audio.mpeg.mp3 480p.vp9.mp4 288p.h263.3gp > fmp4.vp9-h263.3gp.m3u8 -php meta-playlist.php fmp4 audio.opus.mp4 audio.mpeg.mp3 480p.vp9.mp4 288p.h263.mov > fmp4.vp9-h263.mov.m3u8 -php meta-playlist.php fmp4 audio.opus.mp4 audio.mpeg.mp3 480p.vp9.mp4 120p.mjpeg.mp4 > fmp4.vp9-mjpeg.m3u8 -php meta-playlist.php fmp4 audio.opus.mp4 audio.mpeg.mp3 480p.vp9.mp4 120p.mjpeg.mov > fmp4.vp9-mjpeg.mov.m3u8 +php meta-playlist.php fmp4 audio.opus.mp4 $MPEG_TRACK 480p.vp9.mp4 > fmp4.vp9.m3u8 +php meta-playlist.php fmp4 audio.opus.mp4 $MPEG_TRACK 480p.h264.mp4 > fmp4.h264.m3u8 +php meta-playlist.php fmp4 audio.opus.mp4 $MPEG_TRACK 480p.mpeg4.mp4 > fmp4.mpeg4.m3u8 +php meta-playlist.php fmp4 audio.opus.mp4 $MPEG_TRACK 288p.h263.3gp > fmp4.h263.3gp.m3u8 +php meta-playlist.php fmp4 audio.opus.mp4 $MPEG_TRACK 288p.h263.mov > fmp4.h263.mov.m3u8 +php meta-playlist.php fmp4 audio.opus.mp4 $MPEG_TRACK 120p.mjpeg.mp4 > fmp4.mjpeg.m3u8 +php meta-playlist.php fmp4 audio.opus.mp4 $MPEG_TRACK 120p.mjpeg.mov > fmp4.mjpeg.mov.m3u8 + +php meta-playlist.php fmp4 audio.opus.mp4 $MPEG_TRACK 480p.vp9.mp4 480p.h264.mp4 > fmp4.vp9-h264.m3u8 +php meta-playlist.php fmp4 audio.opus.mp4 $MPEG_TRACK 480p.vp9.mp4 480p.mpeg4.mp4 > fmp4.vp9-mpeg4.m3u8 +php meta-playlist.php fmp4 audio.opus.mp4 $MPEG_TRACK 480p.vp9.mp4 288p.h263.3gp > fmp4.vp9-h263.3gp.m3u8 +php meta-playlist.php fmp4 audio.opus.mp4 $MPEG_TRACK 480p.vp9.mp4 288p.h263.mov > fmp4.vp9-h263.mov.m3u8 +php meta-playlist.php fmp4 audio.opus.mp4 $MPEG_TRACK 480p.vp9.mp4 120p.mjpeg.mp4 > fmp4.vp9-mjpeg.m3u8 +php meta-playlist.php fmp4 audio.opus.mp4 $MPEG_TRACK 480p.vp9.mp4 120p.mjpeg.mov > fmp4.vp9-mjpeg.mov.m3u8 diff --git a/meta-playlist.php b/meta-playlist.php index 6d69b89..7c41d7a 100644 --- a/meta-playlist.php +++ b/meta-playlist.php @@ -7,36 +7,40 @@ $audio = []; $video = []; $audioCodecs = [ - 'mpeg' => 'mp4a.40.34', + //'mpeg' => 'mp4a.40.34', // (this seems wrong but it works for now) + 'mpeg' => 'mp4a.6b', // should work! + //'mpeg' => 'mp3', // doesn't seem to work 'aac' => 'mp4a.40.2', 'opus' => 'opus', ]; // @fixme use correct settings based on the file $videoCodecs = [ - 'vp9' => 'vp09.00.10.08', + 'vp9' => 'vp09.00.41.08', 'h264' => 'avc1.42e00a', - //'mpeg4' => 'mp4v.20.9', // fail? //'mpeg4' => 'mp4v.20', // Lies for desktop safari -// 'mpeg4' => 'avc1', // lies -// 'h263' => 'avc1', // lies + //'mpeg4' => 'avc1', // lies + //'h263' => 'avc1', // lies // truths -/* - 'mjpeg' => 'jpeg', // works on current mac & ios 13, but not ios 10 - 'h263' => 's263', - 'mpeg4' => 'mp4v', -*/ + //'mjpeg' => 'jpeg', // works on current mac & iOS 16, but not iOS 10 + //'h263' => 's263', // fail? or should it be s263? + //'mpeg4' => 'mp4v.20.9', // fail? - // These lies work on iOS 10 and iOS 13+ too + // These lies work on current mac & and iOS 16, but not iOS 10 + //'h263' => 'jpeg', // lies + //'mpeg4' => 'jpeg', // lies + + // none of them seem to work on iOS 12! + + // These lies work on iOS 10 and iOS 16 too 'mjpeg' => 'avc1.42e00a', // lies 'h263' => 'avc1.42e00a', // lies 'mpeg4' => 'avc1.42e00a', // lies - // none of them seem to work on iOS 12! ]; diff --git a/video-js/video.js b/video-js/video.js index 75cd19b..f613f42 100644 --- a/video-js/video.js +++ b/video-js/video.js @@ -56492,6 +56492,7 @@ } this.logger_('Received non QUOTA_EXCEEDED_ERR on append', error); + this.logger_('it was ' + error.code); this.error(type + " append of " + bytes.length + "b failed for segment " + ("#" + segmentInfo.mediaIndex + " in playlist " + segmentInfo.playlist.id)); // If an append errors, we often can't recover. // (see https://w3c.github.io/media-source/#sourcebuffer-append-error). //