javascript - 将媒体流绑定到
问题描述
我一直在尝试使用 制作一个简单的视频通话界面JsSIP
,到目前为止,我只设法启动了一个视频通话,并且接收者获取了我的音频和视频流,但是当我尝试添加流时(本地或远程) 到<video>
我页面中的一个元素,我得到了错误"Bad Media Description"
。
我的代码是这样的:
const address = "my.address.com";
const pass = "pass";
const callee = "id2";
const user = "id1";
const sockets = [];
const localStream = new MediaStream();
const config = {
sockets: sockets,
uri: `sip:${user}@${address}`,
password: pass
};
const agent = new JsSIP.UA(config);
const servers = {
iceServers: [
{urls:"stun:stun.l.google.com:19302"}
]
};
const options = {
pcConfig: servers,
mediaConstraints: {
audio: true,
video: true
}
};
document.getElementById("localVideo").srcObject = localStream;
document.getElementById("buttonCall").addEventListener("click", call);
sockets.push(
new JsSIP
.WebSocketInterface(`wss://${address}:443/ws`)
);
agent.start();
agent.on("newRTCSession", function(data){
let dataSession = data.session;
dataSession.on("confirmed",function(e){
let localTracks = dataSession.connection.getSenders();
localStream.addTrack(localTracks[0].track);
localStream.addTrack(localTracks[1].track);
console.log(e);
document.getElementById("localVideo").play();
});
});
function call() {
agent
.call(
`sip:${callee}@${address}`,
options
);
}
如果有人能指出使这成为可能的正确方法,我将不胜感激。
解决方案
我已经解决了,我的问题是我使用的是 Vue,所以通过function
在我的mounted()
函数中包含 s 引用this
被覆盖,解决方案是function
通过箭头函数更改那些 s ,() => {}
如下所示:
agent.on("newRTCSession", (data) => {
let dataSession = data.session;
dataSession.on("confirmed", () => {
let localTracks = dataSession.connection.getSenders();
localStream.addTrack(localTracks[0].track);
localStream.addTrack(localTracks[1].track);
console.log(e);
this.$refs.localVideo.play();
});
});
推荐阅读
- search - 在 Solr 中使用多层查询
- c# - RabbitMQ .NET Core 客户端为何以及如何导致应用程序关闭
- weblogic - Weblogic t3 url 配置(使用属性文件)
- javascript - 为什么我的变量在模板文件中不起作用
- multidimensional-array - 如何将多个列与数组中的范围分开?
- javascript - 问题:在ajax调用中传递一些参数(post)
- r - 如何创建依赖于标识符的变量?
- java - 如何在打开文件时使用java重命名文件
- swift - 将 CAShapeLayer 添加到子视图
- php - Pact for PHP - 来自模拟服务器的 404 响应代码