微信分享去sdk

This commit is contained in:
joywayer
2026-06-30 17:41:10 +08:00
parent c1e51d2183
commit 113b4d4960
7 changed files with 227 additions and 171 deletions
@@ -261,12 +261,11 @@ public enum RemoteAudioHandler {
return // 参数不全 → 不触发 cb(对齐 daoqi 入参空时走到 file 不存在 return)
}
// 2. 记录 lastUserId(无论是否实际播放都更新,对齐 daoqi
// `self.User_id = userid;` 总是执行的行为)
VoicePlayer.shared.recordIncomingUser(user)
// 3. 注册 VoicePlayer.onFinish(每次 mediaTypeAudio 更新,绑定当前 bridge;
// [weak bridge] 让 bridge 释放后 onFinish 自动失效)
// 2. 注册 VoicePlayer.onFinish(每次 mediaTypeAudio 更新,绑定当前 bridge;
// [weak bridge] 让 bridge 释放后 onFinish 自动失效)。
// onFinish 触发时机:自然结束 / 解码失败 / 被新一次 play 打断;
// payload `finishedUser` 是被结束 / 被打断那条语音绑定的 user
// (由 VoicePlayer 内部 currentUser 跟踪),不是入参里最新的 user。
VoicePlayer.shared.onFinish = { [weak bridge] finishedUser in
Task { @MainActor in
bridge?.call(
@@ -277,7 +276,7 @@ public enum RemoteAudioHandler {
}
}
// 4. 异步下载 AMR
// 3. 异步下载 AMR
let amrData: Data
do {
let (d, _) = try await URLSession.shared.data(from: downloadURL)
@@ -288,7 +287,7 @@ public enum RemoteAudioHandler {
// `if (![[NSFileManager defaultManager] fileExistsAtPath:filename]) return;`)
}
// 5. 写到沙盒 .amr 临时文件
// 4. 写到沙盒 .amr 临时文件
let tempName = VoiceRecorder.currentTimeString()
let docs = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let amrLocal = docs.appendingPathComponent(tempName).appendingPathExtension("amr")
@@ -300,7 +299,7 @@ public enum RemoteAudioHandler {
return
}
// 6. AMR → WAV 转码
// 5. AMR → WAV 转码
// daoqi 文件名约定:tempName + "_AmrToWav.wav"(NewRootVC.m:341)
let wavLocal = docs
.appendingPathComponent("\(tempName)_AmrToWav")
@@ -317,14 +316,16 @@ public enum RemoteAudioHandler {
transcoded = false
}
// 7. voicePlaying 总开关 + 实际播放 + gameui_play_voice
// 6. voicePlaying 总开关 + 实际播放 + gameui_play_voice
// (仅转码成功 + 开关 enabled 时触发,对齐 daoqi
// NewRootVC.m:343-353 if (canbofang) { play + callHandler })
// NewRootVC.m:343-353 if (canbofang) { play + callHandler })。
// 若当前已有正在播放的 player,VoicePlayer.play 会先停旧 player 并
// 通过 onFinish 反向调 gameui_stop_voice 让 H5 停旧动画,再起新播放。
let canPlay = await VoiceCenter.shared.isEnabled
log.debug("mediaTypeAudio user=\(user, privacy: .public) transcoded=\(transcoded, privacy: .public) canPlay=\(canPlay, privacy: .public)")
if transcoded, canPlay {
do {
try VoicePlayer.shared.play(wavLocal)
try VoicePlayer.shared.play(wavLocal, user: user)
// gameui_play_voice 数据是 user 字符串(非 dict)
bridge.call(
"gameui_play_voice",
@@ -337,7 +338,7 @@ public enum RemoteAudioHandler {
}
}
// 8. 触发 mediaTypeAudio cb(对齐 daoqi NewRootVC.m:357,**总是**触发
// 7. 触发 mediaTypeAudio cb(对齐 daoqi NewRootVC.m:357,**总是**触发
// 即使转码失败 / canbofang=NO 都触发;仅下载失败的 return 路径不触发)
callback?(.string("Response from mediaTypeAudio"))
}