一对一WebRTC视频通话系列(一)—— 创建页面并显示摄像头画面

本系列博客主要记录WebRtc实现过程中的一些重点,代码全部进行了注释,便于理解WebRTC整体实现。

一、创建html页面

简单添加input、button、video控件的布局。

javascript 复制代码
	<html>
	    <head>
	        <title>WebRTC demo</title>
	    </head>
	    <h1>WebRTC demo</h1>
	
	    <!-- 按钮 -->
	    <div id="buttons">
	        <input id="RoomId" type="text" placeholder="Please enter the room ID" maxlength="50"/><br/>
	        <!-- 加入房间 -->
	        <button id="joinBtn" type="button">join-room</button>
	        <!-- 离开房间 -->
	        <button id="leaveBtn" type="button">leave-room</button>
	    </div>
	
	    <!-- 视频 -->
	    <div id="videos">
	        <!-- 本地 不出声音 -->
	        <video id="localVideo" autoplay muted playsinline>本地窗口</video><br/>
	        <video id="remoteVideo" autoplay playsinline>远端窗口</video>
	    </div>
	    
	</html>

显示本地视频时,利用muted参数使得视频只显示画面,没有声音。

页面效果如下:

二、打开本地摄像头并在页面中显示画面

html末尾处添加下列代码,用来引入JavaScript文件。

javascript 复制代码
	<script src="js/main.js"></script> 

打开摄像头流程如下:

1.通过navigator.mediaDevices.getUserMedia函数请求本地摄像头和麦克风权限,

2.在权限允许的情况下打开本地视频流。

3.将本地视频流绑定到localVideo元素上,从而实现远程视频通信。

javascript 复制代码
	//获取本地视频元素和远程视频元素
	var localVideo = document.querySelector('#localVideo');
	var remoteVideo = document.querySelector('#remoteVideo');
	var localStream = null;

	//打开本地流    
	function openLocalStream(stream){
	    console.log('Open loacl stream success:',stream);
	    localVideo.srcObject = stream;
	    localStream = stream;
	}
	
	//初始化本地流
	function initLocalStream(){
	    navigator.mediaDevices.getUserMedia({
	        video: true,
	        audio: true
	    })
	    .then(openLocalStream)
	    .catch(function(e){
	        alert("getUserMedia() error: " + e.name);
	    });
	}
	
	//监听加入按钮点击事件
	document.getElementById('joinBtn').onclick = function () {
	    console.log("joinBtn clicked");
	    //初始化本地码流
	    initLocalStream();
	}

效果图如下所示:

相关推荐
DogDaoDao5 小时前
Android 硬件编码器参数完全指南:MediaCodec 深度解析
android·音视频·视频编解码·h264·硬编码·视频直播·mediacodec
音视频牛哥6 小时前
大牛直播SDK(SmartMediaKit)Windows平台RTSP/RTMP直播播放SDK集成说明(C#版)
音视频·低延迟rtsp播放器·windows rtsp播放器·windows rtmp播放器·低延迟rtmp播放器·c# rtsp播放器·c# rtmp播放器
ltlovezh7 小时前
WebRTC SFU 架构:角色、推拉流与清晰度处理逻辑
webrtc
薛定猫AI9 小时前
【深度解析】Gemini Omni 多模态生成与 Agent 化创作工作流:从视频编辑到 UI 生成的技术演进
人工智能·ui·音视频
音视频牛哥17 小时前
大牛直播SDK(SmartMediaKit)Windows平台RTSP/RTMP直播播放SDK集成说明(C++版)
windows·音视频·实时音视频·windows rtsp播放器·windows rtmp播放器·超低延迟rtsp播放器·超低延迟rtmp播放器
EasyGBS18 小时前
1分钟讲清楚选EasyNVR还是国标GB28181视频平台EasyGBS:路线不同,别选错
音视频
RTC老炮19 小时前
WebRTC AEC3 算法原理分析
算法·webrtc
日光明媚20 小时前
深度解析 SGLang 框架 Wan2.1 视频生成加速技术:从 49 分钟到 1 分钟的极致优化
人工智能·计算机视觉·aigc·音视频·sglang
小猿君20 小时前
谷歌I/O前夜Veo 4遭泄露,AI视频底层逻辑浮出水面
人工智能·音视频
南山有乔木78920 小时前
音频怎么转换MP3格式?M4A、WAV、FLAC转mp3实测有效的格式转换方法
音视频