[*] 日常优化
This commit is contained in:
@@ -825,114 +825,6 @@ class Taoyao {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生产媒体信令
|
||||
*
|
||||
* @param {*} message 消息
|
||||
* @param {*} body 消息主体
|
||||
*/
|
||||
async mediaProduce(message, body) {
|
||||
const {
|
||||
kind,
|
||||
roomId,
|
||||
clientId,
|
||||
streamId,
|
||||
transportId,
|
||||
appData,
|
||||
rtpParameters
|
||||
} = body;
|
||||
const me = this;
|
||||
const room = me.rooms.get(roomId);
|
||||
const transport = room?.transports.get(transportId);
|
||||
if(!transport) {
|
||||
console.warn("生产媒体通道无效", roomId, transportId);
|
||||
return;
|
||||
}
|
||||
const producer = await transport.produce({
|
||||
kind,
|
||||
appData,
|
||||
rtpParameters,
|
||||
// 关键帧延迟时间
|
||||
// keyFrameRequestDelay: 5000
|
||||
});
|
||||
producer.clientId = clientId;
|
||||
producer.streamId = streamId;
|
||||
room.producers.set(producer.id, producer);
|
||||
console.debug("创建生产者", producer.id, streamId);
|
||||
producer.on("transportclose", () => {
|
||||
console.info("生产者关闭(通道关闭)", producer.id, streamId);
|
||||
producer.close();
|
||||
});
|
||||
producer.observer.on("close", () => {
|
||||
if(room.producers.delete(producer.id)) {
|
||||
console.debug("生产者关闭", producer.id, streamId);
|
||||
me.push(protocol.buildMessage("media::producer::close", {
|
||||
roomId,
|
||||
producerId: producer.id
|
||||
}));
|
||||
} else {
|
||||
console.debug("生产者关闭(生产者无效)", producer.id, streamId);
|
||||
}
|
||||
});
|
||||
producer.observer.on("pause", () => {
|
||||
console.debug("生产者暂停", producer.id, streamId);
|
||||
me.push(protocol.buildMessage("media::producer::pause", {
|
||||
roomId,
|
||||
producerId: producer.id
|
||||
}));
|
||||
});
|
||||
producer.observer.on("resume", () => {
|
||||
console.debug("生产者恢复", producer.id, streamId);
|
||||
me.push(protocol.buildMessage("media::producer::resume", {
|
||||
roomId,
|
||||
producerId: producer.id
|
||||
}));
|
||||
});
|
||||
// producer.observer.on("score", fn(score));
|
||||
producer.on("score", (score) => {
|
||||
console.debug("生产者评分", producer.id, streamId, score);
|
||||
me.push(protocol.buildMessage("media::producer::score", {
|
||||
score,
|
||||
roomId,
|
||||
producerId: producer.id,
|
||||
}));
|
||||
});
|
||||
// producer.observer.on("videoorientationchange", fn(videoOrientation));
|
||||
producer.on("videoorientationchange", (videoOrientation) => {
|
||||
console.debug("生产者视频方向改变", producer.id, streamId, videoOrientation);
|
||||
me.push(
|
||||
protocol.buildMessage("media::video::orientation::change", {
|
||||
...videoOrientation,
|
||||
roomId: roomId,
|
||||
})
|
||||
);
|
||||
});
|
||||
// await producer.enableTraceEvent([ 'pli', 'fir', 'rtp', 'nack', 'keyframe' ]);
|
||||
// producer.observer.on("trace", fn(trace));
|
||||
// producer.on("trace", (trace) => {
|
||||
// console.debug("生产者跟踪事件(trace)", producer.id, streamId, trace);
|
||||
// });
|
||||
message.body = {
|
||||
kind : kind,
|
||||
roomId : roomId,
|
||||
producerId: producer.id
|
||||
};
|
||||
me.push(message);
|
||||
if (producer.kind === "audio") {
|
||||
// TODO:关闭生产者时移除监听
|
||||
room.audioLevelObserver
|
||||
.addProducer({ producerId: producer.id })
|
||||
.catch((error) => {
|
||||
console.error("音量监听异常", error);
|
||||
});
|
||||
room.activeSpeakerObserver
|
||||
.addProducer({ producerId: producer.id })
|
||||
.catch((error) => {
|
||||
console.error("声音监听异常", error);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 消费媒体信令
|
||||
*
|
||||
@@ -1484,6 +1376,126 @@ class Taoyao {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生产媒体信令
|
||||
*
|
||||
* @param {*} message 信令消息
|
||||
* @param {*} body 消息主体
|
||||
*/
|
||||
async mediaProduce(message, body) {
|
||||
const {
|
||||
kind,
|
||||
roomId,
|
||||
clientId,
|
||||
streamId,
|
||||
transportId,
|
||||
appData,
|
||||
rtpParameters
|
||||
} = body;
|
||||
const room = this.rooms.get(roomId);
|
||||
const transport = room?.transports.get(transportId);
|
||||
if(!transport) {
|
||||
console.warn("生产媒体(通道无效)", roomId, transportId);
|
||||
return;
|
||||
}
|
||||
const producer = await transport.produce({
|
||||
kind,
|
||||
appData,
|
||||
rtpParameters,
|
||||
// 关键帧延迟时间
|
||||
// keyFrameRequestDelay: 5000
|
||||
});
|
||||
producer.clientId = clientId;
|
||||
producer.streamId = streamId;
|
||||
room.producers.set(producer.id, producer);
|
||||
console.debug("创建生产者", producer.id, streamId);
|
||||
producer.on("transportclose", () => {
|
||||
console.debug("生产者关闭(通道关闭)", producer.id, streamId);
|
||||
producer.close();
|
||||
});
|
||||
producer.observer.on("close", () => {
|
||||
if(room.producers.delete(producer.id)) {
|
||||
console.debug("生产者关闭", producer.id, streamId);
|
||||
// 生产者关闭时自动删除
|
||||
// if(producer.kind === "audio") {
|
||||
// room.audioLevelObserver
|
||||
// .removeProducer({ producerId: producer.id })
|
||||
// .then(() => console.debug("删除音量监听", clientId, streamId))
|
||||
// .catch((error) => {
|
||||
// console.error("删除音量监听", clientId, streamId, error);
|
||||
// });
|
||||
// room.activeSpeakerObserver
|
||||
// .removeProducer({ producerId: producer.id })
|
||||
// .then(() => console.debug("删除声音监听", clientId, streamId))
|
||||
// .catch((error) => {
|
||||
// console.error("删除声音监听", clientId, streamId, error);
|
||||
// });
|
||||
// }
|
||||
this.push(protocol.buildMessage("media::producer::close", {
|
||||
roomId,
|
||||
producerId: producer.id
|
||||
}));
|
||||
} else {
|
||||
console.debug("生产者关闭(生产者无效)", producer.id, streamId);
|
||||
}
|
||||
});
|
||||
producer.observer.on("pause", () => {
|
||||
console.debug("生产者暂停", producer.id, streamId);
|
||||
this.push(protocol.buildMessage("media::producer::pause", {
|
||||
roomId,
|
||||
producerId: producer.id
|
||||
}));
|
||||
});
|
||||
producer.observer.on("resume", () => {
|
||||
console.debug("生产者恢复", producer.id, streamId);
|
||||
this.push(protocol.buildMessage("media::producer::resume", {
|
||||
roomId,
|
||||
producerId: producer.id
|
||||
}));
|
||||
});
|
||||
// producer.observer.on("score", fn(score));
|
||||
producer.on("score", (score) => {
|
||||
console.debug("生产者评分", producer.id, streamId, score);
|
||||
this.push(protocol.buildMessage("media::producer::score", {
|
||||
score,
|
||||
roomId,
|
||||
producerId: producer.id,
|
||||
}));
|
||||
});
|
||||
// producer.observer.on("videoorientationchange", fn(videoOrientation));
|
||||
producer.on("videoorientationchange", (videoOrientation) => {
|
||||
console.debug("生产者视频方向改变", producer.id, streamId, videoOrientation);
|
||||
this.push(protocol.buildMessage("media::video::orientation::change", {
|
||||
...videoOrientation,
|
||||
roomId,
|
||||
producerId: producer.id,
|
||||
}));
|
||||
});
|
||||
// await producer.enableTraceEvent([ 'pli', 'fir', 'rtp', 'nack', 'keyframe' ]);
|
||||
// producer.observer.on("trace", fn(trace));
|
||||
// producer.on("trace", (trace) => {
|
||||
// console.debug("生产者跟踪事件(trace)", producer.id, streamId, trace);
|
||||
// });
|
||||
message.body = {
|
||||
kind : kind,
|
||||
roomId : roomId,
|
||||
producerId: producer.id
|
||||
};
|
||||
this.push(message);
|
||||
if (producer.kind === "audio") {
|
||||
room.audioLevelObserver
|
||||
.addProducer({ producerId: producer.id })
|
||||
.catch((error) => {
|
||||
console.error("音量监听异常", error);
|
||||
});
|
||||
room.activeSpeakerObserver
|
||||
.addProducer({ producerId: producer.id })
|
||||
.catch((error) => {
|
||||
console.error("声音监听异常", error);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭生产者信令
|
||||
*
|
||||
@@ -1807,7 +1819,7 @@ class Taoyao {
|
||||
// transport.observer.on("newconsumer", (consumer) => {});
|
||||
// transport.observer.on("newdataproducer", (dataProducer) => {});
|
||||
// transport.observer.on("newdataconsumer", (dataConsumer) => {});
|
||||
// 设置追踪信息
|
||||
// 设置跟踪事件
|
||||
// await transport.enableTraceEvent([ 'bwe', 'probation' ]);
|
||||
// transport.on("trace", (trace) => {});
|
||||
// transport.observer.on("trace", fn(trace));
|
||||
|
||||
Reference in New Issue
Block a user