webrtc 三------音视频录制及下载

MediaRecoder

MediaRecoder构造函数会创建一个对指定的 MediaStream 进行录制的 MediaRecorder 对象

var mediaRecorder = new MediaRecorder(stream[, options]);
//stream:音视频流
//options:限制选项

开始录制

mediaRecorder.start(timeslice);//timeslice设置时间片(number)可选

停止录制

mediaRecorder.stop();

示例

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>音视频录制</title>
</head>

<body>
	<div>
		<table>
			<tr>
				<td><video autoplay playsinline id="player"></video></td>
				<td><video playsinline id="recplayer"></video></td>
			</tr>
			<tr>
				<td><button id="record">开始录制</button></td>
				<td><button id="recplay" disabled>播放</button></td>
				<td><button id="download" disabled>下载</button></td>
			</tr>
		</table>
	</div>
	<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
	<script>
		'use strict'
		var videoplay = document.getElementById('player');
		var btnRecord = document.getElementById('record');
		var btnPlay = document.getElementById('recplay');
		var btnDownload = document.getElementById('download');
		var recvideo = document.getElementById('recplayer');
		var Stream;//音视频流
		var buffer;//存音视频数据
		var mediaRecorder;
		//音视频数据
		function gotMediaStream(stream) {
			window.Stream = stream
			videoplay.srcObject = stream;//将获取到的流赋给video标签
		}
		function handleError(err) {
			console.log(err.name + " : " + err.message);
		}
		if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
			console.log("你的浏览器不支持getUserMedia")
		} else {
			var constraints = {
				video: true,
				audio : {
				echoCancellation:true,//回音消除
				noiseSuppression:true,//降噪
			} 
			}
			navigator.mediaDevices.getUserMedia(constraints)
				.then(gotMediaStream)
				.catch(handleError);
		}
		//存音视频数据
		function handleDataAvailable(e) {
			if (e && e.data && e.data.size > 0) {
				buffer.push(e.data);//将数据存到buffer中
			}
		}
		//开始录制
		function startRecord() {
			buffer = [];
			var options = {
				mimeType: 'video/webm;codecs=vp8'//类型及编解码等
			}
			if (!MediaRecorder.isTypeSupported(options.mimeType)) {//判断options穿的值当前浏览器是否支持
				console.error(`不支持${options.mimeType} `);
				return;
			}
			try {
				mediaRecorder = new MediaRecorder(Stream, options);//创建一个MediaRecorder
			} catch (e) {
				console.error(e);
				return;
			}
			mediaRecorder.ondataavailable = handleDataAvailable;//处理数据存储数据
			mediaRecorder.start(10);//设置时间片为十
		}
		//停止录制
		function stopRecord() {
			mediaRecorder.stop();
		}
		//录制按钮点击事件
		btnRecord.onclick = () => {
			if (btnRecord.textContent === '开始录制') {
				startRecord();
				btnRecord.textContent = '停止录制';
				btnPlay.disabled = true;
				btnDownload.disabled = true;
			} else {
				stopRecord();
				btnRecord.textContent = '开始录制';
				btnPlay.disabled = false;
				btnDownload.disabled = false;

			}
		}
		//播放
		btnPlay.onclick = () => {
			var blob = new Blob(buffer, { type: 'video/webm' });
			//创建url 使用video.play()播放视频
			recvideo.src = window.URL.createObjectURL(blob);
			recvideo.srcObject = null;
			recvideo.controls = true;
			recvideo.play();
		}

		//下载
		btnDownload.onclick = () => {
			var blob = new Blob(buffer, { type: 'video/webm' });
			var url = window.URL.createObjectURL(blob);//创建url
			//创建a标签 并隐藏 使用a.click()下载文件
			var a = document.createElement('a');
			a.href = url;
			a.style.display = 'none';
			a.download = '视频录制.webm';
			a.click();
		}
	</script>

</body>

</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值