cordova-plugin-media3
v1.1.35
Published
Media player for Cordova using Google's media3 ExoPlayer framework
Maintainers
Readme
Cordova Media3 exoplayer Plugin
Cordova media3 exoplayer plugin.
this plugin was imported and adjusted to media3 Exoplayer based on the plugin of cordova-plugin-exoplayer https://codeclimate.com/github/frontyard/cordova-plugin-exoplayer
Using
Create a new Cordova Project
$ cordova create hello com.example.helloapp HelloInstall the plugin
$ cd hello
$ cordova plugin add cordova-plugin-exoplayerEdit www/js/index.js and add the following code inside onDeviceReady
var successCallback = function(json) {
};
var errorCallback = function(error) {
};
var params = {
url: "http://www.youtube.com/api/manifest/dash/id/bf5bb2419360daf1/source/youtube?as=fmp4_audio_clear,fmp4_sd_hd_clear&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0&ipbits=0&expire=19000000000&signature=51AF5F39AB0CEC3E5497CD9C900EBFEAECCCB5C7.8506521BFC350652163895D4C26DEE124209AA9E&key=ik0"
};
window.ExoPlayer.show(parameters, successCallback, errorCallback);Plugin methods exported via window.ExoPlayer
{
setStream(url, controllerConfig) // switch stream without disposing of the player. controllerConfig is "controller" part of the inital parameters.
playPause() // will pause if playing and play if paused :-)
stop() // will stop the current stream
seekTo(milliseconds) // jump to particular poing into the stream
getState(successCallback, errorCallback) // returns player state
showController() // shows player controller
hideController() // hides player controller
setController() // sets `controller` part of configuration related to the info bar and control buttons.
close() // close and dispose of player, very important to call this method when your app exits!
}This is what parameters look like for the show call, most of them are optional:
{
url: 'https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8',
userAgent: 'MyAwesomePlayer', // default is 'ExoPlayerPlugin'
aspectRatio: 'FILL_SCREEN', // default is FIT_SCREEN
hideTimeout: 5000, // Hide controls after this many milliseconds, default is 5 sec
autoPlay: true, // When set to false stream will not automatically start
seekTo: 10 * 60 * 60 * 1000, // Start playback 10 minutes into video specified in ms, default is 0
forwardTime: 60 * 1000, // Amount of time in ms to use when skipping forward, default is 1 min
rewindTime: 60 * 1000, // Amount of time in ms to use when skipping backward, default is 1 min
audioOnly: true, // Only play audio in the backgroud, default is false
subtitleUrl: 'http://url.to/subtitle.srt', // Optional subtitle url
connectTimeout: 1000, // http connect timeout in ms (default is 0)
readTimeout: 1000, // http read timeout in ms (default is 0)
retryCount: 5, // Number of times datasource will retry the stream before giving up (default is 3)
showBuffering: true, // When buffering, player will show indicator at the top of the screen, default is false
controller: { // If this object is not present controller will not be visible
streamImage: 'http://url.to/channel.png',
streamTitle: 'Cool channel / movie',
streamDescription: '2nd line you can use to display whatever you want like current program epg or movie description',
hideProgress: true, // Hide entire progress timebar
hidePosition: false, // If timebar is visible hide current position from it
hideDuration: false, // If timebar is visible Hide stream duration from it
controlIcons: {
'exo_rew': null, // Set to null to remove the button from the player
'exo_play': 'http://url.to/play.png',
'exo_pause': 'http://url.to/pause.png',
//'exo_ffwd': null, // Buttons not included in configuration will show up as default ExoPlayer buttons
},
textColor: '#ffff0000', // These colors can be any valid Android color
buttonsColor: '#ff00ff00', // This example uses hex values including alpha (first byte)
bufferingColor: '#ff0000ff' // Alpha of 'ff' makes it 100% opaque
}
}Controller is composed of several pieces. To the left there is optional streamImage, followed by two lines on the right, top and bottom. Top line is reserved for streamTitle, while bottom line can either be streamDescription or progress bar. If you provide streamDescription, progress bar will not be visible. Optionaly you can turn off progress bar by passing hideProgress: true if you don't want to show either.
Playback control buttons are centered on the screen and use default ExoPlayer icons. Optionally you can override these by your own images via controlIcons object.
You can pass subtitleUrl for subtitle to be shown over the video. We currently support .srt and .vtt subtitle formats. Subtitles are not supported on all stream types, as ExoPlayer has requirement that both video and subtitle "must have the same number of periods, and must not have any dynamic windows", which means for simple mp4s it should work, but on more complex HLS/Dash setups it might not.
If you pass in audioOnly: true, make sure to manually close the player on some event (like escape button) since the plugin won't be detecting keypresses when playing audio in the background.
If you want to show default control buttons (play/pause, rewind, forward) you need an empty controlIncons object:
controlIcons: {
}Plugin will send following events back to Cordova app through successCallback specified through show function:
START_EVENT
STOP_EVENT
KEY_EVENT
TOUCH_EVENT
LOADING_EVENT
STATE_CHANGED_EVENT
POSITION_DISCONTINUITY_EVENT
SEEK_EVENT
PLAYER_ERROR_EVENT
TIMELINE_EVENTEach event will send JSON payload coresponding to that event. Some events (where appropriate) will also send additional information about playback like duration, postion, etc.
Example of key events:
{
'eventType':'KEY_EVENT',
'eventAction':'ACTION_DOWN',
'eventKeycode':'KEYCODE_VOLUME_UP'
}
{
'eventType':'KEY_EVENT',
'eventAction':'ACTION_UP',
'eventKeycode':'KEYCODE_VOLUME_UP'
}Example of touch events:
{
'eventType':'TOUCH_EVENT',
'eventAction':'ACTION_DOWN',
'eventAxisX':543,
'eventAxisY':1321.8009033203125
}
{
'eventType':'TOUCH_EVENT',
'eventAction':'ACTION_MOVE',
'eventAxisX':543,
'eventAxisY':1320.5
}
{
'eventType':'TOUCH_EVENT',
'eventAction':'ACTION_UP',
'eventAxisX':543,
'eventAxisY':1320.5
}Install Android platform
cordova platform add androidRun the code
cordova runContributing
- Fork it
- Create your feature branch off of current upstram branch (currently 1.0.7)
- Commit and push your changes to that branch
- Create new Pull Request
More Info
For more information on setting up Cordova see the documentation
For more info on plugins see the Plugin Development Guide
General Media3 ExoPlayer documentation
License
The MIT License (MIT)
Copyright (c) 2025 Naja7host
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
