首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PeerJS webRTC应用程序不能在android 11上工作

PeerJS webRTC应用程序不能在android 11上工作
EN

Stack Overflow用户
提问于 2021-10-23 10:18:36
回答 1查看 514关注 0票数 1

我正在为android开发一个音频/视频呼叫应用程序。它在PeerJS上使用webView。这是我的PeerJ客户端代码,

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 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.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69687172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档