我正在尝试在Vite(React)中构建一个实时视频和音频流媒体平台。
我尝试了peerjs,它工作得很好,但我必须传递查看器的MediaStream对象才能连接,但我希望我的应用程序是一对多的,这意味着只有管理员才能流媒体。我不想流式传输观众的媒体,也不想请求麦克风和摄像机权限,因为我不会使用它。
作为替代方案,我尝试了simple-peer,但它给出了一个错误,我试图解决了几个小时,但得到了更多的错误。
browser.js:16 Uncaught ReferenceError: global is not defined
at node_modules/randombytes/browser.js (browser.js:16:14)
at __require (chunk-J43GMYXM.js?v=ca9856dd:11:50)
at node_modules/simple-peer/index.js (index.js:4:21)
at __require (chunk-J43GMYXM.js?v=ca9856dd:11:50)
at dep:simple-peer:1:16
字符串
我更喜欢使用peerjs,因为它已经为我工作,但如果你知道我的问题的解决方案或有任何更好的工作替代方案,这将是伟大的。
下面是我的代码以供参考:
import { Button } from "@mui/material";
import { useEffect, useState } from "react";
import { useSelector } from "react-redux";
import { toast } from "react-toastify";
import { Socket } from "socket.io-client";
import VideoPlayer from "../components/videoplayer";
import { RootState } from "../redux/store";
import Peer from "simple-peer";
function DevPage() {
const [myStream, setMyStream] = useState<MediaStream>();
const [hisStream, setHisStream] = useState<MediaStream>();
const [users, setUsers] = useState<string[]>([]);
const [me, setMe] = useState<string>();
const getStream: () => Promise<MediaStream> = (): Promise<MediaStream> =>
navigator.mediaDevices.getUserMedia({ video: true, audio: true });
const socket: Socket = useSelector<RootState, Socket>(
(state: RootState): Socket => state.socket
);
useEffect((): (() => void) => {
if (socket) {
setMe(socket.id);
socket.on("users", ({ allUsers }: { allUsers: string[] }): void => {
setUsers(allUsers);
});
getStream()
.then((stream: MediaStream): void => {
setMyStream(stream);
})
.catch((err: Error): void => {
toast.error(err.message);
});
}
return () => {};
}, [socket]);
const callPeer = () => {
const peer = new Peer();
};
return (
<div className="bg-primary-700 min-h-screen w-full">
{myStream && <VideoPlayer stream={myStream} />}
{hisStream && <VideoPlayer stream={hisStream} />}
<div className="text-white flex gap-2 p-4 flex-wrap justify-around">
{users.map(
(user, idx) =>
user != me && (
<Button
color="info"
variant="contained"
key={idx}
onClick={() => {}}
>
{user}
</Button>
)
)}
</div>
</div>
);
}
export default DevPage;
型Video Player
只是我播放媒体流的视频元素。
分享任何关于如何连接peerjs没有媒体流或使一个空的媒体流或修复此错误的知识。
2条答案
按热度按时间jdgnovmf1#
它与global this重命名为globalThis有关,只需将
"<script>const global = globalThis;</script>"
添加到html文件中。字符串
nwwlzxa72#
问题出在vite如果您使用npm create vite@latest{projectName}创建了Web应用
那么你的src文件夹中就会有一个vite.congfig.js。
简单地去那里然后加上
字符串
所以最终的vite.config.js看起来像这样x1c 0d1x