标签: rtcpeerconnection

参数为 null 的 addIceCandidate 导致错误

我正在尝试学习 WebRTC,我已经实现了在同一页面中连接两个 RTCPeerConnection,现在我试图将它们分成两个单独的页面并连接它们。但是,在编写代码并交换报价和​​答案后,我注意到initiator.html 上的 addIceCandidate() 将始终使用 null 参数抛出此问题

Error at addIceCandidate from queue: TypeError: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Candidate missing values for both sdpMid and sdpMLineIndex at processCandidateQueue (initiator.html:69)

经过一些阅读,我了解到 null 用于表示 ICE Candidate 收集完成,示例如下:https : //webrtc.github.io/samples/src/content/peerconnection/pc1/ 收集完成时也执行带有参数 null 的“addIceCandidate” . 但我不明白为什么我会看到我此时看到的错误。

我试过的:

  1. 我曾试图写一个检查,如果候选人为空,跳过 addIceCandidate。
  2. 将所有连接逻辑放在较少的按钮中以减少函数调用之间的延迟
  3. 将adapter-latest.js 添加到每个页面

结果:

  1. 发起方连接状态为“失败”,接收方连接状态为“新建”。无法流式传输到接收器页面。
  2. 抛出了同样的错误
  3. 错误消失了,但连接仍然失败

发起者.html

<!doctype html>
<html lang="en">
  <head>
    <title>First WebRTC Project</title>
        <link href="common.css" rel="stylesheet" />
  </head>
  <body>
        <div class="log-display"></div>
        <div class="func-list">
            Initiating host
            <div class="func">
                <button onclick="onPrepareMedia(this)">Prepare …
Run Code Online (Sandbox Code Playgroud)

javascript webrtc rtcpeerconnection

3
推荐指数
1
解决办法
3539
查看次数

Webrtc Android DTMF 支持

我正在尝试基于 WebRTC 为 Android/iOS 应用程序实现 DTMF。Android 上有 DTMF API 吗?我尝试过拨打以下电话:

m_peerConnectionFactory.createdtmfsender(localAudioTrack);
m_peerConnectionFactory.insertDtmf(tone, duration,gap);
Run Code Online (Sandbox Code Playgroud)

我尝试过使用上面的 javascript api,它在浏览器上运行良好,但无法在 Android 上运行。我还没有在 iOS 上尝试过,因为我需要先让它在 Android 上运行。

请告诉我 Android/iOS 是否支持此功能?如果是的话,有人可以帮我提供正确的 api 吗

使用的 libjingle 版本:chrome 74.0.3729.169

webrtc peer-connection rtcpeerconnection webrtc-android webrtc-ios

3
推荐指数
1
解决办法
1040
查看次数

无法从 RTCPeerConnection 获取 IP V4 地址 - chrome

我需要从 Web 应用程序获取客户端本地 IP 地址。

为此,我使用标准的 RTCPeerConnection 实现来获取。但是返回的ice候选并没有携带IP V4地址,而是一个看起来像guid的地址:asdf-xxxx-saass-xxxx.local

但令人惊讶的是,这个chrome 扩展程序能够在同一台机器和浏览器上获取相同的内容。

注意:我在 Web 应用程序中使用的代码与扩展的代码相同

这是相同的html代码:

<html>

<head>

    <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.1.js"></script>

    <script type="text/javascript">

        function logit(msg) {
            var dt = new Date(); var time = dt.getHours() + ":" + dt.getMinutes() + ":"
                + dt.getSeconds();
            console.log(time + " " + msg);
        };

        function getChromeVersion() {
            try {
                var raw = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);
                return raw ? parseInt(raw[2], 10) : false;
            } catch (e) {
                return null;
            }
        }

        function getChromeManifest() {
            return chrome.runtime …
Run Code Online (Sandbox Code Playgroud)

google-chrome webrtc rtcpeerconnection

2
推荐指数
1
解决办法
4630
查看次数

我什么时候可以考虑断开 RTCPeerConnection?

我试图检测 RTCPeerConnection 的另一端何时断开连接。目前我正在使用我的 RTCPeerConnection 对象执行以下操作:

rtcPeerConnection.oniceconnectionstatechange = () => {
        const state = rtcPeerConnection.iceConnectionState;

        if (state === "failed" || state === "closed") {
            // connection to the peer is lost and unsalvageable, run cleanup code
        } else if (state === "disconnected") {
            // do nothing in the "disconnected" state as it appears to be a transient 
            // state that can easily return to "connected" - I've seen this with Firefox
        }
    };
Run Code Online (Sandbox Code Playgroud)

这似乎适用于我在非常简单的网络条件下进行的有限测试,但来自MDN的以下内容让我暂停,它可能不会在生产中保持不变:

当然,“断开”和“关闭”并不一定表示错误;这些可能是正常 ICE 协商的结果,所以一定要正确处理这些(如果有的话)。

RTCPeerConnection.onconnectionstatechange如果 …

javascript webrtc rtcpeerconnection

2
推荐指数
1
解决办法
1139
查看次数

Javascript WebRTC 无法设置远程应答 sdp:在错误状态下调用:kHaveRemoteOffer 并在错误状态下调用:kStable

我无法让我的 WebRTC 代码正常工作..我相信我做的一切都是正确的,但它仍然无法正常工作。有一些奇怪的为什么 ontrack 这么早就被调用了,也许它应该是这样的。

该网站使用 javascript 代码,服务器代码我没有发布,但这就是 WebSockets 连接的地方只是一个交换器,您发送到服务器的内容将相同的信息发送回您也连接的其他合作伙伴(陌生人)。

服务器代码看起来像这个小示例

    private void writeStranger(UserProfile you, String msg) {
        UserProfile stranger = you.stranger;
        if(stranger != null)
            sendMessage(stranger.getWebSocket(), msg);
    }

    public void sendMessage(WebSocket websocket, String msg) {
        try {
            websocket.send(msg);
        } catch ( WebsocketNotConnectedException e ) {
            disconnnectClient(websocket);
        }
    }

   //...

        case "ice_candidate":
            JSONObject candidatePackage = (JSONObject) packet.get(1);
            JSONObject candidate = (JSONObject) candidatePackage.get("candidate");

            obj = new JSONObject();
            list = new JSONArray();

            list.put("iceCandidate");
            obj.put("candidate", candidate);
            list.put(obj);

            System.out.println("Sent = " + list.toString());

            writeStranger(you, list.toString()); …
Run Code Online (Sandbox Code Playgroud)

javascript html5-video webrtc getusermedia rtcpeerconnection

2
推荐指数
1
解决办法
4240
查看次数