Длительность Videojs отображается как 0 для всего видео - PullRequest
0 голосов
/ 12 июня 2018

Я использую videojs.По какой-то причине продолжительность видео отображается как 0, даже при полной загрузке.
В строке 2487 файла video.js я позаботился об этом разделе ...

ControlBar.prototype.options_ = {
  children: ['playToggle', 'volumeMenuButton', 'currentTimeDisplay', 'timeDivider', 'durationDisplay', 'progressControl', 'liveDisplay', 'remainingTimeDisplay', 'customControlSpacer', 'playbackRateMenuButton', 'chaptersButton', 'descriptionsButton', 'subtitlesButton', 'captionsButton', 'audioTrackButton', 'fullscreenToggle']
};

...include свойство 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();

            }

По предложению в комментариях я также попытался прослушать событие «loadedmetadata », когда videojsэлемент создается следующим образом:

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 »и чтоУтешается.

Может ли это быть проблемой кодирования видео?Я искал, как экспортировать из Premiere с включенными метаданными длительности, но, насколько я могу судить, он есть.

Любые подсказки, высоко ценится.

1 Ответ

0 голосов
/ 13 июня 2018

ОК, я наконец-то понял: это не связано с метаданными;Версия video.js, которую мы по какой-то причине использовали, жестко закодировала значение продолжительности как «0:00».Если это кому-то пригодится, вот что я добавил (к файлу video.js из строки 5241), чтобы получить правильное отображение длительности:

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;
  };
...