habe ich auch videojs
bower install videojs --save
Ich wollte meine Direktive in einem ng-repeat
und mit einem Rahmen-Objekt verwenden, so ... hier ist meine Version davon mit Requisiten oben zu Eduard. Ich hatte anscheinend kein Problem mit der Video-Player-Entsorgung, aber die source tag issue referenced war ein echtes Problem.
Ich entschied mich auch, dies als eine Antwort zu schreiben, so dass ich ein Beispiel geben könnte, wie man die videojs Ereignisse behandeln könnte.
WICHTIG! Bitte beachten Sie, dass ich Angular benutze.js mit Jinja2-Vorlagen, also musste ich meine Angular HTML-Interpolationsmarkierungen auf {[ ]}
von {{ }}
ändern, falls das jemand merkwürdig findet. Ich werde diesen Code auch einbeziehen, also ist es für niemanden seltsam.
Interpolation zwicken
app.config(['$interpolateProvider', function($interpolateProvider) {
$interpolateProvider.startSymbol('{[');
$interpolateProvider.endSymbol(']}');
}]);
Richtlinie
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);
});
}
);
}
};
});
Richtlinie HTML Nutzung
<div ng-repeat="row in videos">
<ui-video video="row"></ui-video>
</div>
Die Frage ist klar und ich ausdrücken ich falsch? –
Es sieht jetzt wie eine anständige Frage aus. Vorher, ohne Code oder Formatierung, sah es wie ein Downvote aus. Jemand könnte vielleicht helfen, ich bin auch nicht besonders erfahren mit Angular. – elclanrs
Natürlich. OK danke. In AngularJS verstehe ich nicht wirklich die Philosophie über die Verwaltung des DOM (noch ... schwer zu vergessen jQuery Gewohnheiten!) –