麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > HTML5 > 正文

HTML5中的websocket實現直播功能

2024-09-05 07:22:31
字體:
來源:轉載
供稿:網友

做視頻直播這一塊,前期研究了很多方案,包括websocket,因為各種原因最后沒有采取這個方案,但還是想記錄一下學習的心得。

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

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

瀏覽器通過 JavaScript 向服務器發出建立 WebSocket 連接的請求,連接建立以后,客戶端和服務器端就可以通過 TCP 連接直接交換數據。

當你獲取 Web Socket 連接后,你可以通過send()方法來向服務器發送數據,并通過onmessage事件來接收服務器返回的數據。

做的過程中,主要的思維是:在錄像頁面利用setTimeout()每隔固定的時間通過canvas將視頻轉化為一幀一幀的圖像,然后用websocket的socket.send()將圖片數據發送給服務器。在直播頁面就是先創建一個<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-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中的websocket實現直播功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人在线视频免费观看 | 久久草在线观看视频 | 热99视频| 人禽l交免费视频观看 视频 | 欧美羞羞视频 | 成人午夜在线播放 | 强伦女教师视频 | av电影在线观看网站 | 中文字幕免费在线看 | 一级观看免费完整版视频 | 免费在线成人网 | 亚洲精品aⅴ中文字幕乱码 欧美囗交 | 九草网 | 国产精品成人一区二区三区电影毛片 | 亚洲国产综合在线观看 | 亚洲人成网站免费播放 | 国产在线一级片 | 深夜影院a | 日本最新免费二区三区 | 中国a级黄色片 | 毛片大全 | 777zyz色资源站在线观看 | 国产精品欧美久久久久一区二区 | hdhdhdhd19日本人 | 有色视频在线观看 | 视频一区免费观看 | 亚洲精品成人久久久 | 欧美人禽| 国产1级视频 | 一级一片免费看 | 中文字幕线观看 | h视频在线免费观看 | 久久超 | 成人h精品动漫一区二区三区 | 成人一区二区三区四区 | 2021av视频| 黄色网址在线播放 | 午夜视频中文字幕 | 日韩午夜一区二区三区 | aaaaa国产欧美一区二区 | 在线观看视频亚洲 |