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

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

一、创建html页面

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

	<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文件。

	<script src="js/main.js"></script> 

打开摄像头流程如下:
1.通过navigator.mediaDevices.getUserMedia函数请求本地摄像头和麦克风权限,
2.在权限允许的情况下打开本地视频流。
3.将本地视频流绑定到localVideo元素上,从而实现远程视频通信。

	//获取本地视频元素和远程视频元素
	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();
	}

效果图如下所示:
在这里插入图片描述

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
要使用 webRTC 进行一对一视频通话,需要以下步骤: 1. 建立本地媒体流对象 使用 getUserMedia() 方法获取本地视频和音频流对象。 ```javascript navigator.mediaDevices.getUserMedia({ video: true, audio: true }) .then(function(localStream) { // localStream 是本地媒体流对象 }) .catch(function(error) { console.log(error); }); ``` 2. 建立 peer connection 对象 使用 RTCPeerConnection() 方法创建 peer connection 对象,并将本地媒体流对象添加到 peer connection 中。 ```javascript var pc = new RTCPeerConnection(); localStream.getTracks().forEach(function(track) { pc.addTrack(track, localStream); }); ``` 3. 建立远程媒体流对象 通过 peer connection 对象,监听远程的媒体流对象。 ```javascript pc.addEventListener('track', function(event) { // event.streams 是一个媒体流对象数组 var remoteStream = event.streams[0]; }); ``` 4. 发送 offer 和 answer 通过 peer connection 对象,发送 offer 和 answer 信令,建立连接。 ```javascript pc.createOffer() .then(function(offer) { return pc.setLocalDescription(offer); }) .then(function() { // 发送 offer 信令 }) .catch(function(error) { console.log(error); }); // 接收到 offer 信令后,回复 answer 信令 pc.setRemoteDescription(offer) .then(function() { return pc.createAnswer(); }) .then(function(answer) { return pc.setLocalDescription(answer); }) .then(function() { // 发送 answer 信令 }) .catch(function(error) { console.log(error); }); // 接收到 answer 信令后,设置远程描述 pc.setRemoteDescription(answer) .catch(function(error) { console.log(error); }); ``` 5. 连接成功后,进行视频通话 当连接成功后,就可以在页面显示本地视频和远程视频,并进行视频通话了。 ```javascript // 添加本地视频和远程视频 var localVideo = document.getElementById('localVideo'); var remoteVideo = document.getElementById('remoteVideo'); localVideo.srcObject = localStream; remoteVideo.srcObject = remoteStream; ``` 完整的一对一视频通话示例代码请参考:https://webrtc.github.io/samples/src/content/peerconnection/pc1/

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君莫笑lucky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值