我正在为android开发一个音频/视频呼叫应用程序。它在PeerJS上使用webView。这是我的PeerJ客户端代码,
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升级之前,它在我的三星手机上运行良好。我怀疑这和安卓11 webView和铬引擎有什么关系。签出此链接。
有人能帮我找到解决这个问题的办法吗?
更新:当我使用分析器检查此活动的网络使用情况时,我可以看到发送和接收速率为0 KB/s。
发布于 2021-10-26 07:56:21
当您的目标是Android12(SDK 31)时,测试Webview与通常的不同,要么在Android12模拟器上进行测试,要么让新的SameSite行为使用旧的模拟器进行测试。
在官方安卓开发者网站上的行为改变:针对Android 12的应用程序中提到了这一点:
测试应用程序中的SameSite行为,如果应用程序使用WebView,或者管理使用cookie的网站或服务,我们建议在Android12 WebView上测试您的流量。如果发现问题,可能需要更新cookies以支持新的SameSite行为。 注意登录和嵌入式内容中的问题,以及登录流、购买和其他身份验证流程中的问题,在这些流程中,用户从不安全的页面开始并过渡到安全页面。 要用WebView测试应用程序,必须通过完成以下任何一步来启用要测试的应用程序的新SameSite行为: 1-通过SameSite devtools中的切换UI标志webview-启用-现代-cookie-相同站点手动在测试设备上启用WebView行为。这种方法允许您在运行Android5.0 (API 21)或更高版本(包括Android12)和WebView版本89.0.4385.0或更高版本的任何设备上进行测试。 2-通过targetSdkVersion编译你的应用程序来针对安卓12 (APILevel31)。如果您使用这种方法,
you must use a device that runs Android 12.
https://stackoverflow.com/questions/69687172
复制相似问题