视频会议
This commit is contained in:
@@ -405,6 +405,39 @@ export function createMediaEngine({ roomCode, userId, sendWithAck, logger = defa
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 暂停指定 Producer:mediasoup-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,
|
||||
|
||||
Reference in New Issue
Block a user