[*] 日常优化
This commit is contained in:
@@ -1141,12 +1141,19 @@ public final class Taoyao implements ITaoyao {
|
|||||||
* @param body 信令主体
|
* @param body 信令主体
|
||||||
*/
|
*/
|
||||||
private void sessionCall(Message message, Map<String, Object> body) {
|
private void sessionCall(Message message, Map<String, Object> body) {
|
||||||
final String name = MapUtils.get(body, "name");
|
final String name = MapUtils.get(body, "name");
|
||||||
final String clientId = MapUtils.get(body, "clientId");
|
final String clientId = MapUtils.get(body, "clientId");
|
||||||
final String sessionId = MapUtils.get(body, "sessionId");
|
final String sessionId = MapUtils.get(body, "sessionId");
|
||||||
|
final Boolean audio = MapUtils.get(body, "audio");
|
||||||
|
final Boolean video = MapUtils.get(body, "video");
|
||||||
final Resources resources = this.context.getResources();
|
final Resources resources = this.context.getResources();
|
||||||
|
if(this.sessions.containsKey(sessionId)) {
|
||||||
|
Log.w(Taoyao.class.getSimpleName(), "会话已经存在:" + sessionId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
final SessionClient sessionClient = new SessionClient(
|
final SessionClient sessionClient = new SessionClient(
|
||||||
sessionId, name, clientId, this, this.mainHandler,
|
sessionId, name, clientId,
|
||||||
|
this, this.mainHandler,
|
||||||
resources.getBoolean(R.bool.preview),
|
resources.getBoolean(R.bool.preview),
|
||||||
resources.getBoolean(R.bool.playAudio),
|
resources.getBoolean(R.bool.playAudio),
|
||||||
resources.getBoolean(R.bool.playVideo),
|
resources.getBoolean(R.bool.playVideo),
|
||||||
@@ -1154,8 +1161,8 @@ public final class Taoyao implements ITaoyao {
|
|||||||
resources.getBoolean(R.bool.audioConsume),
|
resources.getBoolean(R.bool.audioConsume),
|
||||||
resources.getBoolean(R.bool.videoConsume),
|
resources.getBoolean(R.bool.videoConsume),
|
||||||
resources.getBoolean(R.bool.dataProduce),
|
resources.getBoolean(R.bool.dataProduce),
|
||||||
resources.getBoolean(R.bool.audioProduce),
|
resources.getBoolean(R.bool.audioProduce) && audio,
|
||||||
resources.getBoolean(R.bool.videoProduce),
|
resources.getBoolean(R.bool.videoProduce) && video,
|
||||||
this.mediaManager.getMediaProperties(),
|
this.mediaManager.getMediaProperties(),
|
||||||
this.mediaManager.getWebrtcProperties()
|
this.mediaManager.getWebrtcProperties()
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3041,27 +3041,32 @@ class Taoyao extends RemoteClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发起会话
|
* 发起会话信令
|
||||||
*
|
*
|
||||||
* @param {*} clientId 接收者ID
|
* @param {*} clientId 目标ID
|
||||||
|
* @param {*} audio 打开音频
|
||||||
|
* @param {*} video 打开视频
|
||||||
*/
|
*/
|
||||||
async sessionCall(clientId) {
|
async sessionCall(clientId, audio = true, video = true) {
|
||||||
const me = this;
|
if (clientId == this.clientId) {
|
||||||
if (clientId == me.clientId) {
|
|
||||||
this.callbackError("不能监控自己");
|
this.callbackError("不能监控自己");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await me.checkDevice();
|
await this.checkDevice();
|
||||||
const response = await me.request(protocol.buildMessage("session::call", {
|
const response = await this.request(protocol.buildMessage("session::call", {
|
||||||
clientId
|
clientId
|
||||||
}));
|
}));
|
||||||
const { name, sessionId } = response.body;
|
const {
|
||||||
|
name,
|
||||||
|
sessionId
|
||||||
|
} = response.body;
|
||||||
|
console.debug("发起会话", clientId, sessionId);
|
||||||
const session = new Session({
|
const session = new Session({
|
||||||
name,
|
name,
|
||||||
clientId,
|
clientId,
|
||||||
sessionId,
|
sessionId,
|
||||||
audioEnabled: me.audioProduce,
|
audioEnabled: this.audioProduce && audio,
|
||||||
videoEnabled: me.videoProduce
|
videoEnabled: this.videoProduce && video
|
||||||
});
|
});
|
||||||
this.sessionClients.set(sessionId, session);
|
this.sessionClients.set(sessionId, session);
|
||||||
}
|
}
|
||||||
@@ -3073,13 +3078,20 @@ class Taoyao extends RemoteClient {
|
|||||||
*/
|
*/
|
||||||
async defaultSessionCall(message) {
|
async defaultSessionCall(message) {
|
||||||
await this.checkDevice();
|
await this.checkDevice();
|
||||||
const { name, clientId, sessionId } = message.body;
|
const {
|
||||||
|
name,
|
||||||
|
audio = true,
|
||||||
|
video = true,
|
||||||
|
clientId,
|
||||||
|
sessionId
|
||||||
|
} = message.body;
|
||||||
|
console.debug("接收会话", clientId, sessionId, audio, video);
|
||||||
const session = new Session({
|
const session = new Session({
|
||||||
name,
|
name,
|
||||||
clientId,
|
clientId,
|
||||||
sessionId,
|
sessionId,
|
||||||
audioEnabled: this.audioProduce,
|
audioEnabled: this.audioProduce && audio,
|
||||||
videoEnabled: this.videoProduce
|
videoEnabled: this.videoProduce && video
|
||||||
});
|
});
|
||||||
this.sessionClients.set(sessionId, session);
|
this.sessionClients.set(sessionId, session);
|
||||||
await this.buildPeerConnection(session, sessionId);
|
await this.buildPeerConnection(session, sessionId);
|
||||||
@@ -3276,13 +3288,13 @@ class Taoyao extends RemoteClient {
|
|||||||
console.debug("会话添加远程媒体轨道", event);
|
console.debug("会话添加远程媒体轨道", event);
|
||||||
const track = event.track;
|
const track = event.track;
|
||||||
if(track.kind === 'audio') {
|
if(track.kind === 'audio') {
|
||||||
session.remoteAudioTrack = track;
|
session.remoteAudioTrack = track;
|
||||||
session.remoteAudioEnabled = true;
|
session.remoteAudioEnabled = true;
|
||||||
} else if(track.kind === 'video') {
|
} else if(track.kind === 'video') {
|
||||||
session.remoteVideoTrack = track;
|
session.remoteVideoTrack = track;
|
||||||
session.remoteVideoEnabled = true;
|
session.remoteVideoEnabled = true;
|
||||||
} else {
|
} else {
|
||||||
// 未知媒体类型
|
console.warn("未知媒体类型", track);
|
||||||
}
|
}
|
||||||
this.callbackTrack(session.clientId, track);
|
this.callbackTrack(session.clientId, track);
|
||||||
if(session.proxy && session.proxy.media) {
|
if(session.proxy && session.proxy.media) {
|
||||||
@@ -3301,8 +3313,8 @@ class Taoyao extends RemoteClient {
|
|||||||
};
|
};
|
||||||
peerConnection.onnegotiationneeded = event => {
|
peerConnection.onnegotiationneeded = event => {
|
||||||
console.debug("会话媒体重新协商", event);
|
console.debug("会话媒体重新协商", event);
|
||||||
|
// TODO:重连
|
||||||
if(peerConnection.connectionState === "connected") {
|
if(peerConnection.connectionState === "connected") {
|
||||||
// TODO:重连
|
|
||||||
peerConnection.restartIce();
|
peerConnection.restartIce();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,25 +6,24 @@ import com.acgist.taoyao.boot.annotation.Description;
|
|||||||
import com.acgist.taoyao.boot.annotation.Protocol;
|
import com.acgist.taoyao.boot.annotation.Protocol;
|
||||||
import com.acgist.taoyao.boot.config.Constant;
|
import com.acgist.taoyao.boot.config.Constant;
|
||||||
import com.acgist.taoyao.boot.model.Message;
|
import com.acgist.taoyao.boot.model.Message;
|
||||||
|
import com.acgist.taoyao.boot.model.MessageCode;
|
||||||
|
import com.acgist.taoyao.boot.model.MessageCodeException;
|
||||||
import com.acgist.taoyao.boot.utils.MapUtils;
|
import com.acgist.taoyao.boot.utils.MapUtils;
|
||||||
import com.acgist.taoyao.signal.client.Client;
|
import com.acgist.taoyao.signal.client.Client;
|
||||||
import com.acgist.taoyao.signal.client.ClientType;
|
import com.acgist.taoyao.signal.client.ClientType;
|
||||||
import com.acgist.taoyao.signal.party.session.Session;
|
import com.acgist.taoyao.signal.party.session.Session;
|
||||||
import com.acgist.taoyao.signal.protocol.ProtocolSessionAdapter;
|
import com.acgist.taoyao.signal.protocol.ProtocolSessionAdapter;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发起会话信令
|
* 发起会话信令
|
||||||
*
|
*
|
||||||
* @author acgist
|
* @author acgist
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
|
||||||
@Protocol
|
@Protocol
|
||||||
@Description(
|
@Description(
|
||||||
body = """
|
body = """
|
||||||
{
|
{
|
||||||
"clientId": "接收者ID",
|
"clientId": "目标ID",
|
||||||
"audio" : 是否需要声音(true|false),
|
"audio" : 是否需要声音(true|false),
|
||||||
"video" : 是否需要视频(true|false)
|
"video" : 是否需要视频(true|false)
|
||||||
}
|
}
|
||||||
@@ -49,8 +48,7 @@ public class SessionCallProtocol extends ProtocolSessionAdapter {
|
|||||||
final String targetId = MapUtils.get(body, Constant.CLIENT_ID);
|
final String targetId = MapUtils.get(body, Constant.CLIENT_ID);
|
||||||
final Client target = this.clientManager.getClients(targetId);
|
final Client target = this.clientManager.getClients(targetId);
|
||||||
if(target == null) {
|
if(target == null) {
|
||||||
log.warn("邀请对象无效:{}", clientId);
|
throw MessageCodeException.of(MessageCode.CODE_3404, "邀请对象无效");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
final Session session = this.sessionManager.call(client, target);
|
final Session session = this.sessionManager.call(client, target);
|
||||||
message.setBody(Map.of(
|
message.setBody(Map.of(
|
||||||
|
|||||||
Reference in New Issue
Block a user