jssip开启多人视频会议怎么获取视频流并显示在页面的video上?

使用jssip库搭建音视频对讲时,一对一的音视频通了,但是多人视频会议怎么获取视频流并显示在页面的video上?
我目前写的监听:

userAgent.on("newRTCSession", (e) => {

let newsession = e.session

newSession.on("confirmed", (e) => {

const addTrack = (tracks, stream) => {

console.log('tracks', tracks)

console.log('stream', stream)

for (let i = 0; i < tracks.length; i++) {

stream.addTrack(tracks[i].track);

}

}

if(newSession.connection.getSenders()){

console.log('自己的流');

const localVideoStream = new MediaStream();

const localVideo = that.$refs.localVideo

localVideo.srcObject = localVideoStream;

addTrack(newSession.connection.getSenders(), localVideoStream);

localVideo.play();

}

const remoteVideoStream = new MediaStream()

const remoteVideo = that.$refs.remoteVideo

remoteVideo.srcObject = remoteVideoStream

addTrack(newSession.connection.getReceivers(), remoteVideoStream)

remoteVideo.play()

})

});

我现在这样写,当多人进入的时候,别人的视频就都放在一个video标签里了,而且只显示一个,不会把多个人的视频显示出来,需要怎么写呢?有没有大佬知道的赐教赐教
所有代码都写在这了


回答:

解决了,直接上面的写法不变,修改一下freeswitch的配置:
1、在default.xml添加:

//123456是会议的房间号,目前是写死,后期需要配置为动态

<extension name="123456">

<condition field="destination_number" expression="^(123456)$">

<action application="sleep" data="500"/>

<action application="conference" data="123456@video-mcu-stereo"/>

</condition>

</extension>

jssip开启多人视频会议怎么获取视频流并显示在页面的video上?
2、在conference.conf.xml添加
<param name="video-mode" value="mux"/>
jssip开启多人视频会议怎么获取视频流并显示在页面的video上?
参考文档:https://blog.csdn.net/jia198810/article/details/118070169?ops...


回答:

参考一下这个:

<template>

<div id="app">

<div>注:需要freeswitch服务,拨打3000以上的号码就是会议号,多人的时候只显示对方的一个摄像头,不知道怎么让页面显示多个摄像头出来</div>

<div class='indexPage'>

<div v-if="!connected">

<input v-model="inform.userName" placeholder="账号"></input>

<button @click="register">连接</button>

</div>

<div v-else>

<p>{{ inform.userName }} 在线,服务器已连接</p>

<input v-model="inform.destName" placeholder="对方账号"></input>

<button @click="startCall(1)">语音呼叫</button>

<button @click="startCall(2)">视频呼叫</button>

<button @click="answerCall">接听</button>

<button @click="hangUp">挂断</button>

<button @click="rejectCall">拒绝</button>

<button @click="unregister">注销</button>

</div>

<video ref="localVideo" id="localVideo" autoplay playsinline muted></video>

<div id="remoteVideos"></div>

</div>

</div>

</template>

<script>

import JsSIP from 'https://esm.sh/jssip';

export default {

data() {

return {

inform: {

userName: '1001',

passWord: '1234',

destName: ''

},

connected: false,

incomingCall: null,

userAgent: null,

serverUrl: '192.168.18.113:5060',

wsUrl: 'wss://192.168.18.113:7443',

remoteStreams: [],

};

},

methods: {

register() {

// ...

},

handleNewRTCSession(newSession) {

// ...

newSession.on("confirmed", (e) => {

// ...

const remoteStream = new MediaStream();

this.addTrack(newSession.connection.getReceivers(), remoteStream);

const remoteVideoElement = document.createElement('video');

remoteVideoElement.srcObject = remoteStream;

remoteVideoElement.autoplay = true;

remoteVideoElement.playsinline = true;

this.remoteStreams.push(remoteVideoElement);

document.getElementById('remoteVideos').appendChild(remoteVideoElement);

remoteVideoElement.play();

});

},

addTrack(receivers, stream) {

receivers.forEach((receiver) => {

stream.addTrack(receiver.track);

});

},

startCall(type) {

// ...

},

hangUp() {

// ...

},

answerCall() {

// ...

},

rejectCall() {

// ...

},

unregister() {

// ...

},

}

};

</script>

<style>

#app {

font-family: Avenir, Helvetica, Arial, sans-serif;

color: #2c3e50;

margin-top: 60px;

}

#remoteVideos video {

width: 30%; /* 可以根据需要调整视频大小 */

margin: 5px;

}

</style>

以上是 jssip开启多人视频会议怎么获取视频流并显示在页面的video上? 的全部内容, 来源链接: utcz.com/p/935179.html

回到顶部