webRTC學習筆記(2)

MediaRecorder構造函數會創建一個對指定的 MediaStream進行錄製的 MediaRecorder 對象,

接收兩個參數,一個是流,一個是可選對象,對象的mineType爲新構建的 MediaRecorder 指定錄製容器的MIME類型. 在應用中通過調用 MediaRecorder.isTypeSupported來檢查瀏覽器是否支持此種mimeType .,audioBitsPerSecond: 指定音頻的比特率.,videoBitsPerSecond: 指定視頻的比特率.,bitsPerSecond: 指定音頻和視頻的比特率. 此屬性可以用來指定上面兩個屬性. 如果上面兩個屬性只有其中之一和此屬性被指定, 則此屬性可以用於設定另外一個屬性.

下面這個例子實現了錄製播放視頻的功能

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>使用WebRTC錄製視頻</title>
</head>
<body>
<video id="source" autoplay muted></video>		<!-- 顯示攝像頭的源視頻 -->
<video id="recorded" loop controls></video>	<!-- 顯示已錄製的視頻 -->
<div>
	<button id="record" disabled>開始錄製</button>	<!-- 播放按鈕 -->
</div>
    <script>
 var mediaRecorder, recordedBlobs// 聲明變量
var sourceVideo = document.getElementById('source');	// 源視頻
var recordedVideo = document.getElementById('recorded');	// 已錄製視頻
var recordButton = document.getElementById('record');	// 錄製按鈕
recordButton.onclick = toggleRecording;	// 設置錄製按鈕點擊動作

// 設置媒體約束,接收聲音和視頻,視頻寬度爲320像素
var constraints = { audio: true, video: { width: 320 } };

// 成功獲取用戶媒體
function handleSuccess(stream) {
	recordButton.disabled = false;	// 設置錄製按鈕可用
	window.stream = stream;
	sourceVideo.srcObject = stream;	// 將攝像頭畫面顯示在sourceVideo上
}

// 獲取用戶媒體異常
function handleError(error) {
	console.log('獲取用戶媒體錯誤: ', error);
}

// 獲取用戶媒體
navigator.mediaDevices.getUserMedia(constraints).
		then(handleSuccess).catch(handleError);


// 處理數據可用
function handleDataAvailable(event) {
	if (event.data && event.data.size > 0) {
		recordedBlobs.push(event.data);	// 將數據追加到錄製記錄中
	}
}

// 切換錄製
function toggleRecording() {
	if (recordButton.textContent === '開始錄製') {
		startRecording();	// 開始錄製
	} else {
		stopRecording();	// 停止錄製
		recordButton.textContent = '開始錄製';
	}
}

// 開始錄製
function startRecording() {
	recordedBlobs = [];	// 數據記錄初始化
	var mimeTypes = ['video/webm;codecs=vp9', 'video/webm;codecs=vp8',
		'video/webm'];
	// 查找支持的視頻格式
	var mimeType = mimeTypes.find(type=>MediaRecorder.isTypeSupported(type)) || '';
	try {
		// 創建媒體錄製器
		mediaRecorder = new MediaRecorder(window.stream, { mimeType });
	} catch (e) {
		alert('創建媒體錄製器異常');
		return;
	}
	recordButton.textContent = '停止錄製';
	mediaRecorder.ondataavailable = handleDataAvailable;
	mediaRecorder.start(10);
}

// 停止錄製
function stopRecording() {
	mediaRecorder.stop();
	var buf = new Blob(recordedBlobs, { type: 'video/webm' });
	// 設置已錄製視頻的源爲錄製好的視頻
	recordedVideo.src = window.URL.createObjectURL(buf);
}

    </script>


</body>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章