WebRTC(Web Real-Time Communication,網頁實時通信),是一個支持網頁瀏覽器進行實時語音對話或視頻對話的API。
1、getUserMedia
要播放攝像頭的影像,首先需要一個video標簽:
<video id="video"></video>
獲取攝像頭影像主要是通過navigator.getUserMedia
這個接口,這個接口的支持情況已經逐漸變好了:點這里
不過,使用的時候還是要加上前綴的,兼容代碼:
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
語法:
navigator.getUserMedia(constraints, successCallback, errorCallback);
參數說明:
constraints
:Object類型,指定了請求使用媒體的類型succeCallback
:啟用成功時的函數,它傳入一個參數,為視頻流對象,可以進一步通過window.URL.createObjectURL()
接口把視頻流轉換為對象URL。errorCallback
:啟動失敗時的函數。它傳入一個參數,為錯誤對象(chrome)或錯誤信息字符串(Firefox),可能值:
PERMISSION_DENIED:用戶拒絕提供信息。
NOT_SUPPORTED_ERROR:瀏覽器不支持硬件設備。
MANDATORY_UNSATISFIED_ERROR:無法發現指定的硬件設備。
例如:要啟用視頻設備(攝像頭),可這樣:
navigator.getUserMedia({ video: true });
如果要同時啟用視頻設備和音頻設備,可這樣:
navigator.getUserMedia({ video: true, audio: true });
2、 獲取攝像頭
var URL = window.URL || window.webkitURL; // 獲取到window.URL對象 navigator.getUserMedia({ video: true }, function(stream) { video.src = URL.createObjectURL(stream);// 將獲取到的視頻流對象轉換為地址 video.play(); }, function(error) { console.log(error.name || error); });
3、 截圖
除了實時直播外,我們還可以做實時截圖效果,這時我們需要利用
<canvas>
元素來畫圖,代碼如下:
<canvas id="canvas"></canvas> var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); var width = video.width; var height = video.height; canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height);
4、 保存圖片
當然,截圖后,你也可以保存下來:
<a download='snap.png' id="download">下載圖片</a> var url = canvas.toDataURL('image/png'); document.getElementById('download').src = url;
5、 完整實例
實例代碼(由於安全限制問題,請將代碼復制到本地運行):
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> #canvas,#video { float: left; margin-right: 10px; background: #fff; } .box { overflow: hidden; margin-bottom: 10px; } </style> </head> <body> <div class="box"> <video id="video" width="400" height="300"></video> <canvas id="canvas"></canvas> </div> <button id="live">直播</button> <button id="snap">截圖</button> <script> var video = document.getElementById('video'); var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); var width = video.width; var height = video.height; canvas.width = width; canvas.height = height; function liveVideo(){ var URL = window.URL || window.webkitURL; // 獲取到window.URL對象 navigator.getUserMedia({ video: true }, function(stream){ video.src = URL.createObjectURL(stream); // 將獲取到的視頻流對象轉換為地址 video.play(); // 播放 //點擊截圖 document.getElementById("snap").addEventListener('click', function() { ctx.drawImage(video, 0, 0, width, height); var url = canvas.toDataURL('image/png'); document.getElementById('download').href = url; }); }, function(error){ console.log(error.name || error); }); } document.getElementById("live").addEventListener('click',function(){ liveVideo(); }); </script> </body> </html>