【问题标题】:How to randomize video playlist in Javascript / Html5如何在 Javascript / Html5 中随机化视频播放列表
【发布时间】:2013-09-16 02:46:22
【问题描述】:

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

非常感谢您的帮助!提前致谢!!

【问题讨论】:

    标签: javascript video canvas random playlist


    【解决方案1】:

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

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

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

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

    Online demo here(打开控制台查看“排序”列表)。

    对于连续视频播放器,您可以查看我不久前制作的 this fiddle。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 2015-11-21
      • 1970-01-01
      相关资源
      最近更新 更多