全国服务热线:4008-888-888

技术知识

HTML5中的websocket完成直播间作用

做视頻直播间这1块,早期科学研究了许多计划方案,包含websocket,由于各种各样缘故最终沒有采用这个计划方案,但還是想纪录1下学习培训的心得。

WebSocket是HTML5刚开始出示的1种在单独 TCP 联接勤奋行全双工通信的协议书。

在WebSocket API中,访问器和服务器只必须做1个握手的姿势,随后,访问器和服务器之间就产生了1条迅速安全通道。二者之间就立即能够数据信息相互之间传输。

访问器根据 JavaScript 向服务器传出创建 WebSocket 联接的恳求,联接创建之后,顾客端和服务器端便可以根据 TCP 联接立即互换数据信息。

当你获得 Web Socket 联接后,你能够根据send()方式来向服务器推送数据信息,并根据onmessage恶性事件来接受服务器回到的数据信息。

做的全过程中,关键的逻辑思维是:在录相网页页面运用setTimeout()每隔固定不动的時间根据canvas将视頻转换为1帧1帧的图象,随后用websocket的socket.send()将照片数据信息推送给服务器。在直播间网页页面便是先建立1个<img>的构造,根据websocket的socket.onmessage()获得到图象数据信息,并展现<img>标识上,产生直播间。

附上编码

录相网页页面HTML构造

<video autoplay id="sourcevid" style="width:1600;height:900px"></video>  
    <canvas id="output" style="display:none"></canvas>  

录相网页页面js

<script type="text/javascript" charset="utf⑻">  
        //建立1个+案例  
        var socket = new WebSocket("ws://"+document.domain+":8080");  
        var back = document.getElementById('output');  
        //回到1个用于在画布上制图的自然环境。  
        var backcontext = back.getContext('2d');  
        var video = document.getElementsByTagName('video')[0];  
        var success = function(stream){  
            //获得视屏流,变换为url  
            video.src = window.URL.createObjectURL(stream);  
        }  
        //开启socket  
        socket.onopen = function(){  
            draw();  
            console.log("open success")  
        }  
        // 将视頻帧绘图到Canvas目标上,Canvas每100ms切换帧,产生肉眼视頻实际效果    
        var draw = function(){  
            try{  
                backcontext.drawImage(video,0,0, back.width, back.height);  
            }catch(e){  
                if (e.name == "NS_ERROR_NOT_AVAILABLE") {  
                    return setTimeout(draw, 100);  
                } else {  
                    throw e;  
                }  
            }  
            if(video.src){  
                // Canvas的內容转换成PNG data URI高并发送到服务器,0.5为和缩小系数  
                socket.send(back.toDataURL("image/jpeg", 0.5));  
            }  
            setTimeout(draw, 100);  
        }  
        //启用机器设备的摄像头,并将資源放入video标识  
        navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||  
        navigator.mozGetUserMedia || navigator.msGetUserMedia;  
        navigator.getUserMedia({video:true, audio:false}, success, console.log);  
    </script>  

直播间网页页面HTML构造:

<img id="receiver" style="width:1600px;height:900px"/>  

直播间网页页面JS

<script type="text/javascript" charset="utf⑻">  
        //建立1个socket案例  
        var receiver_socket = new WebSocket("ws://"+document.domain+":8008");  
        alert("ws://"+document.domain+":8008")  
        var image = document.getElementById('receiver');  
         // 监视信息  
        receiver_socket.onmessage = function(data)  
        {  
            image.src=data.data;  
        }  
    </script>  

总结

以上所述是网编给大伙儿详细介绍的HTML5中的websocket完成直播间作用,期待对大伙儿有一定的协助,假如大伙儿有任何疑惑请给我留言,网编会立即回应大伙儿的。在此也十分谢谢大伙儿对脚本制作之家网站的适用!



在线客服

关闭

客户服务热线
4008-888-888


点击这里给我发消息 在线客服

点击这里给我发消息 在线客服