我正在使用videojs。由于某种原因,视频的持续时间显示为0,即使在满载时也是如此 在video.js文件的第2487行,我确定了这一部分......
ControlBar.prototype.options_ = {
children: ['playToggle', 'volumeMenuButton', 'currentTimeDisplay', 'timeDivider', 'durationDisplay', 'progressControl', 'liveDisplay', 'remainingTimeDisplay', 'customControlSpacer', 'playbackRateMenuButton', 'chaptersButton', 'descriptionsButton', 'subtitlesButton', 'captionsButton', 'audioTrackButton', 'fullscreenToggle']
};
...包含'durationDisplay'属性,所以有人知道为什么持续时间显示为0?
视频是mp4并加载到AngularJS指令中:
app.directive('engVideo',['$timeout', '$http', function($timeout, $http) {
return {
restrict: 'A',
priority: 100,
replace: true,
templateUrl: 'components/video.html',
link: function(scope, element, attrs) {
....
function VideoJSPlayerInit(window, videojs) {
var player = videojs(scope.component.video.id, {
html5: {
nativeTextTracks: false
}
});
player.pause();
}
根据评论中的建议,我还尝试在创建videojs元素时监听'loadedmetadata'事件,如下所示:
function VideoJSPlayerInit(window, videojs) {
var player = videojs(scope.component.video.id, {
html5: {
nativeTextTracks: false
}
}, function() {
this.on('loadedmetadata', function(){
console.log("video metadata loaded");
});
}
);
但没有任何东西输出到控制台 - 所以我猜测没有加载元数据(?)我也改变了它来监听'loadeddata'事件并且DOES得到了安慰。
这可能是视频编码问题吗?我一直在寻找如何从包含持续时间元数据的Premiere导出,但据我所知,它就在那里。
任何线索,非常感谢。
答案 0 :(得分:0)
好的,我终于明白了:这与元数据没有关系;我们出于某种原因使用的video.js版本将持续时间值硬编码为' 0:00'。如果它对其他人有用,请点击此处添加(从第5241行到video.js文件)以获得正确显示的持续时间:
DurationDisplay.prototype.createEl = function createEl() {
var el = _Component.prototype.createEl.call(this, 'div', {
className: 'vjs-duration vjs-time-control vjs-control'
});
// following three lines are new...
var intSeconds = parseInt(this.player_.duration());
var intMinutes = parseInt(intSeconds / 60);
intSeconds = intSeconds - (60 * intMinutes);
this.contentEl_ = Dom.createEl('div', {
className: 'vjs-duration-display',
// label the duration time for screen reader users
//innerHTML: '<span class="vjs-control-text">' + this.localize('Duration Time') + '</span> 0:00' // - old line
innerHTML: '<span class="vjs-control-text">' + this.localize('Duration Time') + '</span>' + intMinutes + ':' + intSeconds
}, {
// tell screen readers not to automatically read the time as it changes
'aria-live': 'off'
});
el.appendChild(this.contentEl_);
return el;
};