4

jwplayer が再生を開始する前に、ビデオの長さを取得しようとしています。onReady イベントのコールバックで getDuration() を呼び出してみましたが、-1 が返されます。onPlay イベント コールバックで getDuration () を呼び出すと、正しい値が得られます。何か案は?

これが私のコードです:

<video src="movie.mp4" id="video" width="800" height="600"></video>
<script type="text/javascript">
jwplayer ('video').setup ({
    flashplayer: '/js/mediaplayer-5.10/player.swf',
    width: 600,
    height: 400,
    events: {
        onReady: function () {
            var duration = this.getDuration();
            alert ('ready, duration: ' + duration);
        },
        onPlay: function (state) {
            alert ('play, duration: ' + this.getDuration());
        }
    }
});
</script>
4

6 に答える 6

6

これは、私がこの問題を処理したおおよその方法です。

var duration = 0;
jwplayer().onReady(function() {
  if (duration == 0) {
    // we don't have a duration yet, so start playing
    jwplayer().play();
  }
});

jwPlayer().onTime(function() {
  if (duration == 0) {
    // we don't have a duration, so it's playing so we can discover it...
    duration = jwplayer().getDuration();
    jwplayer().stop();
    // do something with duration here
  } else {
    ...
  }
}
于 2013-01-24T23:00:48.810 に答える
3

それは本当です。そのための解決策が得られなかったので、2 つのイベントを使用しました。OnBuffer と OnPlay は以下のようになります。最初のイベントで -1 を提供し、2 番目のイベントで実際の長さを提供します。役立つかもしれません。終了する場合は、他の解決策を探しています。

           var duration;  
           jwplayer().onBuffer(function () {
            duration = this.getDuration();              
            alert(duration);
            }       
    );

    jwplayer().onPlay(function () {
            if(duration==-1)
            duration=this.getDuration();
            alert(duration);
            }       
    );
于 2013-01-02T11:42:13.410 に答える
1

JW Player は、ビデオの再生中にのみ再生時間を表示します

$.each(all_video_ids, function(video_idx, video_id){
        console.log(video_id);
        var temp_video = jwplayer(video_id);

        var metaData = temp_video.getMeta();
        console.log(metaData);
        console.log(temp_video);
        console.log(temp_video.getDuration());

        if(temp_video.getState() == "PLAYING"){
            temp_video.pause();
        }
    });
于 2012-10-25T16:16:23.303 に答える
0

プレーヤーの準備が整うまでの時間を取得し、次のように右のコントローラーの値を取得できます。

  var duration = $('.jw-group.jw-controlbar-right-group.jw-reset')[0];
  var spanText = $(duration).children('.jw-text.jw-reset.jw-text-duration')
  youTubeVideoDuration = ($(spanText)[0]);

それを相対時間に変換したい場合、つまり秒単位で変換したい場合は、プレーヤーから期間をフェッチします。その後、関数を使用できます

function toseconds(hms) {
var a = hms.split(':'); // split it at the colons
if (a.length == 3)
    return ((+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2])); // if video is in hrs
else
    return ((+a[0]) * 60 + (+a[1])); // video is in minutes
}
于 2016-12-27T11:07:40.327 に答える
0

この質問に頭を上げてください。最近、他のビデオプレーヤーも分析しました。チューブを除くすべてのビデオプレーヤーは、最初はビデオの長さを00:00:00として表示しています。ほとんどの場合、YouTubeはDBに長さを保存して表示しています

そうでなければ@Scott Everndenのアイデアはより理にかなっています

http://mediaelementjs.com/http://www.videojs.com/、および youtube を除くほとんどの他のサイトは 00:00:00 jwplayer のデュレーションを持ち、他のプレーヤーと同様に再生イベント後にビデオのデュレーションを提供します。

于 2013-08-27T12:37:35.273 に答える