標籤:

使用WebRTC構建實時通信——從攝像頭獲取視頻流(二)

使用WebRTC構建實時通信——從攝像頭獲取視頻流(二)

來自專欄 WebRTC4 人贊了文章

你會學到什麼

在這一步中,您將了解:

  • 從您的攝像頭獲取視頻流
  • 操縱流播放
  • 使用CSS和SVG來處理視頻

此步驟的完整版本位於step-01文件夾中。

一小段HTML代碼

將video元素和javascript元素添加到工作目錄中的index.html文件:

<!DOCTYPE html><html><head> <title>Realtime communication with WebRTC</title> <link rel="stylesheet" href="css/main.css" /></head><body> <h1>Realtime communication with WebRTC</h1> <video autoplay></video> <script src="js/main.js"></script></body></html>

少量JavaScript

將以下內容添加到js文件夾的main.js文件中:

use strict;navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;var constraints = { audio: false, video: true};var video = document.querySelector(video);function successCallback(stream) { window.stream = stream; // stream available to console if (window.URL) { video.src = window.URL.createObjectURL(stream); } else { video.src = stream; }}function errorCallback(error) { console.log(navigator.getUserMedia error: , error);}navigator.getUserMedia(constraints, successCallback, errorCallback);

這裡的所有JavaScript示例都使用「use strict」; 避免常見的編碼問題。詳細請了解ECMAScript 5 Strict Mode,JSON和更多內容。

Try it out

在你的瀏覽器中打開index.html,你會看到類似的東西(當然還包括你的攝像頭的視圖!):

運行原理

getUserMedia()是這樣調用的:

navigator.getUserMedia(constraints, successCallback, errorCallback);

這項技術還是比較新的,所以瀏覽器仍然使用getUserMedia的前綴名稱。 在main.js的頂部填充此代碼!

constraints參數允許您指定要獲取的媒體 - 在本例中為視頻而不是音頻:

var constraints = { audio: false, video: true};

如果getUserMedia()調用成功,則攝像頭的視頻流將被設置為視頻元素的source:

function successCallback(stream) { window.stream = stream; // stream available to console if (window.URL) { video.src = window.URL.createObjectURL(stream); } else { video.src = stream; }}

知識擴展:

  • 傳遞給getUserMedia()的流對象在全局範圍內,因此您可以從瀏覽器控制台檢查它:打開控制台,鍵入流並按回車鍵。 (要在Chrome中查看控制台,請按Ctrl-Shift-J或Command-Option-J(假如你是Mac)
  • stream.getVideoTracks() 返回什麼?
  • 嘗試調用stream.getVideoTracks()[0].stop()。
  • 查看constraints對象:將其更改為 {audio:true,video:true} 時會發生什麼?
  • 視頻元素的大小是多少? 如何從JavaScript獲得視頻的自然大小,而不是顯示大小? 使用Chrome開發工具進行檢查。
  • 嘗試將CSS過濾器添加到視頻元素。 例如:

video { -webkit-filter: blur(4px) invert(1) opacity(0.5); }

  • 嘗試添加SVG過濾器。 例如:

video { filter: hue-rotate(180deg) saturate(200%); -moz-filter: hue-rotate(180deg) saturate(200%); -webkit-filter: hue-rotate(180deg) saturate(200%); }

你學到了什麼

在這一步你學會了如何:

  • 從您的攝像頭獲取視頻。
  • 設置媒體約束。
  • 與視頻元素混淆。

此步驟的完整版本位於step-01文件夾中。

Tips

  • 不要忘記視頻元素上的自動播放屬性。 如果沒有這個,你只會看到一個框架!
  • getUserMedia() 約束有很多選項。 看看webrtc.github.io/samples/src/content/peerconnection/constraints 上的文檔。 如您所見,該站點上有許多有趣的WebRTC示例。

最佳實踐

確保您的視頻元素不會溢出其容器。 我們已經添加了寬度和最大寬度來為視頻設置首選大小和最大大小。 瀏覽器會自動計算高度:

video { max-width: 100%; width: 320px;}

有了視頻流,但你怎麼發送流呢?


推薦閱讀:

為什麼現在的直播網站的直播在播放器上加一個暫停播放按鈕?
水滴直播舉辦懇談會 共促課堂直播良性發展
怎樣看待快手被嚴肅處理?
怎麼看待教師網路直播授課?
抖音直播

TAG:WebRTC | 直播 |