【问题标题】:Using WebRTC for Video Streaming in android app在 Android 应用中使用 WebRTC 进行视频流
【发布时间】:2020-07-03 18:12:23
【问题描述】:

我正在使用 WebRTC 在我的 android 应用程序和 Web 应用程序之间进行媒体流通信。 对于信号,我使用了 socket.io 并使用套接字,我已经建立了 android 应用程序和 Web 应用程序之间的连接。我可以在移动应用程序上发送报价和接收答案,理想情况下应该开始流式传输,但在我的情况下,它会在网络上引发此错误。

 WebRTC: ICE failed, your TURN server appears to be broken, see about:webrtc for more details
 failed screen.js:835:25
 Need to reconnect student screen.js:838:33
 Ice Connecttion state Changed to disconnected|closed|failed

我认为这是因为无法与 TURN 服务器建立连接。 有人可以帮我弄这个吗。我正在使用这段代码进行 TURN 服务器连接。 另外请告诉我如何验证我与 TURN 的连接是否已建立。

 try {



        PeerConnection.IceServer peerIceServer1=PeerConnection.IceServer.builder("stun:stun.XXXXXX.com:3478")
                .setUsername("XXXXXX")
                .setPassword("XXXXXX")
                .setTlsCertPolicy(PeerConnection.TlsCertPolicy.TLS_CERT_POLICY_INSECURE_NO_CHECK)
                .createIceServer();

        String username1 = "XXXXX";
        String credential1 = "XXXXXX/XXXXXXXX=";
        String turnUrll = "turn:turn.XXXX.com:3478";

 
        PeerConnection.IceServer peerIceServer = PeerConnection.IceServer.builder(turnUrll)
                .setUsername(username1)
                .setPassword(credential1)
                .setTlsCertPolicy(PeerConnection.TlsCertPolicy.TLS_CERT_POLICY_INSECURE_NO_CHECK)
                .createIceServer();

        peerIceServers.add(peerIceServer);
        peerIceServers.add(peerIceServer1);

    }
    catch (Exception e){
        e.printStackTrace();
    } 

这是我试图创建对等连接的一段代码。

  private void createPeerConnection() {

    PeerConnection.RTCConfiguration rtcConfig = new PeerConnection.RTCConfiguration(peerIceServers);
    // TCP candidates are only useful when connecting to a server that supports
    // ICE-TCP.
    rtcConfig.tcpCandidatePolicy = PeerConnection.TcpCandidatePolicy.ENABLED;
    rtcConfig.bundlePolicy = PeerConnection.BundlePolicy.MAXBUNDLE;
    rtcConfig.rtcpMuxPolicy = PeerConnection.RtcpMuxPolicy.REQUIRE;
    rtcConfig.continualGatheringPolicy = PeerConnection.ContinualGatheringPolicy.GATHER_CONTINUALLY;
    // Use ECDSA encryption.
    rtcConfig.keyType = PeerConnection.KeyType.ECDSA;
    localPeer = peerConnectionFactory.createPeerConnection(rtcConfig,
            new CustomPeerConnectionObserver("localPeerCreation") {
                @Override
                public void onIceCandidate(IceCandidate iceCandidate) {
                    super.onIceCandidate(iceCandidate);
                    onIceCandidateReceived(iceCandidate);
                }

                @Override
                public void onAddStream(MediaStream mediaStream) {
                    showToast("Received Remote stream");
                    super.onAddStream(mediaStream);
                }
            });


    addStreamToLocalPeer();
}

如果有人想要更好地查看代码,我将分享更多细节。请我需要帮助,因为我什至找不到这方面的文档。

【问题讨论】:

    标签: android webrtc turn webrtc-android


    【解决方案1】:

    您使用的回合服务器似乎不再处于活动状态。 请注意:几乎不可能找到免费的 TURN 服务器。据我所知,只有一个免费转服务器正在运行,它是:http://numb.viagenie.ca。 请注意:这个回合服务器正在工作,但还不够好,您经常会断开连接。 你应该是如下用户:

    private ArrayList<PeerConnection.IceServer> iceServer = new ArrayList<>(); iceServers.add(PeerConnection.IceServer.builder("stun:stun.l.google.com:19302").createIceServer()); iceServers.add(PeerConnection.IceServer.builder("stun:numb.viagenie.ca").createIceServer()); iceServers.add(PeerConnection.IceServer.builder("turn:numb.viagenie.ca").setUsername("YOUR_USER_NAME").setPassword("YOUR_PASSWORD").createIceServer());

    并将其传递给 PeerConnection。

    或者,您可以在 XIRSYS 上创建一个开发帐户并获得免费的每月报价并使用它。

    【讨论】:

    • 我已经能够解决它。问题出在 SDP 上。我将很快发布代码和教程,这对很多人都有帮助。
    • “很快”什么时候?
    猜你喜欢
    • 2018-02-04
    • 1970-01-01
    • 2021-05-14
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多