Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用socket.io-stream进行实时视频/音频流_Javascript_Node.js_Socket.io_Video Streaming_Html5 Video - Fatal编程技术网

Javascript 如何使用socket.io-stream进行实时视频/音频流

Javascript 如何使用socket.io-stream进行实时视频/音频流,javascript,node.js,socket.io,video-streaming,html5-video,Javascript,Node.js,Socket.io,Video Streaming,Html5 Video,我正在尝试制作一个实时P2P视频聊天应用程序 我发现使用socket.io-stream库会有所帮助。 但我不知道如何实现这个库 我的视频播放器在客户端工作正常。我只想使用socket.io将此流传输到其他连接的客户端 我的服务器代码如下所示 let app = require("express")(); let ss = require("socket.io-stream"); let http = require("http").c

我正在尝试制作一个实时P2P视频聊天应用程序

我发现使用socket.io-stream库会有所帮助。 但我不知道如何实现这个库

我的视频播放器在客户端工作正常。我只想使用socket.io将此流传输到其他连接的客户端

我的服务器代码如下所示

let app = require("express")();
let ss = require("socket.io-stream");
let http = require("http").createServer(app);
const routes = require("./routes");
let io = require("socket.io")(http);
routes(app, __dirname);
http.listen(3000, () => {
    console.log("app listening on port ", 3000);
});

io.sockets.on("connection", (socket) => {
    socket.on("joinRoom", (obj) => {
        let { name, stream } = obj;
        console.log(name, stream);
    });
});
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Video Calling</title>
</head>

<body>
    <video autoplay="true" id="video"></video>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        const socket = io();
        let name = prompt("Enter the room name");

        function wrongname() {
            name = prompt("Seriously? That's not a name! enter again!");
            validator();
        }

        function validator() {
            if (!name.match(/^[0-9a-z]+$/)) {
                wrongname();
            } else {
                return true;
            }
        }
        validator();
        let video = document.getElementById('video');
        if (navigator.mediaDevices.getUserMedia) {
            navigator.mediaDevices.getUserMedia({
                    video: true,
                    audio: true
                })
                .then((stream) => {
                    video.srcObject = stream;
                    console.log(stream);
                    socket.emit("joinRoom", {
                        name: name,
                        stream: stream
                    });
                })
                .catch((error) => {
                    alert("You choose to turn off your video and audio");
                    location.replace('/');
                })
        }
    </script>
</body>

</html>
下面给出了我的客户端脚本

let app = require("express")();
let ss = require("socket.io-stream");
let http = require("http").createServer(app);
const routes = require("./routes");
let io = require("socket.io")(http);
routes(app, __dirname);
http.listen(3000, () => {
    console.log("app listening on port ", 3000);
});

io.sockets.on("connection", (socket) => {
    socket.on("joinRoom", (obj) => {
        let { name, stream } = obj;
        console.log(name, stream);
    });
});
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Video Calling</title>
</head>

<body>
    <video autoplay="true" id="video"></video>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        const socket = io();
        let name = prompt("Enter the room name");

        function wrongname() {
            name = prompt("Seriously? That's not a name! enter again!");
            validator();
        }

        function validator() {
            if (!name.match(/^[0-9a-z]+$/)) {
                wrongname();
            } else {
                return true;
            }
        }
        validator();
        let video = document.getElementById('video');
        if (navigator.mediaDevices.getUserMedia) {
            navigator.mediaDevices.getUserMedia({
                    video: true,
                    audio: true
                })
                .then((stream) => {
                    video.srcObject = stream;
                    console.log(stream);
                    socket.emit("joinRoom", {
                        name: name,
                        stream: stream
                    });
                })
                .catch((error) => {
                    alert("You choose to turn off your video and audio");
                    location.replace('/');
                })
        }
    </script>
</body>

</html>

视频通话
const socket=io();
let name=提示(“输入房间名称”);
函数名(){
name=prompt(“真的吗?那不是名字!请重新输入!”);
验证器();
}
函数验证器(){
如果(!name.match(/^[0-9a-z]+$/){
错误名称();
}否则{
返回true;
}
}
验证器();
让video=document.getElementById('video');
if(navigator.mediaDevices.getUserMedia){
navigator.mediaDevices.getUserMedia({
视频:没错,
音频:正确
})
。然后((流)=>{
video.srcObject=流;
console.log(流);
socket.emit(“joinRoom”{
姓名:姓名,,
溪流:溪流
});
})
.catch((错误)=>{
警报(“您选择关闭视频和音频”);
位置。替换(“/”);
})
}
我重复一遍,我的问题是使用socket.io流通过socket.io流传输视频(如果有其他替代方案,也可以)

到目前为止,我与GitHub链接的代码是

我希望我的问题容易理解

我正在尝试制作一个实时P2P视频聊天应用程序

这是错误的技术。您需要使用WebRTC来确保实时流,并进行对等连接

我发现使用socket.io-stream库会有所帮助

不,不会的。术语“流”在这里被重载。。。您所指的NPM模块用于管道数据的流API。从媒体设备API获得的“流”是一个媒体流。。。与Streams API完全无关