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

Reply via email to