webrtc之一 getUserMedia

WebRTC最基本的功能是对视频和音频的控制,本文介绍getUserMedia对摄像头的控制

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="description" content="WebRTC demo1">
    <meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1, maximum-scale=1">
    <meta name="mobile-web-app-capable" content="yes">
    <title>getUserMedia</title>
</head>
<body>

  <div id="container">
    <video id="video" autoplay playsinline></video>
    <button id="showVideo">Open camera</button>
    <div id="errorMsg"></div>
  </div>

<script type="text/javascript">
const constraints = { audio: false, video: true };

function handleSuccess(stream) {
  video = document.querySelector('video');
  video.srcObject = stream;
}

function handleError(error) {
  if (error.name === 'ConstraintNotSatisfiedError') {
    let v = constraints.video;
    errorMsg(`The resolution ${v.width.exact}x${v.height.exact} px is not supported by your device.`);
  } else if (error.name === 'PermissionDeniedError' || error.name === 'NotAllowedError') {
    errorMsg('拒绝了授权访问该设备');
  } else {
    errorMsg(`getUserMedia error: ${error.name}`, error);
  }
}

function errorMsg(msg, error) {
  const errorElement = document.querySelector('#errorMsg');
  errorElement.innerHTML += `<p>${msg}</p>`;
  if (typeof error !== 'undefined') {
    console.error(error);
  }
}

async function init(e) {
  try {
    const stream = await navigator.mediaDevices.getUserMedia(constraints);
    handleSuccess(stream);
    e.target.disabled = true;
  } catch (e) {
    handleError(e);
  }
}

document.querySelector('#showVideo').addEventListener('click', e => init(e));
</script>
</body>
</html>

配置好nginx, 启动nginx服务器后访问 http://localhost:9999/webrtc1.html ,点击Open camera按钮可以启动摄像头,点击允许后可以看到摄像头拍摄的画面;部署到服务器后本文的例子也可以在手机正常访问(请注意需要提供https服务)。

本文内容到此结束,更多内容可关注公众号和个人微信号:

 

抱歉,作为AI语言模型,我无法为您提供视频。但是,我可以提供一些关于WebRTC的信息和代码示例: WebRTC是一种用于实时通信的开放式网络技术,可以在浏览器和移动设备之间实现视频、音频和数据传输。以下是一个基本的WebRTC视频聊天代码示例: HTML代码: ``` <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>WebRTC Video Chat</title> </head> <body> <div> <video id="localVideo" autoplay muted></video> <video id="remoteVideo" autoplay></video> </div> <script src="main.js"></script> </body> </html> ``` JavaScript代码: ``` const localVideo = document.getElementById('localVideo'); const remoteVideo = document.getElementById('remoteVideo'); let localStream, remoteStream; // 获取本地视频流 navigator.mediaDevices.getUserMedia({ video: true, audio: true }) .then(stream => { localStream = stream; localVideo.srcObject = stream; }) .catch(error => { console.error('Error getting user media', error); }); // 创建PeerConnection对象 const peerConnection = new RTCPeerConnection(); // 添加本地视频流到PeerConnection peerConnection.addStream(localStream); // 监听远程视频流 peerConnection.onaddstream = event => { remoteStream = event.stream; remoteVideo.srcObject = remoteStream; }; // 创建SDP交换 peerConnection.createOffer() .then(offer => { return peerConnection.setLocalDescription(offer); }) .then(() => { // 将SDP交换发送给另一个端点 }) .catch(error => { console.error('Error creating offer', error); }); ``` 这只是一个基本的示例,WebRTC还有许多其他功能和配置选项。如果您想深入了解WebRTC,请查看相关文档和教程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值