likes
comments
collection
share

WebRTC 构建实时通信应用

作者站长头像
站长
· 阅读数 25

1. 准备工作

在开始之前,确保你已经安装了 Node.js 和 npm。然后,创建一个新的 React 项目:

npx create-react-app webrtc-demo
cd webrtc-demo

接下来,安装 simple-peer,这是一个简单易用的 WebRTC 库:

npm install simple-peer

2. 创建实时通信组件

我们将创建一个简单的 React 组件来实现实时通信功能。首先,在 src 目录下创建一个新文件 WebRTC.js,并添加以下代码:

// WebRTC.js
import React, { useRef, useEffect } from 'react';
import SimplePeer from 'simple-peer';

function WebRTC() {
  const localVideoRef = useRef();
  const remoteVideoRef = useRef();
  const peerRef = useRef();

  useEffect(() => {
    navigator.mediaDevices.getUserMedia({ video: true, audio: true })
      .then((stream) => {
        localVideoRef.current.srcObject = stream;
        peerRef.current = new SimplePeer({ initiator: true, trickle: false, stream });
        peerRef.current.on('signal', (data) => {
          console.log('SIGNAL', JSON.stringify(data));
        });
        peerRef.current.on('stream', (stream) => {
          remoteVideoRef.current.srcObject = stream;
        });
      })
      .catch((error) => console.error('Error accessing media devices:', error));

    return () => {
      if (peerRef.current) {
        peerRef.current.destroy();
      }
    };
  }, []);

  return (
    <div>
      <video ref={localVideoRef} autoPlay muted></video>
      <video ref={remoteVideoRef} autoPlay></video>
    </div>
  );
}

export default WebRTC;

在这个组件中,我们使用了 useRef 钩子来创建了两个 video 元素的引用,分别用于本地视频流和远程视频流的显示。我们使用 useEffect 钩子来获取用户媒体权限,并创建了一个 SimplePeer 对象来管理 WebRTC 连接。一旦连接建立,我们可以在 signal 事件中获取和发送信令,以便进行对等连接,同时在 stream 事件中接收远程视频流并显示在页面上。

3. 在应用中使用 WebRTC 组件

接下来,我们将在应用中使用刚刚创建的 WebRTC 组件。在 src 目录下的 App.js 文件中添加以下代码:

// App.js
import React from 'react';
import WebRTC from './WebRTC';

function App() {
  return (
    <div>
      <h1>WebRTC Demo</h1>
      <WebRTC />
    </div>
  );
}

export default App;

4. 运行应用

最后,启动应用并在浏览器中查看效果:

npm start

现在,你应该可以在页面上看到两个视频框,其中一个显示本地视频流,另一个显示远程视频流。如果你在不同的浏览器窗口中打开应用,你应该能够在两个视频框之间进行实时通信。

转载自:https://juejin.cn/post/7369767878781419539
评论
请登录