TimedMediaHandler
This extension provides a media handler for the Ogg, WebM, mp4 container format. When enabled, a player will be automatically embedded in the file description page, or any wiki page while still using the same syntax as for images.
- Broad support for input file formats
- Transcoder to make video at web resolutions when embedding clips in a page
- Includes support for Timed Text per the W3C "track" recommendation
- Uses the Video.js javascript player for playback
After you installed this extension, add the following to the end of your
LocalSettings.php
to enable it:
// TimedMediaHandler
wfLoadExtension( 'TimedMediaHandler' );
Configuration documentation is canonically provided at: https://www.mediawiki.org/wiki/Extension:TimedMediaHandler
Updates in 2022
The playback framework Kaltura/mwEmbed was replaced with a video player based on video.js
Updates in 2018
Ogg Theora (.ogv) video output has been removed due to ongoing issues with ffmpeg2theora and libtheora packaging. WebM is now be used as the preferred royalty-free video output by default. Ogg files are still supported, but videos will be transcoded to WebM.
If your LocalSettings.php
used one of the WebVideoTranscode::ENC_OGV_160P
etc
constants, you may need to remove them after updating to a current version.
The $wgEnabledTranscodeSet
and $wgEnabledAudioTranscodeSet
config variables
have changed! If you have manually configured them in LocalSetings.php
, you
MUST update them:
First, the constants such as WebVideoTranscode::ENC_WEBM_480P
are no longer
defined to simplify integration with modern extension loading and configuration
via extension.json
. Instead, use the string values such as '480p.webm'
.
Second, the array structures have been flipped from a list to a map from keys to an enabled/disabled setting as a boolean like these:
$wgEnabledTranscodeSet = [
// To disable an on-by-default, set it to false:
'1080p.webm' => false,
// To enable an off-by-default, set it to true:
'1440p.vp9.webm' => true,
];
or item-by-item:
// To disable an on-by-default, set it to false:
$wgEnabledTranscodeSet['1080p.webm'] = false;
// To enable an off-by-default, set it to true:
$wgEnabledTranscodeSet['1440p.vp9.webm'] = true;
Note that mp3 audio transcodes are enabled by default now, so this no longer
needs to be manually added to $wgEnabledAudioTranscodeSet
.
Running Transcodes
Transcoding a video to another resolution or format takes a good amount of time, sometimes hours, which prevents that processing to be handled as a web service. Instead, the extension implements an asynchronous job, named webVideoTranscode, which you must be running regularly as your web server user.
The job can be run using the MediaWiki maintenance/run.php
utility (do not
forget to su as a webserver user):
php run.php runJobs --type webVideoTranscode --maxjobs 1
php run.php runJobs --type webVideoTranscodePrioritized --maxjobs 1
Exclude these jobs from the default tasks your webserver executes
by setting the following options in your LocalSettings.php
.
$wgJobTypesExcludedFromDefaultQueue[] = 'webVideoTranscode';
$wgJobTypesExcludedFromDefaultQueue[] = 'webVideoTranscodePrioritized';
Included software or dependencies
This extension depends on several software projects, some included, other to be installed on your web server system.
Video.js HTML5 player library
TimedMediaHandler uses the Video.js HTML5 web media player. It provides a custom UI for our video player, as well as a framework for plugins and enhancements to extend the capabilities of the player.
For more information about the player library visit: https://videojs.com
Video.js code is released under the Apache 2.0 License: http://www.apache.org/licenses/LICENSE-2.0
Ogv.js decoder
Brooke Vibber, a Wikimedia developer, created the JavaScript compatibility shim Ogv.js. It is a software decoding library for the file formats Ogg and WebM and the Vorbis, Theora, VP8 and VP9 codecs. It allows web browser without native HTML5 video support like iOS to support these formats.
For more information about ogv.js visit: https://github.com/bvibber/ogv.js/
Ogv.js code is released under the MIT license: https://opensource.org/licenses/MIT
FFmpeg
FFmpeg is a set of libraries and programs for reading, writing and converting audio and video formats.
We use ffmpeg for two purposes:
- creating still images of videos (aka thumbnails)
- transcoding between WebM, Ogg and/or H.264 videos
Wikimedia currently uses ffmpeg as shipped in Debian 10. For best experience use that or any later release from https://ffmpeg.org
On Ubuntu/Debian:
apt-get install ffmpeg
You can also build ffmpeg from source. Guide for building ffmpeg with H.264 for Ubuntu: https://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide
Some old versions of FFmpeg had a bug which made it extremely slow to seek in large theora videos in order to generate a thumbnail. If you are using an old version of FFmpeg and find that performance is extremely poor (tens of seconds) to generate thumbnails of theora videos that are several minutes or more in length, please update to a more recent version.
In MediaWiki configuration, after the require line in LocalSettings.php, you will have to specify the FFmpeg binary location with:
$wgFFmpegLocation = '/path/to/ffmpeg';
Default being /usr/bin/ffmpeg
.
For more information about FFmpeg visit: https://ffmpeg.org
FFmpeg code is released under the GNU Lesser General Public License version 2.1 4 or later (LGPL v2.1+), with optional parts of it under the GNU General Public License 9 version 2 or later (GPL v2+)
PEAR File_Ogg
Tim Starling, a Wikimedia developer, forked the PEAR File_Ogg package and improved it significantly to support this extensions.
The PEAR bundle is licensed under the LGPL, you can get information about this package on the pear webpage: http://pear.php.net/package/File_Ogg
getID3
getID3 is used for metadata of WebM files. It is marked as a dependency to be installed via composer.
getID3() by James Heinrich info@getid3.org available at http://getid3.sourceforge.net or http://www.getid3.org/
getID3 code is released under the GNU GPL: http://www.gnu.org/copyleft/gpl.html