[*] 日常优化

This commit is contained in:
acgist
2023-08-04 08:23:12 +08:00
parent 49805077ec
commit 3501308dbd
6 changed files with 142 additions and 21 deletions

View File

@@ -414,6 +414,12 @@ class Taoyao {
case "media::consumer::set::preferred::layers":
me.mediaConsumerSetPreferredLayers(message, body);
break;
case "media::consumer::set::priority":
me.mediaConsumerSetPriority(message, body);
break;
case "media::consumer::status":
me.mediaConsumerStatus(message, body);
break;
case "media::data::consume":
me.mediaDataConsume(message, body);
break;
@@ -1060,9 +1066,9 @@ class Taoyao {
console.debug("消费者评分", consumer.id, streamId, score);
me.push(
protocol.buildMessage("media::consumer::score", {
score : score,
roomId : roomId,
consumerId: consumer.id,
score : score,
})
);
});
@@ -1240,18 +1246,74 @@ class Taoyao {
roomId,
consumerId,
spatialLayer,
temporalLayer
temporalLayer,
} = body;
const room = me.rooms.get(roomId);
const consumer = room?.consumers.get(consumerId);
if(consumer) {
console.debug("修改最佳空间层和时间层", consumerId);
await consumer.setPreferredLayers({ spatialLayer, temporalLayer });
await consumer.setPreferredLayers({
spatialLayer,
temporalLayer
});
} else {
console.debug("修改最佳空间层和时间层(无效)", consumerId);
}
}
/**
* 设置消费者优先级信令
*
* @param {*} message 信令消息
* @param {*} body 消息主体
*/
async mediaConsumerSetPriority(message, body) {
const me = this;
const {
roomId,
consumerId,
priority,
} = body;
const room = me.rooms.get(roomId);
const consumer = room?.consumers.get(consumerId);
if(consumer) {
console.debug("设置消费者优先级", consumerId, priority);
if(priority <= 0 || priority >= 256) {
await consumer.unsetPriority();
} else {
await consumer.setPriority(priority);
}
} else {
console.debug("设置消费者优先级(无效)", consumerId);
}
}
/**
* 查询消费者状态信令
*
* @param {*} message 信令消息
* @param {*} body 消息主体
*/
async mediaConsumerStatus(message, body) {
const me = this;
const {
roomId,
consumerId,
} = body;
const room = me.rooms.get(roomId);
const consumer = room?.consumers.get(consumerId);
if(consumer) {
console.debug("查询消费者状态", consumerId);
message.body = {
...body,
status: await consumer.getStats()
};
me.push(message);
} else {
console.debug("查询消费者状态(无效)", consumerId);
}
}
/**
* 消费数据信令
*

View File

@@ -822,6 +822,9 @@ class Taoyao extends RemoteClient {
case "media::consumer::resume":
me.defaultMediaConsumerResume(message);
break;
case "media::consumer::score":
me.defaultMediaConsumerScore(message);
break;
case "media::data::consumer::close":
me.defaultMediaDataConsumerClose(message);
break;
@@ -1558,6 +1561,16 @@ class Taoyao extends RemoteClient {
console.debug("恢复消费者无效", consumerId);
}
}
/**
* 媒体消费者评分信令
*
* @param {*} message 信令消息
*/
defaultMediaConsumerScore(message) {
console.debug("消费者评分", message);
}
/**
* 修改最佳空间层和时间层信令
*
@@ -1584,6 +1597,26 @@ class Taoyao extends RemoteClient {
}));
}
/**
* 设置消费者优先级信令
*
* @param {*} consumerId 消费者ID
* @param {*} priority 优先级1~255
*/
mediaConsumerSetPriority(consumerId, priority) {
const me = this;
const consumer = me.consumers.get(consumerId);
if(!consumer) {
me.callbackError("设置消费者优先级消费者无效");
return;
}
me.push(protocol.buildMessage("media::consumer::set::priority", {
roomId: me.roomId,
consumerId,
priority,
}));
}
/**
* 查询消费者状态信令
*
@@ -3263,6 +3296,32 @@ class Taoyao extends RemoteClient {
await track.applyConstraints(Object.assign(track.getSettings(), setting));
}
/**
* 统计设备信息
*
* @param {*} clientId 终端ID
*
* @returns 设备信息统计
*/
async getClientStats(clientId) {
const me = this;
const stats = {};
if(clientId === me.clientId) {
stats.sendTransport = await me.sendTransport.getStats();
stats.recvTransport = await me.recvTransport.getStats();
stats.audioProducer = await me.audioProducer.getStats();
stats.videoProducer = await me.videoProducer.getStats();
} else {
const consumers = Array.from(me.consumers.values());
for(const consumer of consumers) {
if(clientId === consumer.sourceId) {
stats[consumer.kind] = await consumer.getStats();
}
}
}
return stats;
}
/**
* 关闭媒体资源
*

View File

@@ -19,9 +19,13 @@ import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
@Description(
body = """
{
"score": "消费者RTP流得分表示传输质量0~10",
"producerScore": "生产者RTP流得分表示传输质量0~10",
"producerScores": [所有生产者RTP流得分]
"roomId" : "房间ID"
"consumerId": "消费者ID"
"score" : {
"score" : 消费者RTP流得分表示传输质量0~10,
"producerScore" : 生产者RTP流得分表示传输质量0~10,
"producerScores": [Simulcast生产者RTP流得分]
}
}
""",
flow = "媒体服务->信令服务->终端"

View File

@@ -4,7 +4,6 @@ import java.util.Map;
import com.acgist.taoyao.boot.annotation.Description;
import com.acgist.taoyao.boot.annotation.Protocol;
import com.acgist.taoyao.boot.config.Constant;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.client.ClientType;
@@ -14,12 +13,12 @@ import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
/**
* 修改最佳空间层和时间层信令
*
* 空间层spatialLayer分辨率
* 空间层spatialLayer :分辨率
* 时间层temporalLayer帧率
*
* 码率:数据大小和时间的比值
*
* 注意:只有simulcast和SVC消费者有效
* 注意:只有Simulcast和SVC消费者有效
*
* @author acgist
*/
@@ -27,13 +26,13 @@ import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
@Description(
body = """
{
"roomId": "房间ID",
"consumerId": "消费者ID",
"spatialLayer": 最佳空间层,
"roomId" : "房间ID",
"consumerId" : "消费者ID",
"spatialLayer" : 最佳空间层,
"temporalLayer": 最佳时间层
}
""",
flow = "终端->信令服务->媒体服务->信令服务->终端"
flow = "终端->信令服务->媒体服务"
)
public class MediaConsumerSetPreferredLayersProtocol extends ProtocolRoomAdapter {
@@ -46,7 +45,6 @@ public class MediaConsumerSetPreferredLayersProtocol extends ProtocolRoomAdapter
@Override
public void execute(String clientId, ClientType clientType, Room room, Client client, Client mediaClient, Message message, Map<String, Object> body) {
if(clientType.mediaClient()) {
body.put(Constant.CLIENT_ID, clientId);
mediaClient.push(message);
} else {
this.logNoAdapter(clientType);

View File

@@ -13,17 +13,15 @@ import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
/**
* 设置消费者优先级信令
*
* TODOunsetPriority
*
* @author acgist
*/
@Protocol
@Description(
body = """
{
"roomId": "房间ID",
"roomId" : "房间ID",
"consumerId": "消费者ID",
"priority": 优先级1~255
"priority" : 优先级1~255
}
"""
)
@@ -38,7 +36,7 @@ public class MediaConsumerSetPriorityProtocol extends ProtocolRoomAdapter {
@Override
public void execute(String clientId, ClientType clientType, Room room, Client client, Client mediaClient, Message message, Map<String, Object> body) {
if(clientType.mediaClient()) {
client.push(mediaClient.request(message));
mediaClient.push(message);
} else {
this.logNoAdapter(clientType);
}

View File

@@ -19,11 +19,11 @@ import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
@Description(
body = """
{
"roomId": "房间ID",
"roomId" : "房间ID",
"consumerId": "消费者ID"
}
""",
flow = "终端=>信令服务->媒体服务->信令服务->终端"
flow = "终端=>信令服务->媒体服务"
)
public class MediaConsumerStatusProtocol extends ProtocolRoomAdapter {