The cloudinary.VideoPlayer can be controlled by it's API.
Additionally, events are always useful: you may register to all
standard HTML5 video element events as well as some additional events
specific to the Video Player.
Consult the API documentation for more information.
HTML:
<div class="row">
<center>
<video
id="example-player"
controls
muted
class="cld-video-player cld-video-player-skin-dark"
width="600">
</video>
</center>
<br>
<center>
<div id="vid-source-data">
<span id="vid-source-public-id"></span><br>
<span id="vid-source-url"></span><br>
</div>
<div>
<button id="vid-seek-minus" class="btn btn-default">-10 seconds</button>
<button id="vid-seek-plus" class="btn btn-default">+10 seconds</button>
<button id="vid-play-prev" class="btn btn-default">Previous</button>
<button id="vid-play-next" class="btn btn-default">Next</button>
<button id="vid-play" class="btn btn-default">Play</button>
<button id="vid-pause" class="btn btn-default">Pause</button>
<button id="vid-stop" class="btn btn-default">Stop</button>
<button id="vid-mute" class="btn btn-default">Mute</button>
<button id="vid-unmute" class="btn btn-default">Unmute</button>
<button id="vid-volume-minus" class="btn btn-default">Volume -10%</button>
<button id="vid-volume-plus" class="btn btn-default">Volume +10%</button>
<button id="vid-maximize" class="btn btn-default">Maximize</button>
<button id="vid-toggle-controls" class="btn btn-default">Toggle Controls</button>
</div>
</center>
<br>
<div id="vid-events" class="well" style="overflow: scroll; height: 100px">
</div>
</div>
JavaScript:
var cld = cloudinary.Cloudinary.new({ cloud_name: 'miki-cloudinary' });
// Initialize player with base transformation (applies to all transformations)
var player = cld.videoPlayer('example-player', {
transformation: {
overlay: "text:arial_60:Example",
gravity: "north_west",
x: 20,
y: 20,
start_offset: 3,
end_offset: 10,
color: 'red',
width: 600,
crop: 'limit'
},
posterOptions: {
transformation: { effect: ['sepia'] }
}
});
// Button 'click' event handlers
document.querySelector("#vid-seek-minus").addEventListener('click', function() {
player.currentTime(player.currentTime() - 10);
});
document.querySelector("#vid-seek-plus").addEventListener('click', function() {
player.currentTime(player.currentTime() + 10);
});
document.querySelector("#vid-play-prev").addEventListener('click', function() {
player.playPrevious();
});
document.querySelector("#vid-play").addEventListener('click', function() {
player.play();
});
document.querySelector("#vid-play-next").addEventListener('click', function() {
player.playNext();
});
document.querySelector("#vid-pause").addEventListener('click', function() {
player.pause();
});
document.querySelector("#vid-stop").addEventListener('click', function() {
player.stop();
});
document.querySelector("#vid-mute").addEventListener('click', function() {
player.mute();
});
document.querySelector("#vid-unmute").addEventListener('click', function() {
player.unmute();
});
document.querySelector("#vid-volume-minus").addEventListener('click', function() {
player.volume(player.volume() - 0.1);
});
document.querySelector("#vid-volume-plus").addEventListener('click', function() {
player.volume(player.volume() + 0.1);
});
document.querySelector("#vid-maximize").addEventListener('click', function() {
player.maximize();
});
document.querySelector("#vid-toggle-controls").addEventListener('click', function() {
player.controls(!player.controls());
});
// Register to some video player events
var eventTypes = ['play', 'pause', 'volumechange', 'mute', 'unmute', 'fullscreenchange',
'seek', 'sourcechanged', 'percentsplayed', 'ended'];
var eventsDiv = document.querySelector('#vid-events');
eventTypes.forEach(function(eventType) {
player.on(eventType, function(event) {
var eventStr = eventType;
if (event.eventData) {
eventStr = eventStr + ": " + JSON.stringify(event.eventData);
}
var text = document.createTextNode(eventStr);
var textDiv = document.createElement('div');
textDiv.appendChild(text);
eventsDiv.appendChild(textDiv);
updateEvents();
})
});
function updateEvents() {
var eventsDiv = document.querySelector('#vid-events');
eventsDiv.scrollTop = eventsDiv.scrollHeight;
}
// Update source information when source is changed.
player.on('sourcechanged', function() {
updateSourceData();
});
function updateSourceData() {
document.querySelector("#vid-source-public-id").innerText = "Public Id: " + player.currentPublicId();
document.querySelector("#vid-source-url").innerText = "Source URL: " + player.currentSourceUrl();
}
// Set player playlist
player.playlist([
'oceans',
'negative',
'book'
], { autoAdvance: 0 }).play();