[*] 日常优化

This commit is contained in:
acgist
2023-10-16 08:20:49 +08:00
parent 8fefa9f5a7
commit 1dac6a51ed

View File

@@ -998,7 +998,10 @@ class Taoyao extends RemoteClient {
/** /**
* @returns 媒体 * @returns 媒体
*/ */
async getStream() { async getStream({
audioEnabled,
videoEnabled,
}) {
const me = this; const me = this;
let stream; let stream;
if (me.videoSource === "file") { if (me.videoSource === "file") {
@@ -1007,8 +1010,8 @@ class Taoyao extends RemoteClient {
} else if (me.videoSource === "camera") { } else if (me.videoSource === "camera") {
console.debug("媒体配置", me.audioConfig, me.videoConfig); console.debug("媒体配置", me.audioConfig, me.videoConfig);
stream = await navigator.mediaDevices.getUserMedia({ stream = await navigator.mediaDevices.getUserMedia({
audio: me.audioConfig, audio: audioEnabled && me.audioConfig,
video: me.videoConfig, video: videoEnabled && me.videoConfig,
}); });
} else if (me.videoSource === "screen") { } else if (me.videoSource === "screen") {
// 音频配置:视频可能没有音频 // 音频配置:视频可能没有音频
@@ -1034,8 +1037,8 @@ class Taoyao extends RemoteClient {
delete videoConfig.frameRate.max; delete videoConfig.frameRate.max;
console.debug("媒体配置", audioConfig, videoConfig); console.debug("媒体配置", audioConfig, videoConfig);
stream = await navigator.mediaDevices.getDisplayMedia({ stream = await navigator.mediaDevices.getDisplayMedia({
audio: audioConfig, audio: audioEnabled && audioConfig,
video: videoConfig, video: videoEnabled && videoConfig,
}); });
} else { } else {
console.warn("不支持的视频来源", me.videoSource); console.warn("不支持的视频来源", me.videoSource);
@@ -1405,9 +1408,19 @@ class Taoyao extends RemoteClient {
* @param {*} body 消息主体 * @param {*} body 消息主体
*/ */
defaultControlConfigAudio(message, body) { defaultControlConfigAudio(message, body) {
console.debug("配置音频", message); const {
sampleSize,
sampleRate,
} = body;
if(sampleSize) {
this.audioConfig.sampleSize.ideal = sampleSize;
}
if(sampleSize) {
this.audioConfig.sampleRate.ideal = sampleRate;
}
console.debug("配置音频", body, this.audioConfig);
this.push(message); this.push(message);
// TODO配置本地音频 this.setLocalAudioConfig();
} }
/** /**
@@ -1446,7 +1459,6 @@ class Taoyao extends RemoteClient {
} }
console.debug("配置视频", body, this.videoConfig); console.debug("配置视频", body, this.videoConfig);
this.push(message); this.push(message);
// 更新本地视频
this.setLocalVideoConfig(); this.setLocalVideoConfig();
} }
@@ -2355,17 +2367,62 @@ class Taoyao extends RemoteClient {
} }
} }
/**
* 更新音频轨道
*
* @param {*} audioTrack 音频轨道
*/
async updateAudioProducer(audioTrack) {
if(!this.audioProducer) {
console.debug("没有发布音频忽略更新音频轨道");
return;
}
const track = audioTrack || await this.getAudioTrack();
this.closeMediaTrack(this.audioProducer.track);
await this.audioProducer.replaceTrack({
track
});
this.callbackTrack(this.clientId, track);
if (this.proxy && this.proxy.media) {
this.proxy.media(track, this.audioProducer);
} else {
console.warn("终端没有实现服务代理");
}
}
/**
* 更新音频轨道
*
* @param {*} audioTrack 音频轨道
*/
async updateAudioSession(audioTrack) {
this.sessionClients.forEach(async (v, k) => {
// TODO旧的资源是否需要释放
const localStream = await this.getStream({
audioEnabled: true,
videoEnabled: false,
});
if(v.localAudioEnabled) {
this.closeMediaTrack(v.localAudioSender.track);
v.localStream = localStream;
v.localAudioTrack = audioTrack || localStream.getAudioTracks()[0];
v.localAudioSender.replaceTrack(v.localAudioTrack);
}
});
}
/** /**
* 更新视频轨道 * 更新视频轨道
* *
* @param {*} 更新视频轨道 * @param {*} 视频轨道
*/ */
async updateVideoProducer(videoTrack) { async updateVideoProducer(videoTrack) {
if(!this.videoProducer) { if(!this.videoProducer) {
console.debug("没有发布视频忽略更新"); console.debug("没有发布视频忽略更新视频轨道");
return; return;
} }
const track = videoTrack || await this.getVideoTrack(); const track = videoTrack || await this.getVideoTrack();
this.closeMediaTrack(this.videoProducer.track);
await this.videoProducer.replaceTrack({ await this.videoProducer.replaceTrack({
track track
}); });
@@ -2380,13 +2437,18 @@ class Taoyao extends RemoteClient {
/** /**
* 更新视频轨道 * 更新视频轨道
* *
* @param {*} videoTrack 更新视频轨道 * @param {*} videoTrack 视频轨道
*/ */
async updateVideoSession(videoTrack) { async updateVideoSession(videoTrack) {
this.sessionClients.forEach(async (v, k) => { this.sessionClients.forEach(async (v, k) => {
const localStream = await this.getStream(); // TODO旧的资源是否需要释放
// TODO更新音频 const localStream = await this.getStream({
audioEnabled: false,
videoEnabled: true,
});
if(v.localVideoEnabled) { if(v.localVideoEnabled) {
this.closeMediaTrack(v.localVideoSender.track);
v.localStream = localStream;
v.localVideoTrack = videoTrack || localStream.getVideoTracks()[0]; v.localVideoTrack = videoTrack || localStream.getVideoTracks()[0];
v.localVideoSender.replaceTrack(v.localVideoTrack); v.localVideoSender.replaceTrack(v.localVideoTrack);
} }
@@ -3502,7 +3564,10 @@ class Taoyao extends RemoteClient {
peerConnection.restartIce(); peerConnection.restartIce();
} }
} }
const localStream = await this.getStream(); const localStream = await this.getStream({
audioEnabled: true,
videoEnabled: true,
});
session.localStream = localStream; session.localStream = localStream;
session.peerConnection = peerConnection; session.peerConnection = peerConnection;
if(session.audioEnabled && localStream.getAudioTracks().length >= 0) { if(session.audioEnabled && localStream.getAudioTracks().length >= 0) {
@@ -3629,6 +3694,19 @@ class Taoyao extends RemoteClient {
} }
} }
/**
* 配置音频
*
* @param {*} label 配置
*/
setLocalAudioConfig(label) {
if(label) {
// TODO更新本地配置
}
this.updateAudioProducer();
this.updateAudioSession();
}
/** /**
* 配置视频 * 配置视频
* *
@@ -3637,7 +3715,7 @@ class Taoyao extends RemoteClient {
setLocalVideoConfig(label) { setLocalVideoConfig(label) {
const me = this; const me = this;
if(label) { if(label) {
// TODO设置本地配置 // TODO更新本地配置
} }
me.updateVideoProducer(); me.updateVideoProducer();
me.updateVideoSession(); me.updateVideoSession();
@@ -3728,11 +3806,11 @@ class Taoyao extends RemoteClient {
return; return;
} }
mediaStream.getAudioTracks().forEach(oldTrack => { mediaStream.getAudioTracks().forEach(oldTrack => {
console.debug("关闭音频媒体", oldTrack); console.debug("关闭音频媒体轨道", oldTrack);
oldTrack.stop(); oldTrack.stop();
}); });
mediaStream.getVideoTracks().forEach(oldTrack => { mediaStream.getVideoTracks().forEach(oldTrack => {
console.debug("关闭视频媒体", oldTrack); console.debug("关闭视频媒体轨道", oldTrack);
oldTrack.stop(); oldTrack.stop();
}); });
} }
@@ -3746,6 +3824,7 @@ class Taoyao extends RemoteClient {
if(!mediaTrack) { if(!mediaTrack) {
return; return;
} }
console.debug("关闭媒体轨道", mediaTrack);
mediaTrack.stop(); mediaTrack.stop();
} }