适配微信小程序

This commit is contained in:
2025-12-16 22:02:24 +08:00
parent f3d8621a29
commit 41e56b3be6

View File

@@ -65,6 +65,8 @@ let pusherContext: UniApp.LivePusherContext | null = null
let isPushingSucceeded = false // autopush 是否已成功(收到 1009 let isPushingSucceeded = false // autopush 是否已成功(收到 1009
let isStartingPush = false // 是否正在启动推流(防止并发调用) let isStartingPush = false // 是否正在启动推流(防止并发调用)
let hasJoinedRoom = false // 是否已加入房间(防止重复调用 joinCallRoom let hasJoinedRoom = false // 是否已加入房间(防止重复调用 joinCallRoom
let hasSentParticipantJoined = false // 是否已发送 participant_joined 信令(防止重复发送)
let pendingJoinResponse: any = null // 保存加入房间的响应,用于推流成功后发送信令
export function useMiniProgramCall() { export function useMiniProgramCall() {
const authStore = useAuthStore() const authStore = useAuthStore()
@@ -367,13 +369,24 @@ export function useMiniProgramCall() {
console.log('[MiniProgramCall] 房间参与者:', response.participants) console.log('[MiniProgramCall] 房间参与者:', response.participants)
} }
// 关键修复:通知房间内其他参与者"我已加入" // 保存响应,用于推流成功后发送 participant_joined 信令
// 发送 participant_joined 信令,让 PC 端知道可以拉取我的流 // 修复:不再立即发送,而是等推流成功(收到 1009 状态码)后再发送
sendParticipantJoinedSignal(response) // 这样 Web 端拉流时,小程序的视频流已经准备好了
pendingJoinResponse = response
hasSentParticipantJoined = false
// 重置推流状态标记 // 重置推流状态标记
isPushingSucceeded = false isPushingSucceeded = false
isStartingPush = false isStartingPush = false
// 兼容性:如果 3 秒后推流还未成功但通话仍活跃,也发送信令(避免对方一直等待)
setTimeout(() => {
if (!hasSentParticipantJoined && call.active && pendingJoinResponse) {
console.log('[MiniProgramCall] ⏰ 超时兜底:发送 participant_joined 信令')
sendParticipantJoinedSignal(pendingJoinResponse)
hasSentParticipantJoined = true
}
}, 3000)
// autopush=true 模式下live-pusher 会在 URL 设置后自动推流 // autopush=true 模式下live-pusher 会在 URL 设置后自动推流
// 时序说明: // 时序说明:
@@ -501,6 +514,8 @@ export function useMiniProgramCall() {
isPushingSucceeded = false isPushingSucceeded = false
isStartingPush = false isStartingPush = false
hasJoinedRoom = false hasJoinedRoom = false
hasSentParticipantJoined = false
pendingJoinResponse = null
} }
/** /**
@@ -982,6 +997,14 @@ export function useMiniProgramCall() {
isPushingSucceeded = true // 关键:标记推流成功 isPushingSucceeded = true // 关键:标记推流成功
isStartingPush = false isStartingPush = false
call.statusText = '通话中' call.statusText = '通话中'
// 关键修复:推流成功后才发送 participant_joined 信令
// 这样 Web 端拉流时,小程序的视频流已经准备好了
if (!hasSentParticipantJoined && pendingJoinResponse) {
console.log('[MiniProgramCall] 📤 推流成功,现在发送 participant_joined 信令')
sendParticipantJoinedSignal(pendingJoinResponse)
hasSentParticipantJoined = true
}
break break
// 警告/网络状态 // 警告/网络状态