[+] 信令优化

This commit is contained in:
acgist
2023-03-03 21:53:21 +08:00
parent c3dbe52d5c
commit 9c5ab2ec9f
24 changed files with 203 additions and 128 deletions

View File

@@ -8,10 +8,10 @@ const defaultAudioConfig = {
volume: 0.5,
// 延迟大小单位毫秒500毫秒以内较好
latency: 0.4,
// 采样数:16
sampleSize: 16,
// 采样数:8|16|32
sampleSize: { min: 8, ideal: 16, max: 32 },
// 采样率8000|16000|32000|48000
sampleRate: 48000,
sampleRate: { min: 8000, ideal: 32000, max: 48000 },
// 声道数量1|2
channelCount: 1,
// 是否开启自动增益true|false
@@ -35,7 +35,7 @@ const defaultVideoConfig = {
// 高度
height: { min: 480, ideal: 720, max: 2160 },
// 帧率
frameRate: 24,
frameRate: { min: 15, ideal: 24, max: 45 },
// 选摄像头user|left|right|environment
facingMode: "environment",
};

View File

@@ -249,9 +249,11 @@ class Taoyao {
// 请求回调
callbackMapping = new Map();
// 音频媒体配置
audio;
audio = defaultAudioConfig;
// 视频媒体配置
video;
video = defaultVideoConfig;
// 媒体配置
media;
// WebRTC配置
webrtc;
// 信令通道
@@ -473,11 +475,17 @@ class Taoyao {
* @param {*} message 消息
*/
defaultClientConfig(message) {
const self = this;
self.audio = { ...defaultAudioConfig, ...message.body.media.audio };
self.video = { ...defaultVideoConfig, ...message.body.media.video };
self.webrtc = message.body.webrtc;
console.debug("终端配置", self.audio, self.video, self.webrtc);
const me = this;
const { media, webrtc } = message.body;
const { audio, video} = media;
me.audio.sampleSize = { min: media.minSampleSize, ideal: audio.sampleSize, max: media.maxSampleSize };
me.audio.sampleRate = { min: media.minSampleRate, ideal: audio.sampleRate, max: media.maxSampleRate };
me.video.width = { min: media.minWidth, ideal: video.width, max: media.maxWidth };
me.video.height = { min: media.minHeight, ideal: video.height, max: media.maxHeight };
me.video.frameRate = { min: media.minFrameRate, ideal: video.frameRate, max: media.maxFrameRate };
me.media = media;
me.webrtc = webrtc;
console.debug("终端配置:", me.audio, me.video, me.media, me.webrtc);
}
/**
* 终端重启默认回调
@@ -597,12 +605,7 @@ class Taoyao {
);
}
/**
* TODO共享 navigator.mediaDevices.getDisplayMedia();
* 生产媒体
* TODO验证API试试修改媒体
* audioTrack.getSettings
* audioTrack.getCapabilities
* audioTrack.applyCapabilities
*/
async produceMedia() {
const self = this;
@@ -614,12 +617,15 @@ class Taoyao {
self.checkDevice();
// 释放资源
self.closeMedia();
// TODO暂时不知道为什么
/**
* 解决浏览器的自动播放策略问题
*/
{
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const audioTrack = stream.getAudioTracks()[0];
audioTrack.enabled = false;
setTimeout(() => audioTrack.stop(), 120000);
stream.getAudioTracks().forEach(audioTrack => {
audioTrack.enabled = false;
setTimeout(() => audioTrack.stop(), 30000);
});
}
if (self.produce) {
const response = await self.request(
@@ -791,15 +797,16 @@ class Taoyao {
let track;
try {
console.debug("打开麦克风");
// TODO设置配置
const stream = await navigator.mediaDevices.getUserMedia({
audio: true,
audio: self.audio,
});
const tracks = stream.getAudioTracks();
if (tracks.length > 1) {
console.log("多个音频轨道");
}
track = tracks[0];
// TODO验证修改API audioTrack.applyCapabilities
console.debug("音频信息:", track.getSettings(), track.getCapabilities());
this.audioProducer = await this.sendTransport.produce({
track,
codecOptions: {
@@ -905,6 +912,8 @@ class Taoyao {
video: true,
});
track = stream.getVideoTracks()[0];
// TODO验证修改API videoTrack.applyCapabilities
console.debug("视频信息:", track.getSettings(), track.getCapabilities());
} else if (self.videoSource === "screen") {
const stream = await navigator.mediaDevices.getDisplayMedia({
// 如果需要共享声音