PeerJS webRTC应用程序无法在android 11上运行



我正在为android开发音频/视频通话应用程序。它在webView上使用PeerJS。这是我的PeerJs客户端代码,

let localVideo = document.getElementById("local-video")
let remoteVideo = document.getElementById("remote-video")
let peer
var enableVideo
function init(userId, isVideoCall) {
if (isVideoCall == "true") enableVideo = true
else enableVideo = false
peer = new Peer(userId, {
host: '<My GCP server IP>',
port: 9000,
key: "myKey",
path: '/calls',
config: {
'iceServers': [
{ url: 'stun:stun.ekiga.net' },
{ url: 'stun:stun.schlund.de' },
{ url: 'stun:stun.voipbuster.com' },
{ url: 'stun:stun.voipstunt.com' },
{ url: 'stun:stun.xten.com' },
{ url: 'stun:stun.l.google.com:19302' },
{ url: 'stun:stun1.l.google.com:19302' },
{ url: 'stun:stun2.l.google.com:19302' },
{ url: 'stun:stun3.l.google.com:19302' },
{ url: 'stun:stun4.l.google.com:19302' },
{
url: 'turn:numb.viagenie.ca',
username: "<myUsername>",
credential: '<myPassword>'
}
]
}
})
peer.on('open', () => {
Android.onPeerConnected()
})
peer.on('error', () => {
Android.onError()
})
listen()
}
let localStream;
function listen() {
peer.on('call', (call) => {
navigator.getUserMedia({
audio: true,
video: enableVideo
}, (stream) => {
localVideo.srcObject = stream
localStream = stream
call.answer(stream)
call.on('stream', (remoteStream) => {
Android.onCallConnected()
remoteVideo.srcObject = remoteStream
remoteVideo.className = "primary-video"
localVideo.className = "secondary-video"
})
})
})
}
function startCall(otherUserId) {
navigator.getUserMedia({
audio: true,
video: enableVideo
}, (stream) => {
localVideo.srcObject = stream
localStream = stream
const call = peer.call(otherUserId, stream)
call.on('stream', (remoteStream) => {
Android.onCallConnected()
remoteVideo.srcObject = remoteStream
remoteVideo.className = "primary-video"
localVideo.className = "secondary-video"
})
})
}

一切都很好,直到我最近把我的手机升级到android 11。现在连接建立了,但是没有音频或视频。

如果我们在SDK版本29上编译应用程序,它会运行良好。但我的目标是这个应用程序的新版本的android。

所以,如果我编译SDK版本31,那么它拒绝在模拟器(android 11)和一些三星手机(android 11)上工作。也就是说,它在其他一些运行android 11的三星和Realme设备上运行得很好。

我不认为这是NAT穿越问题,因为在android 11更新之前,它在我的三星手机上运行良好。我怀疑这与android 11的webView和chromium引擎有关。查看此链接

有人能帮我找到一个解决这个问题的方法吗?

更新:当我使用分析器检查此活动的网络使用情况时,我可以看到发送和接收速率为0 KB/s。

当你瞄准Android 12(SDK 31)时测试Webview与通常不同,要么你在Android 12模拟器上测试,要么你启用新的SameSite行为来测试旧模拟器。

这是在行为变化中提到的:Android官方开发者网站上针对Android 12的应用:

在你的应用中测试SameSite行为如果你的应用使用WebView,或者你管理的网站或服务使用cookie,我们建议在Android 12 WebView上测试你的流量。如果您发现问题,您可能需要更新您的cookie以支持新的SameSite行为。

注意登录和嵌入内容中的问题,以及用户从不安全页面开始并过渡到安全页面的登录流、购买流和其他身份验证流。

要用WebView测试一个应用程序,你必须通过完成以下步骤之一来为你想要测试的应用程序启用新的SameSite行为:

1-通过在WebView开发工具中切换UI标志WebView -enable-modern-cookie-same-site,在测试设备上手动启用SameSite行为。此方法允许您在任何运行Android 5.0 (API级别21)或更高版本的设备上进行测试,包括Android 12和WebView版本89.0.4385.0或更高版本。

2-通过targetSdkVersion编译你的应用程序以瞄准Android 12 (API级别31)。如果您使用这种方法,you must use a device that runs Android 12.