This commit is contained in:
acgist
2023-03-14 07:53:32 +08:00
parent 72e4b34630
commit 0cd054dbb0
25 changed files with 242 additions and 203 deletions

View File

@@ -119,12 +119,12 @@ module.exports = {
announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || defaultTaoyaoHost || "127.0.0.1",
},
// TCP
// {
// protocol: "tcp",
// ip: process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0",
// port: 44444,
// announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || defaultTaoyaoHost || "127.0.0.1",
// },
{
protocol: "tcp",
ip: process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0",
port: 44444,
announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || defaultTaoyaoHost || "127.0.0.1",
},
],
},
// WebRtcTransporthttps://mediasoup.org/documentation/v3/mediasoup/api/#WebRtcTransportOptions

View File

@@ -452,8 +452,8 @@ class Taoyao {
case "media::transport::close":
this.mediaTransportClose(message, body);
break;
case "media::transport::plain::in":
me.mediaTransportPlainIn(message, body);
case "media::transport::plain":
me.mediaTransportPlain(message, body);
break;
case "media::transport::webrtc::connect":
me.mediaTransportWebrtcConnect(message, body);
@@ -629,8 +629,8 @@ class Taoyao {
producer.on("videoorientationchange", (videoOrientation) => {
console.info("producer videoorientationchange", producer.id, videoOrientation);
self.push(protocol.buildMessage("media::video::orientation::change", {
...videoOrientation,
roomId: roomId,
...videoOrientation
}));
});
// await producer.enableTraceEvent([ 'rtp', 'keyframe', 'nack', 'pli', 'fir' ]);
@@ -821,6 +821,7 @@ class Taoyao {
});
consumer.on("producerpause", () => {
console.info("consumer producerpause", consumer.id);
// consumer.pause();
this.push(
protocol.buildMessage("media::consumer::pause", {
roomId: roomId,
@@ -830,6 +831,7 @@ class Taoyao {
});
consumer.on("producerresume", () => {
console.info("consumer producerresume", consumer.id);
// consumer.resume();
this.push(
protocol.buildMessage("media::consumer::resume", {
roomId: roomId,
@@ -1261,16 +1263,21 @@ class Taoyao {
* @param {*} message 消息
* @param {*} body 消息主体
*/
async mediaTransportPlainIn(message, body) {
async mediaTransportPlain(message, body) {
const me = this;
const { roomId, rtcpMux, comedia, clientId } = body;
const { roomId, rtcpMux, comedia, clientId, enableSctp, numSctpStreams, enableSrtp, srtpCryptoSuite } = body;
const plainTransportOptions = {
rtcpMux: rtcpMux,
comedia: comedia,
...config.mediasoup.plainTransportOptions,
rtcpMux: rtcpMux,
comedia: comedia,
enableSctp: enableSctp || Boolean(numSctpStreams),
numSctpStreams: numSctpStreams || 0,
enableSrtp: enableSrtp,
srtpCryptoSuite: srtpCryptoSuite,
};
const room = this.rooms.get(roomId);
const transport = await room.mediasoupRouter.createPlainTransport(plainTransportOptions);
me.transportEvent("plain", roomId, transport);
transport.clientId = clientId;
room.transports.set(transport.id, transport);
console.info(transport.tuple)
@@ -1336,8 +1343,35 @@ class Taoyao {
...webRtcTransportOptions,
webRtcServer: room.webRtcServer,
});
me.transportEvent("webrtc", roomId, transport);
transport.clientId = clientId;
// 通用事件
room.transports.set(transport.id, transport);
message.body = {
roomId: roomId,
transportId: transport.id,
iceCandidates: transport.iceCandidates,
iceParameters: transport.iceParameters,
dtlsParameters: transport.dtlsParameters,
sctpParameters: transport.sctpParameters,
};
self.push(message);
const { maxIncomingBitrate } = config.mediasoup.webRtcTransportOptions;
// If set, apply max incoming bitrate limit.
if (maxIncomingBitrate) {
try {
await transport.setMaxIncomingBitrate(maxIncomingBitrate);
} catch (error) {}
}
}
/**
* 通道事件
*
* @param {*} type 类型webrtc|plain|pipe|direct
* @param {*} roomId 房间ID
* @param {*} transport 通道
*/
transportEvent(type, roomId, transport) {
/********************* 通用通道事件 *********************/
transport.on("routerclose", () => {
console.info("transport routerclose", transport.id);
transport.close();
@@ -1377,50 +1411,41 @@ class Taoyao {
// });
// transport.observer.on("trace", fn(trace));
/********************* webRtcTransport通道事件 *********************/
// transport.on("icestatechange", (iceState) => {
// console.info("transport icestatechange", transport.id, iceState);
// });
// transport.on("iceselectedtuplechange", (iceSelectedTuple) => {
// console.info("transport iceselectedtuplechange", transport.id, iceSelectedTuple);
// });
// transport.on("dtlsstatechange", (dtlsState) => {
// console.info("transport dtlsstatechange", transport.id, dtlsState);
// });
// transport.on("sctpstatechange", (sctpState) => {
// console.info("transport sctpstatechange", transport.id, sctpState);
// });
// transport.observer.on("icestatechange", fn(iceState));
// transport.observer.on("iceselectedtuplechange", fn(iceSelectedTuple));
// transport.observer.on("dtlsstatechange", fn(dtlsState));
// transport.observer.on("sctpstatechange", fn(sctpState));
if("webrtc" === type) {
// transport.on("icestatechange", (iceState) => {
// console.info("transport icestatechange", transport.id, iceState);
// });
// transport.on("iceselectedtuplechange", (iceSelectedTuple) => {
// console.info("transport iceselectedtuplechange", transport.id, iceSelectedTuple);
// });
// transport.on("dtlsstatechange", (dtlsState) => {
// console.info("transport dtlsstatechange", transport.id, dtlsState);
// });
// transport.on("sctpstatechange", (sctpState) => {
// console.info("transport sctpstatechange", transport.id, sctpState);
// });
// transport.observer.on("icestatechange", fn(iceState));
// transport.observer.on("iceselectedtuplechange", fn(iceSelectedTuple));
// transport.observer.on("dtlsstatechange", fn(dtlsState));
// transport.observer.on("sctpstatechange", fn(sctpState));
}
/********************* plainTransport通道事件 *********************/
// transport.on("tuple", fn(tuple));
// transport.on("rtcptuple", fn(rtcpTuple));
// transport.on("sctpstatechange", fn(sctpState));
// transport.observer.on("tuple", fn(tuple));
// transport.observer.on("rtcptuple", fn(rtcpTuple));
// transport.observer.on("sctpstatechange", fn(sctpState));
if("plain" === type) {
// transport.on("tuple", fn(tuple));
// transport.on("rtcptuple", fn(rtcpTuple));
// transport.on("sctpstatechange", fn(sctpState));
// transport.observer.on("tuple", fn(tuple));
// transport.observer.on("rtcptuple", fn(rtcpTuple));
// transport.observer.on("sctpstatechange", fn(sctpState));
}
/********************* pipeTransport通道事件 *********************/
// transport.on("sctpstatechange", fn(sctpState));
// transport.observer.on("sctpstatechange", fn(sctpState));
if("pipe" === type) {
// transport.on("sctpstatechange", fn(sctpState));
// transport.observer.on("sctpstatechange", fn(sctpState));
}
/********************* directTransport通道事件 *********************/
// transport.on("rtcp", fn(rtcpPacket));
room.transports.set(transport.id, transport);
message.body = {
roomId: roomId,
transportId: transport.id,
iceCandidates: transport.iceCandidates,
iceParameters: transport.iceParameters,
dtlsParameters: transport.dtlsParameters,
sctpParameters: transport.sctpParameters,
};
self.push(message);
const { maxIncomingBitrate } = config.mediasoup.webRtcTransportOptions;
// If set, apply max incoming bitrate limit.
if (maxIncomingBitrate) {
try {
await transport.setMaxIncomingBitrate(maxIncomingBitrate);
} catch (error) {}
if("rtcp" === type) {
// transport.on("rtcp", fn(rtcpPacket));
}
}
/**