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>
