繁体   English   中英

如何在Javascript / HTML5中将视频播放列表随机化

[英]How to randomize video playlist in Javascript / Html5

我是JS的初学者,我想知道如何随机分配视频播放列表(JS),我想使用画布查看受“保护”的视频(通过画布传递视频),然后将视频循环到重新开始,视频连续播放列表随机化。 马不停蹄

帮助将不胜感激! 提前致谢!!

您可以简单地将列表生成为数组:

var videoList = [video1url, video2url, ...];

然后使用自定义分类器对其进行分类,该分类器将对其随机化:

videoList.sort(function(a, b) {return 0.5 - Math.random()});

此处在线演示 (打开控制台以查看“已排序”列表)。

对于连续的视频播放器,您可以查看我前一段时间做过的小提琴

var ctx = canvas.getContext('2d'),             /// get canvas
    w = canvas.width,                          /// cache dimensions
    h = canvas.height,
    video1 = document.createElement('video'),  /// two video elements
    video2 = document.createElement('video'),
    isVideo1 = false,                          /// toggler
    list = [],                                 /// video list
    current = 0,                               /// index
    isPlaying = false;                         /// is video playing

/// add event handlers so we know when a video finished
video1.addEventListener('ended', play, false);
video2.addEventListener('ended', play, false);

/**
 *  Then we add a few videos to our list
*/

/// first arg. is always mp4 version, second anything else (ogg, webm etc)
addVideo('somevideourl1.mp4', 'somevideourl.ogg');
addVideo('somevideourl2.mp4', 'somevideour2.webm');

/// here you re-sort your list with the random (see details for list)
list.sort(function(a, b) {return 0.5 - Math.random()});

/// get first video    
getVideo(list[0], play);

/// start loop
render();

/// this will start play the videos
function play(){

    /// what video to start
    var video = (isVideo1 === false ? video1 : video2),
        next = current;

    /// toggle    
    isVideo1 = !isVideo1;

    /// get next video in list
    next++;
    if (next > list.length - 1) next = 0;

    if (list.length > 0) getVideo(list[next]);

    /// start video
    video.play();
    isPlaying = true;

    current = next;
}

/// this draws the video frames to canvas    
function render() {
    if (isPlaying) {
        var video = (isVideo1 === true ? video1 : video2);
        ctx.drawImage(video, 0, 0, w, h);
    }
    requestAnimationFrame(render);
}

/// this function adds a video to the list    
function addVideo(urlMP4, url) {
    list.push({
        urlMP4: urlMP4,
        url: url,
        isReady: false
    })
}

/// start download a video
function getVideo(vid, callback) {

    var video = (isVideo1 === false ? video1 : video2),
        me = this;

    video.addEventListener('canplay', canPlay, false);;

    function canPlay(e) {
        video.removeEventListener('canplay', canPlay, false);
        vid.isReady = true;
        if (typeof callback === 'function')
            callback(vid);
    }

    if (video.canPlayType("video/mp4").length > 0) {
        video.src = vid.urlMP4;
    } else {
        video.src = vid.url;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM