Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Chrome中同时播放6个以上基于HTML5的webm视频_Javascript_Google Chrome_Video Streaming_Html5 Video_Webm - Fatal编程技术网

Javascript 在Chrome中同时播放6个以上基于HTML5的webm视频

Javascript 在Chrome中同时播放6个以上基于HTML5的webm视频,javascript,google-chrome,video-streaming,html5-video,webm,Javascript,Google Chrome,Video Streaming,Html5 Video,Webm,我正在寻找一种在谷歌Chrome上为CCTV应用程序流式传输多(16)个实时webm视频的方法。到目前为止,我尝试的每件事都会在6个直播流中进行,然后视频开始触发“暂停”事件——有人知道解决这个问题的方法吗 以下是我正在使用的代码: <html> <head> <script src="jquery-1.9.1.min.js" type="text/javascript"></script> </head> <body style

我正在寻找一种在谷歌Chrome上为CCTV应用程序流式传输多(16)个实时webm视频的方法。到目前为止,我尝试的每件事都会在6个直播流中进行,然后视频开始触发“暂停”事件——有人知道解决这个问题的方法吗

以下是我正在使用的代码:

<html>
<head>
<script src="jquery-1.9.1.min.js" type="text/javascript"></script>
</head>
<body style="border: 0px; margin: 0px; padding: 0px; background-color: #000000; overflow: hidden;">
<div id="divMain" style="display: block; position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; border: 0px; margin: 0px; 

padding: 0px; overflow: hidden;"></div>
<script language="JavaScript" type="text/javascript">
<!--
var streams = new Array();
streams.Load = function (index) {
    console.log(index, 'LOAD');
    streams.push(document.createElement('video'));
    streams[index].id = 'stream' + index;
    streams[index].autoplay = 'autoplay';
    streams[index].style.display = 'block';
    streams[index].style.position = 'absolute';
    streams[index].width = this.Width;
    streams[index].height = this.Height;
    streams[index].style.left = ((index - (Math.floor(index / 4) * 4)) * this.Width) + 'px';
    streams[index].style.top = (Math.floor(index / 4) * this.Height) + 'px';
    streams[index].style.width = this.Width + 'px';
    streams[index].style.height = this.Height + 'px';
    $(streams[index]).bind('loadedmetadata', streams[index], function (event) {
        console.log(event.data.id, 'loadedmetadata');
        var actualRatio = event.data.videoWidth / event.data.videoHeight;
        var targetRatio = $(event.data).width() / $(event.data).height();
        var adjustmentRatio = (targetRatio / actualRatio);
        $(event.data).css('-webkit-transform', 'scaleX(' + adjustmentRatio + ')');
    });
    $(streams[index]).bind('loadstart', streams[index], function (event) { console.log(event.data.id, 'loadstart'); });
    $(streams[index]).bind('emptied', streams[index], function (event) { console.log(event.data.id, 'emptied'); });
    $(streams[index]).bind('canplaythrough', streams[index], function (event) { console.log(event.data.id, 'canplaythrough'); });
    $(streams[index]).bind('ended', streams[index], function (event) { console.log(event.data.id, 'ended'); });
    $(streams[index]).bind('ratechange', streams[index], function (event) { console.log(event.data.id, 'ratechange'); });
    $(streams[index]).bind('stalled', streams[index], function (event) { console.log(event.data.id, 'stalled'); streams.LoadNext(); 

});
    $(streams[index]).bind('playing', streams[index], function (event) { console.log(event.data.id, 'playing'); });
    $(streams[index]).bind('durationchange', streams[index], function (event) { console.log(event.data.id, 'durationchange'); });
    $(streams[index]).bind('volumechange', streams[index], function (event) { console.log(event.data.id, 'volumechange'); });
    $(streams[index]).bind('suspend', streams[index], function (event) { console.log(event.data.id, 'suspend'); });
    $(streams[index]).bind('waiting', streams[index], function (event) { console.log(event.data.id, 'waiting'); });
    $(streams[index]).bind('timeupdate', streams[index], function (event) { console.log(event.data.id, 'timeupdate'); });
    $(streams[index]).bind('abort', streams[index], function (event) { console.log(event.data.id, 'abort'); });
    $(streams[index]).bind('loadeddata', streams[index], function (event) { console.log(event.data.id, 'loadeddata'); });
    $(streams[index]).bind('seeking', streams[index], function (event) { console.log(event.data.id, 'seeking'); });
    $(streams[index]).bind('play', streams[index], function (event) { console.log(event.data.id, 'play'); });
    $(streams[index]).bind('error', streams[index], function (event) { console.log(event.data.id, 'error'); });
    $(streams[index]).bind('canplay', streams[index], function (event) { console.log(event.data.id, 'canplay'); });
    $(streams[index]).bind('seeked', streams[index], function (event) { console.log(event.data.id, 'seeked'); });
    $(streams[index]).bind('pause', streams[index], function (event) { console.log(event.data.id, 'pause'); });
    streams[index].source = document.createElement('source');
    streams[index].source.src = 'http://10.1.1.15:8090/' + index + '.webm';
    streams[index].source.type = 'video/webm';
    streams[index].appendChild(streams[index].source);
    divMain.appendChild(streams[index]);
    streams.LoadNext();
};
streams.LoadNext = function () { if (this.length < 16) { this.Load(this.length); } };
streams.Width = 320;
streams.Height = 240;
$(window).ready(function() {
    var divMain = document.getElementById('divMain');
    streams.Width = divMain.offsetWidth / 4;
    streams.Height = divMain.offsetHeight / 4;
    var tsource = null;
    streams.LoadNext();
});
$(window).resize(function() {
    var divMain = document.getElementById('divMain');
    streams.Width = divMain.offsetWidth / 4;
    streams.Height = divMain.offsetHeight / 4;
    for (var i = 0; i < streams.length; i++) {
        streams[i].width = streams.Width;
        streams[i].height = streams.Height;
        streams[i].style.left = ((i - (Math.floor(i / 4) * 4)) * streams.Width) + 'px';
        streams[i].style.top = (Math.floor(i / 4) * streams.Height) + 'px';
        streams[i].style.width = streams.Width + 'px';
        streams[i].style.height = streams.Height + 'px';
        var actualRatio = streams[i].videoWidth / streams[i].videoHeight;
        var targetRatio = $(streams[i]).width() / $(streams[i]).height();
        var adjustmentRatio = (targetRatio / actualRatio);
        if (adjustmentRatio >= 1) {
            $(streams[i]).css('-webkit-transform', 'scaleX(' + adjustmentRatio + ')');
        } else {
            $(streams[i]).css('-webkit-transform', 'scaleY(' + (1 / adjustmentRatio) + ')');
        }
    }
});
//-->
</script>
</body>
</html>


我通过设置多个指向同一IP地址的子域,并在每个子域上运行4个流来解决这个问题(保留2个打开,只是为了保持理智,以防其他任何人决定攻击它们)。它仍然不是一个允许多个浏览器窗口的解决方案,但它至少可以让所有流同时运行。

这些视频都是320x240吗?它们的大小都是320x240,是的(字数限制让我更加冗长)。我想你会因为大小限制问题而崩溃。我试着加载一个超过GB大小的视频,Chrome甚至一次都无法渲染。这个“视频”在GB以下,是一个实时流。实际上,通过为同一IP创建多个名称服务器条目,我成功地显示了所有16个名称服务器条目,但在缓冲时有3-5秒的延迟(无论是1个视频还是16个),因此现在出现了一个新问题,如果有人找到更好的方法,请保留此选项。