微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

peer.on('call') 未使用 vuejs

如何解决peer.on('call') 未使用 vuejs

我正在尝试与 peerjs 和 vuejs 进行简单的视频聊天。我确实在浏览器上获得了我的视频源,但是当其他人加入时,我没有他们的视频源。检查后,我意识到

this.myPeer.on('call',{})

即使已拨打电话也不会触发。如果我使用 jQuery 而不是 vue,那么代码工作正常。

<template>
<div class="h-screen bg-gray-900">
    <div class="flex flex-wrap justify-center items-center h-full p-5">
        <div id="video-grid">
            <div v-for="(video,index) in videoList" :key="index">
                <video :srcObject.prop="video.stream" autoplay :muted="video.id == ownId" :id="'video-'+video.id"></video>
            </div>
        </div>
    </div>
</div>
</template>
<script>
import io from "socket.io-client";
import Peer from "peerjs";
var socket = io.connect("http://localhost:3000");

export default {
    data(){
        return{
            ownId:'',videoList:[],peers:{},myPeer : new Peer(undefined,{
                host: '/',port: '3001'
            }),myStream:''
        }
    },methods:{
        connectToNewUser(userId,stream) {
            console.log('connecting to '+userId)
            const call = this.myPeer.call(userId,stream)
            call.on('stream',userVideoStream => {
                console.log('calling')
                this.addVideoStream(userId,userVideoStream)
            })
            call.on('close',() => {
                let i = this.videoList.map(video => video.id).indexOf(call.peer)
                this.videoList.splice(i,1) 
            })
            this.peers[userId] = call
        },addVideoStream(id,stream) {
            console.log('adding video to list ' + id)
            this.videoList.push({stream,id})
        },},mounted(){
        this.myPeer.on('open',id => {
            console.log('own id '+id)
            this.ownId = id

            navigator.mediaDevices.getUserMedia({
            video: true,audio: true
            }).then(stream => {
                this.myStream = stream
                this.addVideoStream(this.ownId,stream)

                this.myPeer.on('call',call => { <!-- This function is not triggered -->
                    call.answer(stream)
                    console.log('answering')
                    call.on('stream',userVideoStream => {
                        this.addVideoStream(call.peer,userVideoStream)
                    })
                })

                socket.on('user-connected',userId => {
                    console.log(userId+' has joined')
                    this.connectToNewUser(userId,stream)
                })
            })

            socket.emit('join-room',this.$route.params.id,id)
        })
        socket.on('user-disconnected',userId => {
            if (this.peers[userId]) this.peers[userId].close()
        })

    },destroyed(){
        this.myStream.getTracks().forEach(function(track) { track.stop(); })
        this.myPeer.disconnect()
    }
}
</script>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?