[*] 日常优化

This commit is contained in:
acgist
2023-07-02 10:50:35 +08:00
parent ac96910bf0
commit 6570ef4ae0
2 changed files with 61 additions and 60 deletions

View File

@@ -851,7 +851,7 @@ class Taoyao {
const room = me.rooms.get(roomId); const room = me.rooms.get(roomId);
const transport = room?.transports.get(transportId); const transport = room?.transports.get(transportId);
if(!transport) { if(!transport) {
console.warn("生媒体通道无效", roomId, transportId); console.warn("生媒体通道无效", roomId, transportId);
return; return;
} }
const producer = await transport.produce({ const producer = await transport.produce({
@@ -1098,7 +1098,7 @@ class Taoyao {
me.push( me.push(
protocol.buildMessage("media::consumer::layers::change", { protocol.buildMessage("media::consumer::layers::change", {
roomId : roomId, roomId : roomId,
consumerId: consumer.id, consumerId : consumer.id,
spatialLayer : layers ? layers.spatialLayer : null, spatialLayer : layers ? layers.spatialLayer : null,
temporalLayer: layers ? layers.temporalLayer : null, temporalLayer: layers ? layers.temporalLayer : null,
}) })
@@ -1143,14 +1143,14 @@ class Taoyao {
// 等待终端准备就绪可以不用等待直接使用push方法 // 等待终端准备就绪可以不用等待直接使用push方法
await me.request( await me.request(
protocol.buildMessage("media::consume", { protocol.buildMessage("media::consume", {
kind : consumer.kind,
type : consumer.type,
roomId : roomId, roomId : roomId,
clientId : clientId, clientId : clientId,
sourceId : sourceId, sourceId : sourceId,
streamId : streamId, streamId : streamId,
producerId : producerId, producerId : producerId,
consumerId : consumer.id, consumerId : consumer.id,
kind : consumer.kind,
type : consumer.type,
appData : producer.appData, appData : producer.appData,
rtpParameters : consumer.rtpParameters, rtpParameters : consumer.rtpParameters,
producerPaused: consumer.producerPaused, producerPaused: consumer.producerPaused,
@@ -1278,8 +1278,6 @@ class Taoyao {
} }
} }
// TODOcontinue
/** /**
* 消费数据信令 * 消费数据信令
* *
@@ -1297,7 +1295,7 @@ class Taoyao {
transportId, transportId,
rtpCapabilities, rtpCapabilities,
} = body; } = body;
const room = this.rooms.get(roomId); const room = me.rooms.get(roomId);
const transport = room?.transports.get(transportId); const transport = room?.transports.get(transportId);
const dataProducer = room?.dataProducers.get(producerId); const dataProducer = room?.dataProducers.get(producerId);
if ( if (
@@ -1305,13 +1303,7 @@ class Taoyao {
!transport || !transport ||
!dataProducer !dataProducer
) { ) {
console.warn( console.warn("不能消费数据", body);
"不能消费数据:",
roomId,
clientId,
producerId,
transportId
);
return; return;
} }
let dataConsumer; let dataConsumer;
@@ -1320,48 +1312,45 @@ class Taoyao {
dataProducerId : dataProducer.id dataProducerId : dataProducer.id
}); });
} catch (error) { } catch (error) {
console.error("消费数据异常", producerId, error); console.error("创建数据消费者异常", body, error);
return; return;
} }
dataConsumer.clientId = clientId; dataConsumer.clientId = clientId;
dataConsumer.streamId = streamId; dataConsumer.streamId = streamId;
room.dataConsumers.set(dataConsumer.id, dataConsumer); room.dataConsumers.set(dataConsumer.id, dataConsumer);
console.info("创建数据消费者", dataProducer.id); console.debug("创建数据消费者", dataProducer.id, streamId);
dataConsumer.on('transportclose', () => { dataConsumer.on('transportclose', () => {
console.info("dataConsumer transportclose", dataConsumer.id); console.info("数据消费者关闭(通道关闭)", dataConsumer.id, streamId);
dataConsumer.close(); dataConsumer.close();
}); });
dataConsumer.on('dataproducerclose', () => { dataConsumer.on('dataproducerclose', () => {
console.info("dataConsumer dataproducerclose", dataConsumer.id); console.info("数据消费者关闭(生产者关闭)", dataConsumer.id, streamId);
dataConsumer.close(); dataConsumer.close();
}); });
dataConsumer.observer.on("close", () => { dataConsumer.observer.on("close", () => {
if(room.dataConsumers.delete(dataConsumer.id)) { if(room.dataConsumers.delete(dataConsumer.id)) {
console.info("dataConsumer close", dataConsumer.id); console.info("数据消费者关闭", dataConsumer.id, streamId);
me.push( me.push(
protocol.buildMessage("media::data::consumer::close", { protocol.buildMessage("media::data::consumer::close", {
roomId: roomId, roomId : roomId,
consumerId: dataConsumer.id, consumerId: dataConsumer.id,
}) })
); );
} else { } else {
console.info("dataConsumer close non", dataConsumer.id); console.debug("数据消费者关闭(无效)", dataConsumer.id, streamId);
} }
}); });
// dataConsumer.on("message", fn(message, ppid)); me.push(
// dataConsumer.on("bufferedamountlow", fn(bufferedAmount));
// dataConsumer.on("sctpsendbufferfull", fn());
this.push(
protocol.buildMessage("media::data::consume", { protocol.buildMessage("media::data::consume", {
label: dataConsumer.label, roomId : roomId,
roomId: roomId, clientId : clientId,
appData: dataProducer.appData, sourceId : sourceId,
protocol: dataConsumer.protocol, streamId : streamId,
clientId: clientId, producerId : producerId,
sourceId: sourceId, consumerId : dataConsumer.id,
streamId: streamId, label : dataConsumer.label,
producerId: producerId, appData : dataProducer.appData,
consumerId: dataConsumer.id, protocol : dataConsumer.protocol,
sctpStreamParameters: dataConsumer.sctpStreamParameters, sctpStreamParameters: dataConsumer.sctpStreamParameters,
}) })
); );
@@ -1374,14 +1363,15 @@ class Taoyao {
* @param {*} body 消息主体 * @param {*} body 消息主体
*/ */
async mediaDataConsumerClose(message, body) { async mediaDataConsumerClose(message, body) {
const me = this;
const { roomId, consumerId } = body; const { roomId, consumerId } = body;
const room = this.rooms.get(roomId); const room = me.rooms.get(roomId);
const dataConsumer = room?.dataConsumers.get(consumerId); const dataConsumer = room?.dataConsumers.get(consumerId);
if(dataConsumer) { if(dataConsumer) {
console.info("关闭数据消费者", consumerId); console.info("关闭数据消费者", consumerId);
await dataConsumer.close(); await dataConsumer.close();
} else { } else {
console.info("关闭数据消费者无效", consumerId); console.info("关闭数据消费者无效", consumerId);
} }
} }
@@ -1406,7 +1396,7 @@ class Taoyao {
const room = me.rooms.get(roomId); const room = me.rooms.get(roomId);
const transport = room?.transports.get(transportId); const transport = room?.transports.get(transportId);
if(!transport) { if(!transport) {
console.warn("生产数据生产者通道无效", transportId); console.warn("生产数据通道无效", roomId, transportId);
return; return;
} }
const dataProducer = await transport.produceData({ const dataProducer = await transport.produceData({
@@ -1418,26 +1408,29 @@ class Taoyao {
dataProducer.clientId = clientId; dataProducer.clientId = clientId;
dataProducer.streamId = streamId; dataProducer.streamId = streamId;
room.dataProducers.set(dataProducer.id, dataProducer); room.dataProducers.set(dataProducer.id, dataProducer);
console.info("创建数据生产者", dataProducer.id); console.info("创建数据生产者", dataProducer.id, streamId);
dataProducer.on("transportclose", () => { dataProducer.on("transportclose", () => {
console.info("dataProducer transportclose", dataProducer.id); console.info("数据生产者关闭(通道关闭)", dataProducer.id, streamId);
dataProducer.close(); dataProducer.close();
}); });
dataProducer.observer.on("close", () => { dataProducer.observer.on("close", () => {
if(room.dataProducers.delete(dataProducer.id)) { if(room.dataProducers.delete(dataProducer.id)) {
console.info("dataProducer close", dataProducer.id); console.info("数据生产者关闭", dataProducer.id, streamId);
me.push( me.push(
taoyaoProtocol.buildMessage("media::data::producer::close", { taoyaoProtocol.buildMessage("media::data::producer::close", {
roomId: roomId, roomId : roomId,
producerId: dataProducer.id, producerId: dataProducer.id,
}) })
); );
} else { } else {
console.info("dataProducer close non", dataProducer.id); console.debug("数据生产者关闭(无效)", dataProducer.id, streamId);
} }
}) })
message.body = { roomId: roomId, producerId: dataProducer.id }; message.body = {
this.push(message); roomId : roomId,
producerId: dataProducer.id
};
me.push(message);
} }
/** /**
@@ -1447,17 +1440,20 @@ class Taoyao {
* @param {*} body 消息主体 * @param {*} body 消息主体
*/ */
async mediaDataProducerClose(message, body) { async mediaDataProducerClose(message, body) {
const me = this;
const { roomId, producerId } = body; const { roomId, producerId } = body;
const room = this.rooms.get(roomId); const room = me.rooms.get(roomId);
const dataProducer = room?.dataProducers.get(producerId); const dataProducer = room?.dataProducers.get(producerId);
if(dataProducer) { if(dataProducer) {
console.info("关闭数据生产者", producerId); console.info("关闭数据生产者", producerId);
await dataProducer.close(); await dataProducer.close();
} else { } else {
console.info("关闭数据生产者无效", producerId); console.info("关闭数据生产者无效", producerId);
} }
} }
// TODOcontinue
/** /**
* 路由RTP协商信令 * 路由RTP协商信令
* *

View File

@@ -1510,8 +1510,15 @@ class Taoyao extends RemoteClient {
console.error("dataConsumer error", dataConsumer.id, error); console.error("dataConsumer error", dataConsumer.id, error);
dataConsumer.close(); dataConsumer.close();
}); });
dataConsumer.on('message', (message) => { // dataConsumer.on("bufferedamountlow", fn(bufferedAmount));
// dataConsumer.on("sctpsendbufferfull", fn());
dataConsumer.on('message', (message, ppid) => {
console.info("dataConsume message", dataConsumer.id, message); console.info("dataConsume message", dataConsumer.id, message);
if (ppid === 51) {
console.log("文本", message.toString("utf-8"));
} else if (ppid === 53) {
console.log("二进制");
}
}); });
} catch (error) { } catch (error) {
console.error("打开数据消费者异常", error); console.error("打开数据消费者异常", error);
@@ -2141,6 +2148,7 @@ class Taoyao extends RemoteClient {
*/ */
async produceData() { async produceData() {
const me = this; const me = this;
// TODO判断dataProduce
try { try {
const dataProducer = await me.sendTransport.produceData({ const dataProducer = await me.sendTransport.produceData({
ordered: false, ordered: false,
@@ -2163,9 +2171,6 @@ class Taoyao extends RemoteClient {
console.debug("dataProducer transportclose", me.dataProducer.id); console.debug("dataProducer transportclose", me.dataProducer.id);
me.dataProducer.close(); me.dataProducer.close();
}); });
me.dataProducer.on("bufferedamountlow", () => {
console.debug("dataProducer bufferedamountlow", me.dataProducer.id);
});
} catch (error) { } catch (error) {
me.callbackError("生产数据异常", error); me.callbackError("生产数据异常", error);
} }