mediasoup - mediasoup-client TypeError:无法在 createRecvTransport 处读取 null 的属性“_createTransport”
问题描述
在 Redux SAGA 中执行“device.createRecvTransport”时,mediasoup-client 出现错误(我知道这不是最佳实践,但别无选择)。
“device.createRecvTransport”实际上是一个抽象,它包含一个 webRTC RTCPeerConnection 实例。当我调用它时,它会引发此错误。
TypeError: Cannot read property '_createTransport' of null at createRecvTransport
编码:
function* createRecvTransport(device: Device) {
const {
id,
iceParameters,
iceCandidates,
dtlsParameters,
sctpParameters
} = yield sendRequest({
action: 'createWebRtcTransport',
data: {
forceTcp: false,
producing: false,
consuming: true
}
});
const recvTransport: Transport = yield call(device.createRecvTransport, {
id,
iceParameters,
iceCandidates,
dtlsParameters,
sctpParameters,
iceServers: []
});
}
设备用函数声明
function* initDevice() {
const handlerName = detectDevice();
const device = new Device({
handlerName
});
const routerRtpCapabilities = yield sendRequest({
action: 'getRouterRtpCapabilities'
});
device.load({ routerRtpCapabilities });
}
“device.createSendTransport”方法也有效,唯一的问题是创建接收传输。方法“router.createWebRtcTransport”在 mediasoup 路由器中执行,并在客户端执行“createRecvTransport”之前返回数据。
解决方案
似乎问题出在“yield call”表达式上。由于“device.createRecvTransport”不是一个异步(用 promise 处理)函数,它不应该使用“yield call”来执行。
当我删除“yield call”时,它修复了。
推荐阅读
- angularjs - 是否可以在 AngularJS 中实现 trait?
- python - 在python中按顺序连接字符串
- r - 在 R 中整理这个数据框
- r - ggplot2 - x 轴刻度和标签与回归线不兼容(geom_smooth 和 geom_abline)
- if-statement - Jenkins Pipeline - if 语句总是返回 false
- javascript - 反应:TypeError:无法读取未定义的属性“值”
- sed - 使用 sed 更改数据库脚本
- arrays - 在特定键 1.4 下将来自两个文件的对象数组与 jq 组合
- django - Qualtrics-API 问题
- node.js - 如何在服务层使用猫鼬跳过和限制功能?