TheDJ has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/349622 )
Change subject: TMH: Add support for MP3 files ...................................................................... TMH: Add support for MP3 files Bug: T115170 Change-Id: I2b59f828d70a961e34b58414c24bbff0098b979f --- M MwEmbedModules/EmbedPlayer/EmbedPlayer.config.php M MwEmbedModules/EmbedPlayer/resources/mw.EmbedTypes.js M MwEmbedModules/EmbedPlayer/resources/mw.processEmbedPlayers.js M TimedMediaHandler.hooks.php M TimedMediaHandler.php A handlers/Mp3Handler/Mp3Handler.php M i18n/en.json M i18n/qqq.json 8 files changed, 81 insertions(+), 18 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/TimedMediaHandler refs/changes/22/349622/1 diff --git a/MwEmbedModules/EmbedPlayer/EmbedPlayer.config.php b/MwEmbedModules/EmbedPlayer/EmbedPlayer.config.php index af32b4d..59fa159 100644 --- a/MwEmbedModules/EmbedPlayer/EmbedPlayer.config.php +++ b/MwEmbedModules/EmbedPlayer/EmbedPlayer.config.php @@ -10,7 +10,7 @@ // The preferred media codec preference // Note user selected format order - 'EmbedPlayer.CodecPreference' => array( 'vp9', 'webm', 'h264', 'ogg' ), + 'EmbedPlayer.CodecPreference' => array( 'vp9', 'webm', 'h264', 'ogg', 'mp3' ), // If video tag support should be disabled all-together, used to test // fallback decoding methods and direct file links diff --git a/MwEmbedModules/EmbedPlayer/resources/mw.EmbedTypes.js b/MwEmbedModules/EmbedPlayer/resources/mw.EmbedTypes.js index 21b2f45..b0a2aff 100644 --- a/MwEmbedModules/EmbedPlayer/resources/mw.EmbedTypes.js +++ b/MwEmbedModules/EmbedPlayer/resources/mw.EmbedTypes.js @@ -137,21 +137,6 @@ return this.mediaPlayers; }, - /** - * If the browsers supports a given mimetype - * - * @param {String} - * mimeType Mime type for browser plug-in check - */ - supportedMimeType: function( mimeType ) { - for ( var i =0; i < navigator.plugins.length; i++ ) { - var plugin = navigator.plugins[i]; - if ( typeof plugin[ mimeType ] != "undefined" ){ - return true; - } - } - return false; - }, addFlashPlayer: function(){ if( !mw.config.get( 'EmbedPlayer.DisableHTML5FlashFallback' ) ){ this.mediaPlayers.addPlayer( kplayer ); @@ -208,7 +193,7 @@ } // Test for MP3: - if ( this.supportedMimeType('audio/mpeg') ) { + if ( dummyvid.canPlayType('audio/mpeg') ) { this.mediaPlayers.addPlayer( mp3NativePlayer ); } diff --git a/MwEmbedModules/EmbedPlayer/resources/mw.processEmbedPlayers.js b/MwEmbedModules/EmbedPlayer/resources/mw.processEmbedPlayers.js index 31308c0..e9f3553 100644 --- a/MwEmbedModules/EmbedPlayer/resources/mw.processEmbedPlayers.js +++ b/MwEmbedModules/EmbedPlayer/resources/mw.processEmbedPlayers.js @@ -151,6 +151,7 @@ } // If we don't have a native player don't wait for metadata if( !mw.EmbedTypes.getMediaPlayers().isSupportedPlayer( 'oggNative') && + !mw.EmbedTypes.getMediaPlayers().isSupportedPlayer( 'mp3Native') && !mw.EmbedTypes.getMediaPlayers().isSupportedPlayer( 'webmNative') && !mw.EmbedTypes.getMediaPlayers().isSupportedPlayer( 'h264Native' ) && !mw.EmbedTypes.getMediaPlayers().isSupportedPlayer( 'appleVdnPlayer' ) ) diff --git a/TimedMediaHandler.hooks.php b/TimedMediaHandler.hooks.php index 78a5f1e..5c5d5cd 100644 --- a/TimedMediaHandler.hooks.php +++ b/TimedMediaHandler.hooks.php @@ -258,6 +258,7 @@ $wgMediaHandlers['audio/x-flac'] = 'FLACHandler'; $wgMediaHandlers['audio/flac'] = 'FLACHandler'; $wgMediaHandlers['audio/wav'] = 'WAVHandler'; + $wgMediaHandlers['audio/mpeg'] = 'Mp3Handler'; // Add transcode job class: $wgJobClasses['webVideoTranscode'] = 'WebVideoTranscodeJob'; diff --git a/TimedMediaHandler.php b/TimedMediaHandler.php index 983cdb0..5cc5fba 100644 --- a/TimedMediaHandler.php +++ b/TimedMediaHandler.php @@ -240,7 +240,7 @@ // List of extensions handled by Timed Media Handler since its referenced in a few places. // you should not modify this variable -$wgTmhFileExtensions = [ 'ogg', 'ogv', 'oga', 'flac', 'opus', 'wav', 'webm', 'mp4' ]; +$wgTmhFileExtensions = [ 'ogg', 'ogv', 'oga', 'flac', 'opus', 'wav', 'webm', 'mp4', 'mp3' ]; $wgFileExtensions = array_merge( $wgFileExtensions, $wgTmhFileExtensions ); @@ -296,6 +296,8 @@ $wgAutoloadClasses['FLACHandler'] = "$timedMediaDir/handlers/FLACHandler/FLACHandler.php"; // WAV Handler $wgAutoloadClasses['WAVHandler'] = "$timedMediaDir/handlers/WAVHandler/WAVHandler.php"; +// Mp3 Handler +$wgAutoloadClasses['Mp3Handler'] = "$timedMediaDir/handlers/Mp3Handler/Mp3Handler.php"; // Text handler $wgAutoloadClasses['TextHandler'] = "$timedMediaDir/handlers/TextHandler/TextHandler.php"; diff --git a/handlers/Mp3Handler/Mp3Handler.php b/handlers/Mp3Handler/Mp3Handler.php new file mode 100644 index 0000000..301c881 --- /dev/null +++ b/handlers/Mp3Handler/Mp3Handler.php @@ -0,0 +1,70 @@ +<?php +/** + * Mp3 handler + */ +class Mp3Handler extends ID3Handler { + + /** + * @param $image + * @return string + */ + function getMetadataType( $image ) { + return 'mp3'; + } + /** + * @param $file File + */ + function getWebType( $file ) { + return 'audio/mpeg'; + } + /** + * @param $file File + * @return array|bool + */ + function getStreamTypes( $file ) { + $streamTypes = []; + $metadata = self::unpackMetadata( $file->getMetadata() ); + if ( !$metadata || isset( $metadata['error'] ) ) { + return false; + } + wfDebug( print_r($metadata['audio'],true ) ); + if ( isset( $metadata['audio'] ) && $metadata['audio']['dataformat'] == 'mp3' ) { + $streamTypes[] = 'MP3'; + } + return $streamTypes; + } + + /** + * @param $file File + * @return String + */ + function getShortDesc( $file ) { + $streamTypes = $this->getStreamTypes( $file ); + if ( !$streamTypes ) { + return parent::getShortDesc( $file ); + } + return wfMessage( 'timedmedia-mp3-short-audio' + )->timeperiodParams( + $this->getLength( $file ) + )->text(); + } + + /** + * @param $file File + * @return String + */ + function getLongDesc( $file ) { + $streamTypes = $this->getStreamTypes( $file ); + if ( !$streamTypes ) { + return parent::getLongDesc( $file ); + } + return wfMessage( + 'timedmedia-mp3-long-audio' + )->timeperiodParams( + $this->getLength( $file ) + )->bitrateParams( + $this->getBitRate( $file ) + )->text(); + } + +} diff --git a/i18n/en.json b/i18n/en.json index 9b198c9..2b9b6a9 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -20,6 +20,8 @@ "timedmedia-wav-short-audio": "WAV audio file, $1", "timedmedia-wav-long-audio": "WAV audio file, length $1, $2 overall", "timedmedia-wav-pcm-required": "You can only upload PCM (Pulse Code Modulation) WAV.", + "timedmedia-mp3-short-audio": "MP3 audio file, $1", + "timedmedia-mp3-long-audio": "MP3 audio file, length $1, $2 overall", "timedmedia-mp4-short-video": "MP4 $1 video file, $2", "timedmedia-mp4-long-video": "MP4 audio/video file, $1, length $2, $4 × $5 pixels, $3 overall", "timedmedia-more": "More…", diff --git a/i18n/qqq.json b/i18n/qqq.json index d308749..fbe4c68 100644 --- a/i18n/qqq.json +++ b/i18n/qqq.json @@ -38,6 +38,8 @@ "timedmedia-wav-short-audio": "File details for WAV audio files, short version.\nParameters:\n* $1 - duration of the audio (localized) - e.g. 1m34s\nSee also:\n* {{msg-mw|Timedmedia-wav-long-audio}}", "timedmedia-wav-long-audio": "File details for WAV files, long version.\nShown after the filename in the image description page.\n\nParameters:\n* $1 - duration of the audio (localized) - e.g. 1m34s\n* $2 - bit-rate (localized) - e.g. 97kbps\nSee also:\n* {{msg-mw|Timedmedia-wav-short-audio}}", "timedmedia-wav-pcm-required": "Message shown at upload if user tries to upload a WAV file using a codec that is not PCM", + "timedmedia-mp3-short-audio": "File details for MP3 audio files, short version.\nParameters:\n* $1 - duration of the audio (localized) - e.g. 1m34s\n\nPrimarily used on [[Special:Search]] results pages, i.e.\n https://commons.wikimedia.org/w/index.php?title=Special%3ASearch&profile=advanced&search=What%27s+a+love+dart&fulltext=Search&ns6=1&profile=advanced\n\nSee also:\n* {{msg-mw|Timedmedia-mp3-long-audio}}\n* {{msg-mw|Timedmedia-ogg-short-audio}}", + "timedmedia-mp3-long-audio": "File details for MP3 files, long version.\n\nShown after the filename in the image description page.\n\nParameters:\n* $1 - duration (localized) - e.g. 1m34s\n* $2 - bit-rate (localized) - e.g. 97kbps\nSee also:\n* {{msg-mw|Timedmedia-mp3-short-audio}}", "timedmedia-mp4-short-video": "File details for MP4 video files, short version.\nParameters:\n* $1 - stream type names (slash separated) - e.g. AAC/h.264\n* $2 - duration of the video (localized) - e.g. 1m34s\nSee also:\n* {{msg-mw|Timedmedia-mp4-long-video}}", "timedmedia-mp4-long-video": "File details for MP4 multiplexed audio/video files, long version.\n\nShown after the filename in the image description page.\n\nParameters:\n* $1 - stream type names (slash separated) - e.g. AAC/h.264\n* $2 - duration (localized) - e.g. 1m34s\n* $3 - bit-rate (localized) - e.g. 97kbps\n* $4 - width of the video (in pixels)\n* $5 - height of the video (in pixels)\nSee also:\n* {{msg-mw|Timedmedia-mp4-short-video}}", "timedmedia-more": "Unused at this time.\n{{Identical|More...}}", -- To view, visit https://gerrit.wikimedia.org/r/349622 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I2b59f828d70a961e34b58414c24bbff0098b979f Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/TimedMediaHandler Gerrit-Branch: master Gerrit-Owner: TheDJ <hartman.w...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits