UNPKG

mediaelement

Version:
504 lines (415 loc) 20.9 kB
# Installation * [0. Setup MIME-types](#mime-types) * [1. Install `MediaElementJS`](#install) * [Installation in WordPress](#wordpress) * [In `wp-admin/about.php`](#wp-about) * [In `wp-admin/includes/ajax-actions.php`](#wp-ajax) * [In `wp-includes/media.php`](#wp-media) * [In `wp-includes/js/mediaelement` folder](#wp-js-mediaelement) * [In `wp-includes/script-loader.php`](#wp-script) * [Installation in Drupal](#drupal) * [Additional plugins](#plugins) * [2. Add Script and Stylesheet](#script-and-stylesheet) * [3. Add `<video>` or `<audio>` tags](#tags) * [Default setup](#default-setup) * [Multiple codecs (Optional)](#multi-codecs) * [Browsers with JavaScript disabled (Optional)](#disabled-javascript) * [Use of Closed Captioning (Optional)](#closed-captioning) * [4. Setup Player](#player) * [5. Set default language (Optional)](#language) <a id="mime-types"></a> ## 0. Setup MIME-types (optional) On Linux/Apache servers, create a file called .htaccess with the following text and upload it to the root of your website ``` # Video support AddType video/ogg .ogv AddType video/mp4 .mp4 AddType video/webm .webm AddType video/ogv .ogv # Audio support AddType audio/mp3 .mp3 AddType audio/oga .oga AddType audio/ogg .ogg AddType audio/wav .wav # For HLS support AddType application/x-mpegURL .m3u8 AddType vnd.apple.mpegURL .m3u8 AddType video/MP2T .ts # For M(PEG)-DASH support AddType application/dash+xml .mpd # For subtitles support AddType text/vtt .vtt AddType text/srt .srt ``` On Windows/IIS servers, please follow Microsoft's instructions on how to add/edit MIME types on [IIS6](http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/eb5556e2-f6e1-4871-b9ca-b8cf6f9c8134.mspx?mfr=true) and [IIS7](https://technet.microsoft.com/en-us/library/cc725608(v=ws.10).aspx). If you are working with local files and plan to test Flash playback, make sure you go to the [Flash Security Settings](http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html) page and add your working directory. Also, things tend to work best when you use absolute paths. If you want to make your media to play in `Chromium` browser, please read [this document](https://www.chromium.org/audio-video) For more information about how to set up a server to serve media properly and other general and useful topics about dealing with HTML5 video, [this article](http://ronallo.com/blog/html5-video-everything-i-needed-to-know) is a good start point. **Do not** compress media (`mod_deflate` or `gzip`), since it can lead to unexpected results, like headers not being passed correctly. <a id="install"></a> ## 1. Install `MediaElementJS` To get the default installation there are several different ways. 1. Download the package from https://github.com/mediaelement/mediaelement 2. Use a CDN reference; the most popular ones are [jsDelivr](http://cdn.jsdelivr.net/npm/mediaelement/) and [cdnjs](https://cdnjs.com/libraries/mediaelement). 3. Through GIT: `git clone https://github.com/mediaelement/mediaelement.git` 4. Through npm: `npm install mediaelement` 5. Through BOWER: `bower install mediaelement` 6. If you are using Meteor: `meteor add johndyer:mediaelement` or `meteor npm install mediaelement` <a id="wordpress"></a> ### Installation in WordPress WordPress currently incorporates `MediaElementJS` as a part of the [Embeds](https://codex.wordpress.org/Embeds) core package. If you are using a version prior 4.9, and you want to upgrade `MediaElementJS` to the latest version, follow these steps: <a id="wp-about"></a> #### In `wp-admin/about.php` 1. Find the block ``` if ( ! wp_is_mobile() ) { wp_enqueue_style( 'wp-mediaelement' ); ``` and add below the following: ``` wp_enqueue_script( 'mediaelement-vimeo' ); ``` 2. Find the block ``` wp_localize_script( 'mediaelement', '_wpmejsSettings', ``` and add in the `_wpmejsSettings` the following: ``` 'pluginPath' => includes_url( 'js/mediaelement/', 'relative' ), 'pauseOtherPlayers' => '', 'classPrefix' => 'mejs-', 'stretching' => 'responsive', ``` <a id="wp-ajax"></a> #### In `wp-admin/includes/ajax-actions.php` 1. Find the blocks that contain: ``` wp_print_scripts( 'wp-mediaelement' ); ``` and replace them with: ``` wp_print_scripts( array( 'mediaelement-vimeo', 'wp-mediaelement' ) ); ``` <a id="wp-media"></a> #### In `wp-includes/media.php` 1. Find the block that contains: ``` $library = apply_filters( 'wp_video_shortcode_library', 'mediaelement' ); if ( 'mediaelement' === $library && did_action( 'init' ) ) { wp_enqueue_style( 'wp-mediaelement' ); wp_enqueue_script( 'wp-mediaelement' ); } ``` and replace it with: ``` $library = apply_filters( 'wp_video_shortcode_library', 'mediaelement' ); if ( 'mediaelement' === $library && did_action( 'init' ) ) { wp_enqueue_style( 'wp-mediaelement' ); wp_enqueue_script( 'mediaelement-vimeo' ); wp_enqueue_script( 'wp-mediaelement' ); } ``` 2. Find the block that contains: ``` if ( $is_vimeo ) { wp_enqueue_script( 'froogaloop' ); } ``` and replace it with: ``` if ( $is_vimeo ) { wp_enqueue_script( 'mediaelement-vimeo' ); } ``` 3. Inside the function `wpview_media_sandbox_styles()`, replace: ``` $mediaelement = includes_url( "js/mediaelement/mediaelementplayer.min.css?$version" ); ``` with: ``` $mediaelement = includes_url( "js/mediaelement/mediaelementplayer-legacy.min.css?$version" ); ``` <a id="wp-js-mediaelement"></a> #### In `wp-includes/js/mediaelement` folder 1. Remove all the files from the folder and install all the files inside the `build` folder from the `MediaElement` project. 2. Download and copy/paste the WordPress files contained in this [link](https://github.com/mediaelement/mediaelement/files/1048572/wp-mejs.zip). <a id="wp-script"></a> #### In `wp-includes/script-loader.php` 1. Find the block: ``` $scripts->add( 'mediaelement', "/wp-includes/js/mediaelement/mediaelement-and-player.min.js", array('jquery'), '2.22.0', 1 ); ``` and replace all of that until you reach the end of the translations, with this: ``` $scripts->add( 'mediaelement', "/wp-includes/js/mediaelement/mediaelement-and-player.min.js", array('jquery'), 'X.X.X', 1 ); did_action( 'init' ) && $scripts->localize( 'mediaelement', 'mejsL10n', array( 'language' => get_bloginfo( 'language' ), 'strings' => array( 'mejs.install-flash' => __( 'You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https://get.adobe.com/flashplayer/' ), 'mejs.fullscreen-off' => __( 'Turn off Fullscreen' ), 'mejs.fullscreen-on' => __( 'Go Fullscreen' ), 'mejs.download-video' => __( 'Download Video' ), 'mejs.fullscreen' => __( 'Fullscreen' ), 'mejs.time-jump-forward' => array( __('Jump forward 1 second'), __('Jump forward %1 seconds') ), 'mejs.loop' => __( 'Toggle Loop' ), 'mejs.play' => __( 'Play' ), 'mejs.pause' => __( 'Pause' ), 'mejs.close' => __( 'Close' ), 'mejs.time-slider' => __( 'Time Slider' ), 'mejs.time-help-text' => __( 'Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.' ), 'mejs.time-skip-back' => array( __('Skip back 1 second'), __('Skip back %1 seconds') ), 'mejs.captions-subtitles' => __( 'Captions/Subtitles' ), 'mejs.captions-chapters' => __( 'Chapters' ), 'mejs.none' => __( 'None' ), 'mejs.mute-toggle' => __( 'Mute Toggle' ), 'mejs.volume-help-text' => __( 'Use Up/Down Arrow keys to increase or decrease volume.' ), 'mejs.unmute' => __( 'Unmute' ), 'mejs.mute' => __( 'Mute' ), 'mejs.volume-slider' => __( 'Volume Slider' ), 'mejs.video-player' => __( 'Video Player' ), 'mejs.audio-player' => __( 'Audio Player' ), 'mejs.ad-skip' => __( 'Skip ad' ), 'mejs.ad-skip-info' => array( __('Skip in 1 second'), __('Skip in %1 seconds') ), 'mejs.source-chooser' => __( 'Source Chooser' ), 'mejs.stop' => __( 'Stop' ), 'mejs.speed-rate' => __( 'Speed Rate' ), 'mejs.live-broadcast' => __( 'Live Broadcast' ), 'mejs.afrikaans' => __( 'Afrikaans' ), 'mejs.albanian' => __( 'Albanian' ), 'mejs.arabic' => __( 'Arabic' ), 'mejs.belarusian' => __( 'Belarusian' ), 'mejs.bulgarian' => __( 'Bulgarian' ), 'mejs.catalan' => __( 'Catalan' ), 'mejs.chinese' => __( 'Chinese' ), 'mejs.chinese-simplified' => __( 'Chinese (Simplified)' ), 'mejs.chinese-traditional' => __( 'Chinese (Traditional)' ), 'mejs.croatian' => __( 'Croatian' ), 'mejs.czech' => __( 'Czech' ), 'mejs.danish' => __( 'Danish' ), 'mejs.dutch' => __( 'Dutch' ), 'mejs.english' => __( 'English' ), 'mejs.estonian' => __( 'Estonian' ), 'mejs.filipino' => __( 'Filipino' ), 'mejs.finnish' => __( 'Finnish' ), 'mejs.french' => __( 'French' ), 'mejs.galician' => __( 'Galician' ), 'mejs.german' => __( 'German' ), 'mejs.greek' => __( 'Greek' ), 'mejs.haitian-creole' => __( 'Haitian Creole' ), 'mejs.hebrew' => __( 'Hebrew' ), 'mejs.hindi' => __( 'Hindi' ), 'mejs.hungarian' => __( 'Hungarian' ), 'mejs.icelandic' => __( 'Icelandic' ), 'mejs.indonesian' => __( 'Indonesian' ), 'mejs.irish' => __( 'Irish' ), 'mejs.italian' => __( 'Italian' ), 'mejs.japanese' => __( 'Japanese' ), 'mejs.korean' => __( 'Korean' ), 'mejs.latvian' => __( 'Latvian' ), 'mejs.lithuanian' => __( 'Lithuanian' ), 'mejs.macedonian' => __( 'Macedonian' ), 'mejs.malay' => __( 'Malay' ), 'mejs.maltese' => __( 'Maltese' ), 'mejs.norwegian' => __( 'Norwegian' ), 'mejs.persian' => __( 'Persian' ), 'mejs.polish' => __( 'Polish' ), 'mejs.portuguese' => __( 'Portuguese' ), 'mejs.romanian' => __( 'Romanian' ), 'mejs.russian' => __( 'Russian' ), 'mejs.serbian' => __( 'Serbian' ), 'mejs.slovak' => __( 'Slovak' ), 'mejs.slovenian' => __( 'Slovenian' ), 'mejs.spanish' => __( 'Spanish' ), 'mejs.swahili' => __( 'Swahili' ), 'mejs.swedish' => __( 'Swedish' ), 'mejs.tagalog' => __( 'Tagalog' ), 'mejs.thai' => __( 'Thai' ), 'mejs.turkish' => __( 'Turkish' ), 'mejs.ukrainian' => __( 'Ukrainian' ), 'mejs.vietnamese' => __( 'Vietnamese' ), 'mejs.welsh' => __( 'Welsh' ), 'mejs.yiddish' => __( 'Yiddish' ), ), ) ); $scripts->add( 'mediaelement-vimeo', "/wp-includes/js/mediaelement/renderers/vimeo.min.js", array('mediaelement'), 'X.X.X', 1 ); $scripts->add( 'wp-mediaelement', "/wp-includes/js/mediaelement/wp-mediaelement$suffix.js", array('mediaelement'), false, 1 ); $mejs_settings = array( 'pluginPath' => includes_url( 'js/mediaelement/', 'relative' ), 'classPrefix' => 'mejs-', 'stretching' => 'responsive', ); ``` being `X.X.X` the latest version you want to install. 2. Remove `$scripts->add( 'froogaloop', "/wp-includes/js/mediaelement/froogaloop.min.js", array(), '2.0' );` 3. Replace: ``` $styles->add( 'mediaelement', "/wp-includes/js/mediaelement/mediaelementplayer.min.css", array(), '2.22.0' ); ``` with: ``` $styles->add( 'mediaelement', "/wp-includes/js/mediaelement/mediaelementplayer-legacy.min.css", array(), 'X.X.X' ); ``` being `X.X.X` the latest version you want to install. <a id="drupal"></a> ### Installation in Drupal With Drupal, you can create your own module and add `MediaElement` to it (see this document for more information). However, if you are using, or **if you have a Drupal 7 installation** and want to use, [`MediaElement Module`](https://www.drupal.org/project/mediaelement), you have to update it performing the following steps: 1. Install the [Libraries](https://www.drupal.org/project/libraries) module, if you haven't. 2. Install the module into the `modules` folder, if you haven't. 3. Replace the line in the `modules/mediaelement/mediaelement.admin.inc` file ``` '#markup' => '<video width="360" height="203" id="player1" src="' . $path . '/media/echo-hereweare.mp4"><p>Your browser leaves much to be desired.</p></video>', ``` with ``` '#markup' => '<video width="360" height="203" id="player1" src="https://media.w3.org/2010/05/sintel/trailer.mp4"></video>', ``` 4. Install `MediaElement` latest `build` folder into Drupal's `sites/all/libraries/mediaelement` directory. 5. Activate the module and configure it from Drupal's `Module` section. 6. Check the box on `Enable MediaElement.js site wide`. 7. Now every time you create a page/post and include the `video` or `audio` tag, the player will render them. <a id="plugins"></a> ### Additional plugins If you want to install any of them, refer to the new plugins repository clicking [here](https://github.com/mediaelement/mediaelement-plugins) for more information. <a id="script-and-stylesheet"></a> ## 2. Add Script and Stylesheet ```html <script src="/path/to/jquery.js"></script> <script src="/path/to/mediaelement-and-player.min.js"></script> <!-- Add any other renderers you need; see Use Renderers for more information --> <link rel="stylesheet" href="/path/to/mediaelementplayer.min.css" /> ``` If you wish to install the sources in different directories (i.e., all JavaScript files in a _js_, all CSS in a _styles_, Flash shims in _plugins_, etc.), add the following CSS update after the _mediaelementplayer.css_ reference (**only if the images are not in the same folder as the stylesheet**): ```html <link rel="stylesheet" href="/path/to/mediaelementplayer.min.css" /> <style> .mejs__overlay-button { background-image: url("/path/to/mejs-controls.svg"); } .mejs__overlay-loading-bg-img { background-image: url("/path/to/mejs-controls.svg"); } .mejs__button > button { background-image: url("/path/to/mejs-controls.svg"); } </style> ``` Also, update `pluginPath` within the configuration options (visit [Usage and Tips](usage.md) and [API and Configuration](api.md) for more details) with the location of the Flash shims. You can also use a CDN to load your script and stylesheet. As stated above, the important factor is to set the `pluginPath` correctly, but also, for this scenario, you will need to set the `shimScriptAccess` configuration element as ***`always`*** to make the shims to work. As an example: ```javascript $('video, audio').mediaelementplayer({ // Do not forget to put a final slash (/) pluginPath: 'https://cdnjs.com/libraries/mediaelement/', // this will allow the CDN to use Flash without restrictions // (by default, this is set as `sameDomain`) shimScriptAccess: 'always' // more configuration }); ``` Check the content of `mediaelementplayer.min.css` (or if you decided to use the old styles, `mediaelementplayer-legacy.min.css`) to customize any CSS related to the player. Also, as an example, visit [this section](resources.md#styles) to have an idea on how can you customize the look-and-feel of the player. <a id="tags"></a> ## 3. Add `<video>` or `<audio>` tags <a id="default-setup"></a> ### Default setup If your users have JavaScript and/or Flash, the easiest route for all browsers and mobile devices is to use a single file. ```html <video src="myvideo.mp4" width="320" height="240" type="video/mp4"></video> ``` or ```html <video width="320" height="240"> <source type="video/mp4" src="myvideo.mp4" /> </video> ``` All the formats supported are listed in [this table](usage.md#renderers-list). Besides that, there are some additional attributes that can be added in the `video`/`audio` tag. Visit the [Attributes](api.md#attributes) section for more information. **Note**: Although it is important to include their MIME type so the plugin renders the media accurately, some browsers like Firefox can display warnings in regards of unknown/custom MIME types. But they do not prevent the plugin to work properly. <a id="multi-codecs"></a> ### Multiple codecs (Optional) This includes multiple codecs for various browsers (H.264 for IE9+, Safari, and Chrome, WebM for Firefox 4 and Opera, Ogg for Firefox 3). ```html <video width="320" height="240" poster="poster.jpg" controls="controls" preload="none"> <source type="video/mp4" src="myvideo.mp4" /> <source type="video/webm" src="myvideo.webm" /> <source type="video/ogg" src="myvideo.ogv" /> </video> ``` <a id="disabled-javascript"></a> ### Browsers with JavaScript disabled (Optional) In very rare cases, you might have a non-HTML5 browser with Flash turned on and JavaScript turned off. In that specific case, you can also include the Flash `<object>` code. For more information about this approach, please read [Video for Everybody!](http://camendesign.com/code/video_for_everybody) documentation. ```html <video width="320" height="240" poster="poster.jpg" controls="controls" preload="none"> <source type="video/mp4" src="myvideo.mp4" /> <source type="video/webm" src="myvideo.webm" /> <source type="video/ogg" src="myvideo.ogv" /> <object width="320" height="240" type="application/x-shockwave-flash" data="/path/to/mediaelement-flash-video.swf"> <param name="movie" value="/path/to/mediaelement-flash-video.swf" /> <param name="flashvars" value="controls=true&amp;poster=myvideo.jpg&amp;file=myvideo.mp4" /> <img src="myvideo.jpg" width="320" height="240" title="No video playback capabilities" /> </object> </video> ``` If you plan to use this approach, just remember that it will only work for native media types, and you can use `mediaelement-flash-audio.swf` (MP3), `mediaelement-flash-audio-ogg.swf` (OGA) or `mediaelement-flash-video.swf` (MP4, FLV, RTMP, M4V, etc.) shims for it. <a id="closed-captioning"></a> ### Use of Closed Captioning (Optional) The way to setup closed captioning is by using the `track` tag as follows: ```html <video width="320" height="240" poster="poster.jpg" controls="controls" preload="none"> <source type="video/mp4" src="myvideo.mp4" /> ... <track src="subtitles_en.[srt|vtt]" kind="[subtitles|captions|chapters]" srclang="en" label="English"> <track src="subtitles_es.[srt|vtt]" kind="[subtitles|captions|chapters]" srclang="es" label="Spanish"> ... </video> ``` This works perfectly on any browser that supports HTML5 natively; however, to make this work across browsers, an AJAX request is performed to parse the content of the subtitles file. That's why is important to put the caption files **in the same domain as the player is**. Otherwise, the request of the file will be denied. As a final note, to display closed captioning in iOS, they will need to be transcoded it in the video. To learn more about this topic, please read [The Zencoder guide to closed captioning for web, mobile, and connected TV](http://blog.zencoder.com/2012/07/13/closed-captioning-for-web-mobile-and-tv/). <a id="player"></a> ## 4. Setup Player The easiest way to use the player is adding the `class="mejs__player"` to any `<video>`, `<audio>`, or `<iframe>` tags, and add the `data-mejsoptions` to configure it. For more details and ways to set the player, please read the [Usage section](usage.md#initialize). <a id="language"></a> ## 5. Set default language (Optional) By default, all the strings in `MediaElementJS` are in English. If you wanna set a different language for them, you need to set the language code via `mejs.i18n.locale.language` before the player instantiation, and specify the language in the media container in the `success` callback. Optionally, just can set the attribute `lang` in the `<html>` tag with the one you set before, to declare the default language of the text in the rest of the page as well. ```html <script> mejs.i18n.language('de'); // Setting German language $('audio,video').mediaelementplayer({ success: function(player, node) { // Optional $(player).closest('.mejs__container').attr('lang', mejs.i18n.language()); $('html').attr('lang', mejs.i18n.language()); // More code } }); </script> ``` Available languages: * Catalan (ca) * Czech (cs) * German (de) * English (en) * Spanish; Castilian (es) * French (fr) * Hungarian (hu) * Italian (it) * Japanese (ja) * Korean (ko) * Dutch (nl) * Polish (pl) * Portuguese (pt) * Brazilian Portuguese (pt-BR) * Romanian (ro) * Russian (ru) * Slovak (sk) * Swedish (sv) * Ukrainian (uk) * Simplified Chinese (zh-CN) * Traditional Chinese (zh-TW) ________ [Back to Main](../README.md)