首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法设置未定义- Peer.js的属性“Peer.js”

无法设置未定义- Peer.js的属性“Peer.js”
EN

Stack Overflow用户
提问于 2022-08-28 12:53:31
回答 1查看 139关注 0票数 4

我正在尝试开发一个视频chatroulette平台,我使用Peer和AJAX、PHP和MYSQL来管理后端部分,即会话。

因此,当我单击“现在聊天”时,我将被重定向到video.php,将执行以下AJAX代码:

代码语言:javascript
复制
 function searchSession(){
        $.ajax({
        type:"post",
        url:"php/enterInVideoSession.php",
        data: 
        {  
           
        },
        cache:false,
        success: function (html) 
        {
            console.log(html)
            var json = JSON.parse(html);
            if(json.event == 'make'){
                
                createRoom(json.sessionId)
            }else if(json.event == 'join'){
                
                joinRoom(json.sessionId)
            }
        }
    });
    return false;
 }

因此,如果没有找到会话,则函数将返回' make ',因此我们将使用ajax调用返回的会话id创建一个新会话:

代码语言:javascript
复制
function createRoom(room) {


 navigator.mediaDevices.getUserMedia({video: true, audio: true}).then( stream => {
        window.localStream = stream; 
        window.localAudio.srcObject = stream; 
        window.localAudio.autoplay = true; 
    }).catch( err => {
        console.log("u got an error:" + err)
    });
    
    
    console.log("Creating Room")
    
    room_id = PRE + room + SUF;
    peer = new Peer(room_id)
    peer.on('open', (id) => {
        console.log("Peer Connected with ID: ", id)
        navigator.getUserMedia({ video: true, audio: true }, (stream) => {
            local_stream = stream;
            setLocalStream(local_stream)
        }, (err) => {
            console.log(err)
        })
        notify("Waiting for peer to join.")
    })
    peer.on('call', (call) => {
        call.answer(local_stream);
        call.on('stream', (stream) => {
            setRemoteStream(stream)
        })
        currentPeer = call;
    })
}

否则,如果我们已经“加入”,我们将不得不加入一个已经创建的房间,因此sessionId将是我们必须加入的房间的ID,所以我们将通过运行以下函数来加入这个房间:

代码语言:javascript
复制
function joinRoom(room) {
    console.log("Joining Room")
    room_id = PRE + room + SUF;
    peer = new Peer()
    peer.on('open', (id) => {
        console.log("Connected with Id: " + id)
        navigator.mediaDevices.getUserMedia({ video: true, audio: true }, (stream) => {
            local_stream = stream;
            setLocalStream(local_stream)
            notify("Joining peer")
            let call = peer.call(room_id, stream)
            call.on('stream', (stream) => {
                setRemoteStream(stream);
            })
            currentPeer = call;
        }, (err) => {
            console.log(err)
        })

    })
}

我得到的错误是会话创建函数中的错误。

TypeError:无法设置未定义的属性(设置“srcObject”)

所以问题就在这段代码中:navigator.mediaDevices.getUserMedia: navigator.mediaDevices.getUserMedia.....

当用户加入时,他将不会与其他用户共享音频或视频,您将只能看到自己的视频。

有办法解决这个问题吗?

这是url项目:https://randoot.com

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-06 18:58:11

错误是不能在undefined上设置“任何”。这是这一行代码:window.localAudio.srcObject = stream;,它意味着localAudio是未定义的。它应该是什么?

先试

代码语言:javascript
复制
var element = document.createElement('audio');  
document.body.appendChild(element)           
window.localAudio = element;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73518834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档