扣丁學堂HTML5培訓簡述HTML5中的websocket如何實現直播功能

本篇文章扣丁學堂HTML5培訓小編給讀者們分享一下HTML5中的websocket如何實現直播功能,對HTML5開發感興趣或者是想要學習HTML5開發技術的小夥伴就隨小編來了解一下吧。javascript

WebSocket是HTML5開始提供的一種在單個 TCP 鏈接上進行全雙工通信的協議。java

在WebSocket API中,瀏覽器和服務器只須要作一個握手的動做,而後,瀏覽器和服務器之間就造成了一條快速通道。二者之間就直接能夠數據互相傳送。web

瀏覽器經過 JavaScript 向服務器發出創建 WebSocket 鏈接的請求,鏈接創建之後,客戶端和服務器端就能夠經過 TCP 鏈接直接交換數據。canvas

當你獲取 Web Socket 鏈接後,你能夠經過send()方法來向服務器發送數據,並經過onmessage事件來接收服務器返回的數據。瀏覽器

作的過程當中,主要的思惟是:在錄像頁面利用setTimeout()每隔固定的時間經過canvas將視頻轉化爲一幀一幀的圖像,而後用websocket的socket.send()將圖片數據發送給服務器。在直播頁面就是先建立一個<img>服務器

的結構,經過websocket的socket.onmessage()獲取到圖像數據,並展現微信

need-to-insert-imgwebsocket

<img>標籤上,造成直播。併發

need-to-insert-imgdom

錄像頁面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-8">

//建立一個+實例 

    var socket = new WebSocket("ws://"+document.domain+":8080"); 

    var back = document.getElementById('output'); 

    //返回一個用於在畫布上繪圖的環境。 

    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-8">

//建立一個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開發方面內容的小夥伴,請關注扣丁學堂HTML5培訓官網、微信等平臺,扣丁學堂IT職業在線學習教育有專業的HTML5講師爲您指導,此外扣丁學堂老師精心推出的HTML5視頻教程定能讓你快速掌握HTML5從入門到精通開發實戰技能。

相關文章
相關標籤/搜索