视频会议

This commit is contained in:
duoaohui
2026-05-23 23:04:10 +08:00
parent ba7447ddb9
commit 981c12c5bb
3 changed files with 81 additions and 14 deletions

View File

@@ -405,6 +405,39 @@ export function createMediaEngine({ roomCode, userId, sendWithAck, logger = defa
}
}
/**
* 暂停指定 Producermediasoup-client 内部会把 track.enabled=false
* 远端 Consumer 收到的就是静音/黑帧,但本地 track 仍持有硬件不释放。
* 用于"关摄像头/麦克风"按钮:避免在 iOS Safari / 微信 WebView 上释放硬件后再申请被拒NotAllowedError
*/
const pauseProducer = (producerId) => {
const producer = producers.get(producerId)
if (!producer || producer.closed) return false
try {
if (!producer.paused) producer.pause()
// 双保险:有些 mediasoup-client 版本不会自动改 track.enabled
if (producer.track) producer.track.enabled = false
return true
} catch (e) {
logger('warn', '[MediaEngine] producer.pause 抛错', e)
return false
}
}
/** 恢复 Producer与 pauseProducer 对应 */
const resumeProducer = (producerId) => {
const producer = producers.get(producerId)
if (!producer || producer.closed) return false
try {
if (producer.paused) producer.resume()
if (producer.track) producer.track.enabled = true
return true
} catch (e) {
logger('warn', '[MediaEngine] producer.resume 抛错', e)
return false
}
}
/** 本地 Consumer 关闭(通常由 producer.new closed=true 广播触发,无需额外 WS */
const closeConsumer = (consumerId) => {
const consumer = consumers.get(consumerId)
@@ -445,6 +478,8 @@ export function createMediaEngine({ roomCode, userId, sendWithAck, logger = defa
consume,
resumeConsumer,
closeProducer,
pauseProducer,
resumeProducer,
closeConsumer,
close,
getDevice: () => device,