欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

HTML5中的websocket實(shí)現(xiàn)直播功能

  發(fā)布時(shí)間:2018-05-21 17:10:26   作者:佚名   我要評(píng)論
這篇文章主要介紹了基于HTML5中的websocket實(shí)現(xiàn)直播功能,本文附有源碼,感興趣的朋友跟隨腳本之家小編一起看看吧

做視頻直播這一塊,前期研究了很多方案,包括websocket,因?yàn)楦鞣N原因最后沒(méi)有采取這個(gè)方案,但還是想記錄一下學(xué)習(xí)的心得。

WebSocket是HTML5開(kāi)始提供的一種在單個(gè) TCP 連接上進(jìn)行全雙工通訊的協(xié)議。

在WebSocket API中,瀏覽器和服務(wù)器只需要做一個(gè)握手的動(dòng)作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。

瀏覽器通過(guò) JavaScript 向服務(wù)器發(fā)出建立 WebSocket 連接的請(qǐng)求,連接建立以后,客戶(hù)端和服務(wù)器端就可以通過(guò) TCP 連接直接交換數(shù)據(jù)。

當(dāng)你獲取 Web Socket 連接后,你可以通過(guò)send()方法來(lái)向服務(wù)器發(fā)送數(shù)據(jù),并通過(guò)onmessage事件來(lái)接收服務(wù)器返回的數(shù)據(jù)。

做的過(guò)程中,主要的思維是:在錄像頁(yè)面利用setTimeout()每隔固定的時(shí)間通過(guò)canvas將視頻轉(zhuǎn)化為一幀一幀的圖像,然后用websocket的socket.send()將圖片數(shù)據(jù)發(fā)送給服務(wù)器。在直播頁(yè)面就是先創(chuàng)建一個(gè)<img>的結(jié)構(gòu),通過(guò)websocket的socket.onmessage()獲取到圖像數(shù)據(jù),并展示<img>標(biāo)簽上,形成直播。

附上代碼

錄像頁(yè)面HTML結(jié)構(gòu)

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

錄像頁(yè)面js

<script type="text/javascript" charset="utf-8">  
        //創(chuàng)建一個(gè)+實(shí)例  
        var socket = new WebSocket("ws://"+document.domain+":8080");  
        var back = document.getElementById('output');  
        //返回一個(gè)用于在畫(huà)布上繪圖的環(huán)境。  
        var backcontext = back.getContext('2d');  
        var video = document.getElementsByTagName('video')[0];  
        var success = function(stream){  
            //獲取視屏流,轉(zhuǎn)換為url  
            video.src = window.URL.createObjectURL(stream);  
        }  
        //打開(kāi)socket  
        socket.onopen = function(){  
            draw();  
            console.log("open success")  
        }  
        // 將視頻幀繪制到Canvas對(duì)象上,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的內(nèi)容轉(zhuǎn)化成PNG data URI并發(fā)送到服務(wù)器,0.5為和壓縮系數(shù)  
                socket.send(back.toDataURL("image/jpeg", 0.5));  
            }  
            setTimeout(draw, 100);  
        }  
        //調(diào)用設(shè)備的攝像頭,并將資源放入video標(biāo)簽  
        navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||  
        navigator.mozGetUserMedia || navigator.msGetUserMedia;  
        navigator.getUserMedia({video:true, audio:false}, success, console.log);  
    </script>  

直播頁(yè)面HTML結(jié)構(gòu):

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

直播頁(yè)面JS

<script type="text/javascript" charset="utf-8">  
        //創(chuàng)建一個(gè)socket實(shí)例  
        var receiver_socket = new WebSocket("ws://"+document.domain+":8008");  
        alert("ws://"+document.domain+":8008")  
        var image = document.getElementById('receiver');  
         // 監(jiān)聽(tīng)消息  
        receiver_socket.onmessage = function(data)  
        {  
            image.src=data.data;  
        }  
    </script>  

總結(jié)

以上所述是小編給大家介紹的HTML5中的websocket實(shí)現(xiàn)直播功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論