大家周末好,今天给大家继续分享webrtc的文章,在上周分享的文章里面,介绍了如何打开本地摄像头来实时显示采集画面,不过当时代码是用js写的,不知道大家有没有看明白,感兴趣的朋友可以用vs把代码跑起来看看。
今天主要分享关于如何打开电脑的麦克风并在页面播放捕获到的声音,以及如何去除回音,同时演示视频和音频同时出现,也就是类似于腾讯会议那种实时会议画面,但是暂时还是不会很难!好了,那么直接开始今天的分享吧!
还是先给出大体逻辑思维:
下面是具体代码实现:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Camera</title>
</head>
<body>
<audio id="local-audio" autoplay controls>播放麦克风捕获到的声音</audio>
<button id="playaudio">请打开麦克风</button>
<p>通过getUserMedia()获取声音</p>
<script>
//这个是音频和视频的约束条件,也就是是否要显示
const constraints={
audio: true,
video: false
};
//成功打开麦克风接口处理
function handleSuccess(stream){
const audio=document.querySelector("#local-audio");
audio.srcObject=stream;
}
//打开失败处理
function handleError(error){
console.error("getUserMedia error" + error);
}
//麦克风处理事件
function onOpenMicrophone(e){
navigator.mediaDevices.getUserMedia(constraints).then(handleSuccess).catch(handleError);
}
document.querySelector("#playaudio").addEventListener("click",onOpenMicrophone);
</script>
</body>
</html>
最终实现效果:
这个最终的效果,你可以随便说话,但是有很大的回音,体验效果不好,等下我们在和视频显示的时候一起处理!
这个代码实现逻辑和上面差不多,只是将摄像头和麦克风结合在一起了,具体代码实现如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Camera</title>
</head>
<body>
<video id="local-video" autoplay playsinline></video>
<button id="showvideo">打开音视频</button>
<div id="errorMsg"></div>
<p>通过 <code>getUserMedia()</code> 获取音视频.</p>
<script>
//这个是音频和视频的约束条件,也就是是否要显示
const constraints=(window.constraints = {
audio: true,
video: true
});
//成功打开麦克风接口处理
function handleSuccess(stream){
const video=document.querySelector("#local-video");
video.srcObject=stream;
}
//打开失败处理
function handleError(error){
console.error("getUserMedia error" + error);
}
//麦克风处理事件
async function onOpenAV(e){
navigator.mediaDevices.getUserMedia(constraints).then(handleSuccess).catch(handleError);
}
document.querySelector("#showvideo").addEventListener("click",onOpenAV);
</script>
</body>
</html>
显示效果:
这里有回音,我们可以在video里面添加一个新的属性:muted,来把这个回音关闭掉:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Camera</title>
</head>
<body>
<video id="local-video" autoplay playsinline muted controls></video>
<button id="showvideo">打开音视频</button>
<div id="errorMsg"></div>
<p>通过 <code>getUserMedia()</code> 获取音视频.</p>
<script>
//这个是音频和视频的约束条件,也就是是否要显示
const constraints=(window.constraints = {
audio: true,
video: true
});
//成功打开麦克风接口处理
function handleSuccess(stream){
const video=document.querySelector("#local-video");
video.srcObject=stream;
}
//打开失败处理
function handleError(error){
console.error("getUserMedia error" + error);
}
//麦克风处理事件
async function onOpenAV(e){
navigator.mediaDevices.getUserMedia(constraints).then(handleSuccess).catch(handleError);
}
document.querySelector("#showvideo").addEventListener("click",onOpenAV);
</script>
</body>
</html>
最终效果如下:
好了,今天的学习分享就到这里,我是txp,我们下期见!