użyłem również videojs
bower install videojs --save
chciałem używać mojego dyrektywę w ng-repeat
iz zakresu przedmiotu, więc ... oto moja wersja to z rekwizytami Eduard powyżej. Wygląda na to, że nie miałem problemu z utylizacją odtwarzacza wideo, ale problem polegał na source tag issue referenced.
Postanowiłem również napisać to jako odpowiedź, dzięki czemu mógłbym podać przykład tego, jak można sobie poradzić z wydarzeniami wideojs.
WAŻNE! Uwaga! Używam Angular.js z szablonami Jinja2, więc musiałem zmienić swoje znaczniki interpolacji Angular HTML na {[ ]}
z {{ }}
w przypadku, gdy ktoś zauważy to jako dziwne. Uwzględnię też ten kod, więc nie jest to dla nikogo dziwne.
interpolacja dostrojenia
app.config(['$interpolateProvider', function($interpolateProvider) {
$interpolateProvider.startSymbol('{[');
$interpolateProvider.endSymbol(']}');
}]);
dyrektywa Wykorzystanie
angular.module('myModule').directive('uiVideo', function() {
// Function for logging videojs events, possibly to server
function playLog(player, videoId, action, logToDb) {
action = action || 'view';
var time = player.currentTime().toFixed(3);
if (logToDb) {
// Implement your own server logging here
}
// Paused
if (player.paused()) {
console.log('playLog: ', action + " at " + time + " " + videoId);
// Playing
} else {
console.log('playLog: ', action + ", while playing at " + time + " " + videoId);
if (action === 'play') {
var wrapFn = function() {
playLog(player, videoId, action, logToDb);
};
setTimeout(wrapFn, 1000);
}
}
}
return {
template: [
'<div class="video">',
'<video id="video-{[ video.id ]}" class="video-js vjs-default-skin img-responsive" controls preload="none"',
' ng-src="{[ video.mp4 ]}"',
' poster="{[ video.jpg ]}"',
' width="240" height="120">',
'</video>',
'</div>'
].join(''),
scope: {
video: '=video',
logToDb: '=logToDb'
},
link: function (scope, element, attrs) {
scope.logToDb = scope.logToDb || false;
var videoEl = element[0].children[0].children[0];
var vp = videojs(videoEl, {},
function(){
this.on("firstplay", function(){
playLog(vp, scope.video.id, 'firstplay', scope.logToDb);
});
this.on("play", function(){
playLog(vp, scope.video.id, 'play', scope.logToDb);
});
this.on("pause", function(){
playLog(vp, scope.video.id, 'pause', scope.logToDb);
});
this.on("seeking", function(){
playLog(vp, scope.video.id, 'seeking', scope.logToDb);
});
this.on("seeked", function(){
playLog(vp, scope.video.id, 'seeked', scope.logToDb);
});
this.on("ended", function(){
playLog(vp, scope.video.id, 'ended', scope.logToDb);
});
}
);
}
};
});
dyrektywa HTML
<div ng-repeat="row in videos">
<ui-video video="row"></ui-video>
</div>
Pytanie jest jasne i wyrażam się mylę? –
Wygląda teraz na przyzwoite pytanie. Wcześniej, bez kodu i formatowania, wyglądało to jak downwote. Ktoś może ci pomóc, nie mam też dużego doświadczenia z Angularem. – elclanrs
Oczywiście. Ok dzięki. W AngularJS, naprawdę nie rozumiem filozofii zarządzania DOMem (jeszcze ... trudno zapomnieć nawyki jQuery!) –