Remote stream audio working but video not working

When i get new remote stream, i save it to firebase DB then fetch back and display on the RCTView, but when i do that, i get a message that No video stream for react tag: 8554DFE4-1CB2-4587-8EED-7E21403382CC but the audio works. can you please help?

Also please how do i enable group video call?

1 Like

If your remote stream audio is working, but your video is not, it is likely that your computer is not meeting the system requirements for viewing the stream. For example, if you are running Windows 10 and do not have a compatible graphics card or processor, then you may experience problems with viewing the stream.

I’m getting the same error, for me I don’t know how to check if the audio is working but the video is not, I’m using RTCView.

<RTCView
  streamURL={localStream.toURL()}
  style={{ flex: 1 }}
  objectFit="cover"
  mirror
/>

Here are my codes, the way I’m studying this is to have one streaming and the other one just watching.

The joiner scans a QR code that contains the uid of the streamer

import {
  BarCodeScanner,
  BarCodeScannerResult
} from 'expo-barcode-scanner';
import Camera from 'components/Camera';
import React, {
  useCallback,
  useContext,
  useEffect,
  useRef,
  useState
} from 'react';
import { SafeAreaView } from 'react-native-safe-area-context';
import { Button } from 'native-base';
import { RootStackScreen } from 'navigators/RootStackNavigator/types';
import PermissionsGranted from 'components/PermissionsGranted';
import { WebSocketContext } from 'contexts/WebSocketConnection';
import { showConnectionError } from 'utils/alert';
import PeerConnection from 'contexts/PeerConnection';
import {
  mediaDevices,
  MediaStream,
  RTCIceCandidate,
  RTCPeerConnection,
  RTCSessionDescription,
  RTCView
} from 'react-native-webrtc';
import { globalStore } from 'fluxible/index';

const ScanQR: React.FunctionComponent<RootStackScreen<'ScanQR'>> = ({
  navigation
}) => {
  const { sendWebsocketMessage } = useContext(WebSocketContext);
  const hasScannedRef = useRef(false);
  const [remoteStream, setRemoteStream] =
    useState<MediaStream | null>(null);

  const onBarCodeScanned = useCallback(
    async (result: BarCodeScannerResult) => {
      try {
        if (hasScannedRef.current) return;
        hasScannedRef.current = true;

        sendWebsocketMessage('join', {
          connectionId: result.data
        });

        globalStore.addEvent(
          'websocketEvent-offer',
          async ({ connectionId, offer }) => {
            console.log('websocketEvent-offer', offer);
            const peerConnection = new RTCPeerConnection({
              iceServers: [
                { urls: 'stun:stun.l.google.com:19302' },
                { urls: 'stun:stun1.l.google.com:19302' },
                { urls: 'stun:stun2.l.google.com:19302' }
              ],
              sdpSemantics: 'unified-plan'
            });

            peerConnection.addEventListener(
              'connectionstatechange',
              event => {
                console.log('connectionstatechange', event);
              }
            );

            peerConnection.addEventListener(
              'icecandidate',
              event => {
                console.log('iceCandidate', event.candidate);

                if (event.candidate) {
                  sendWebsocketMessage('iceCandidate', {
                    connectionId,
                    candidate: event.candidate
                  });
                }
              }
            );

            peerConnection.addEventListener(
              'icecandidateerror',
              event => {
                console.log('icecandidateerror', event);
              }
            );

            peerConnection.addEventListener(
              'iceconnectionstatechange',
              event => {
                console.log('iceconnectionstatechange', event);
              }
            );

            peerConnection.addEventListener(
              'negotiationneeded',
              event => {
                console.log('negotiationneeded', event);
              }
            );

            peerConnection.addEventListener(
              'signalingstatechange',
              event => {
                console.log('signalingstatechange', event);
              }
            );

            peerConnection.addEventListener('track', event => {
              console.log('track', event);

              const remoteStream = new MediaStream(undefined);
              remoteStream.addTrack(event.track);
              setRemoteStream(remoteStream);
            });

            peerConnection.addEventListener('track', event => {
              console.log('track', event);
            });

            globalStore.addEvent(
              'websocketEvent-iceCandidate',
              async ({ candidate }) => {
                try {
                  await peerConnection.addIceCandidate(
                    new RTCIceCandidate(candidate)
                  );
                } catch (error) {
                  console.log('websocketEvent-iceCandidate', error);
                }
              }
            );

            await peerConnection.setRemoteDescription(
              new RTCSessionDescription(offer)
            );

            const answer =
              (await peerConnection.createAnswer()) as RTCSessionDescription;

            await peerConnection.setLocalDescription(answer);

            sendWebsocketMessage('answer', {
              connectionId,
              answer: peerConnection.localDescription
            });
          }
        );
      } catch (error) {
        console.log(error);

        showConnectionError([
          {
            onPress: () => {
              hasScannedRef.current = false;
            }
          }
        ]);
      }
    },
    [sendWebsocketMessage]
  );

  return (
    <PermissionsGranted>
      <SafeAreaView style={{ flex: 1 }}>
        {remoteStream ? (
          <RTCView
            streamURL={remoteStream.toURL()}
            style={{ flex: 1 }}
            objectFit="cover"
            mirror
          />
        ) : (
          <Camera
            style={{ flex: 1 }}
            barCodeScannerSettings={{
              barCodeTypes: [BarCodeScanner.Constants.BarCodeType.qr]
            }}
            onBarCodeScanned={onBarCodeScanned}
          />
        )}
        <Button
          style={{ margin: 10 }}
          onPress={() => {
            navigation.navigate('Library');
          }}
        >
          Cancel
        </Button>
      </SafeAreaView>
    </PermissionsGranted>
  );
};

export default ScanQR;

The streamer obtains uid from the server

import {
  BarCodeScanner,
  BarCodeScannerResult
} from 'expo-barcode-scanner';
import Camera from 'components/Camera';
import React, {
  useCallback,
  useContext,
  useRef,
  useState
} from 'react';
import { SafeAreaView } from 'react-native-safe-area-context';
import { Button } from 'native-base';
import { RootStackScreen } from 'navigators/RootStackNavigator/types';
import PermissionsGranted from 'components/PermissionsGranted';
import { WebSocketContext } from 'contexts/WebSocketConnection';
import { showConnectionError } from 'utils/alert';
import {
  MediaStream,
  RTCIceCandidate,
  RTCPeerConnection,
  RTCSessionDescription,
  RTCView
} from 'react-native-webrtc';
import { globalStore } from 'fluxible/index';

const ScanQR: React.FunctionComponent<RootStackScreen<'ScanQR'>> = ({
  navigation
}) => {
  const { sendWebsocketMessage } = useContext(WebSocketContext);
  const hasScannedRef = useRef(false);
  const [remoteStream, setRemoteStream] =
    useState<MediaStream | null>(null);

  const onBarCodeScanned = useCallback(
    async (result: BarCodeScannerResult) => {
      try {
        if (hasScannedRef.current) return;
        hasScannedRef.current = true;

        sendWebsocketMessage('join', {
          connectionId: result.data
        });

        globalStore.addEvent(
          'websocketEvent-offer',
          async ({ connectionId, offer }) => {
            console.log('websocketEvent-offer', offer);
            const peerConnection = new RTCPeerConnection({
              iceServers: [
                { urls: 'stun:stun.l.google.com:19302' },
                { urls: 'stun:stun1.l.google.com:19302' },
                { urls: 'stun:stun2.l.google.com:19302' }
              ],
              sdpSemantics: 'unified-plan'
            });

            peerConnection.addEventListener(
              'connectionstatechange',
              event => {
                console.log('connectionstatechange', event);
              }
            );

            peerConnection.addEventListener(
              'icecandidate',
              event => {
                console.log('iceCandidate', event.candidate);

                if (event.candidate) {
                  sendWebsocketMessage('iceCandidate', {
                    connectionId,
                    candidate: event.candidate
                  });
                }
              }
            );

            peerConnection.addEventListener(
              'icecandidateerror',
              event => {
                console.log('icecandidateerror', event);
              }
            );

            peerConnection.addEventListener(
              'iceconnectionstatechange',
              event => {
                console.log('iceconnectionstatechange', event);
              }
            );

            peerConnection.addEventListener(
              'negotiationneeded',
              event => {
                console.log('negotiationneeded', event);
              }
            );

            peerConnection.addEventListener(
              'signalingstatechange',
              event => {
                console.log('signalingstatechange', event);
              }
            );

            peerConnection.addEventListener('track', event => {
              console.log('track', event);

              const remoteStream = new MediaStream(undefined);
              remoteStream.addTrack(event.track);
              setRemoteStream(remoteStream);
            });

            peerConnection.addEventListener('track', event => {
              console.log('track', event);
            });

            globalStore.addEvent(
              'websocketEvent-iceCandidate',
              async ({ candidate }) => {
                try {
                  await peerConnection.addIceCandidate(
                    new RTCIceCandidate(candidate)
                  );
                } catch (error) {
                  console.log('websocketEvent-iceCandidate', error);
                }
              }
            );

            await peerConnection.setRemoteDescription(
              new RTCSessionDescription(offer)
            );

            const answer =
              (await peerConnection.createAnswer()) as RTCSessionDescription;

            await peerConnection.setLocalDescription(answer);

            sendWebsocketMessage('answer', {
              connectionId,
              answer: peerConnection.localDescription
            });
          }
        );
      } catch (error) {
        console.log(error);

        showConnectionError([
          {
            onPress: () => {
              hasScannedRef.current = false;
            }
          }
        ]);
      }
    },
    [sendWebsocketMessage]
  );

  return (
    <PermissionsGranted>
      <SafeAreaView style={{ flex: 1 }}>
        {remoteStream ? (
          <RTCView
            streamURL={remoteStream.toURL()}
            style={{ flex: 1 }}
            objectFit="cover"
            mirror
          />
        ) : (
          <Camera
            style={{ flex: 1 }}
            barCodeScannerSettings={{
              barCodeTypes: [BarCodeScanner.Constants.BarCodeType.qr]
            }}
            onBarCodeScanned={onBarCodeScanned}
          />
        )}
        <Button
          style={{ margin: 10 }}
          onPress={() => {
            navigation.navigate('Library');
          }}
        >
          Cancel
        </Button>
      </SafeAreaView>
    </PermissionsGranted>
  );
};

export default ScanQR;

I’ve tried it 2 differrent ways:

  • The joiner calling the streamer
  • The streamer calling the joiner (the approach I pasted above)

But I ended up with the same error.

I will post the full log on my next comment (because of character limit).

Here’s a full logs:

 LOG  ios WebSocket: sendWebsocketMessage join {"connectionId": "dIeyjdbZSQ0CFaw="}
 LOG  ios WebSocket: schedulePing
 LOG  android WebSocket: onMessage {"event":"join","payload":{"connectionId":"dIexneagSQ0CFXw="}}
 LOG  android WebSocket: schedulePing
 LOG  android rn-webrtc:pc:DEBUG 0 ctor +0ms
 LOG  android rn-webrtc:pc:DEBUG 0 addTrack +35ms
 LOG  android rn-webrtc:pc:DEBUG 0 addTrack +25ms
 LOG  android negotiationneeded {"isTrusted": false}
 LOG  android rn-webrtc:pc:DEBUG 0 createOffer +58ms
 LOG  android rn-webrtc:pc:DEBUG 0 createOffer OK +10ms
 LOG  android rn-webrtc:pc:DEBUG 0 setLocalDescription +3ms
 LOG  android WebSocket: sendWebsocketMessage offer {"connectionId": "dIexneagSQ0CFXw=", "offer": {"sdp": "v=0
o=- 8412393473377319713 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 9 102 0 8 105 13 110 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:Tfd+
a=ice-pwd:63YbvbH/9o/UBDorNYfZ6j00
a=ice-options:trickle renomination
a=fingerprint:sha-256 40:AB:1C:B1:8B:6A:3C:2F:20:AF:27:71:EF:EF:EB:B6:87:83:48:29:28:F8:53:9C:62:81:E2:65:01:F6:64:3D
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=sendrecv
a=msid:- b293450b-1720-48f2-8fef-43b5656a29f8
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
a=rtpmap:103 ISAC/16000
a=rtpmap:9 G722/8000
a=rtpmap:102 ILBC/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
a=ssrc:1164204168 cname:x20hUnPJ5ozz2iq4
a=ssrc:1164204168 msid:- b293450b-1720-48f2-8fef-43b5656a29f8
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 35 36 127 125 104 124 106
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:Tfd+
a=ice-pwd:63YbvbH/9o/UBDorNYfZ6j00
a=ice-options:trickle renomination
a=fingerprint:sha-256 40:AB:1C:B1:8B:6A:3C:2F:20:AF:27:71:EF:EF:EB:B6:87:83:48:29:28:F8:53:9C:62:81:E2:65:01:F6:64:3D
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:- 6948318d-8d7d-4b9b-9d7d-85b8a8210dcf
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:35 AV1/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=rtcp-fb:35 ccm fir
a=rtcp-fb:35 nack
a=rtcp-fb:35 nack pli
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:125 rtx/90000
a=fmtp:125 apt=127
a=rtpmap:104 red/90000
a=rtpmap:124 rtx/90000
a=fmtp:124 apt=104
a=rtpmap:106 ulpfec/90000
a=ssrc-group:FID 158803842 373224314
a=ssrc:158803842 cname:x20hUnPJ5ozz2iq4
a=ssrc:158803842 msid:- 6948318d-8d7d-4b9b-9d7d-85b8a8210dcf
a=ssrc:373224314 cname:x20hUnPJ5ozz2iq4
a=ssrc:373224314 msid:- 6948318d-8d7d-4b9b-9d7d-85b8a8210dcf
", "type": "offer"}}
 LOG  android WebSocket: schedulePing
 LOG  android signalingstatechange {"isTrusted": false}
 LOG  android rn-webrtc:pc:DEBUG 0 setLocalDescription OK +24ms
 LOG  android iceCandidate {"candidate": "candidate:3787395334 1 udp 2122260223 192.168.1.13 40600 typ host generation 0 ufrag Tfd+ network-id 3 network-cost 10", "sdpMLineIndex": 0, "sdpMid": "0"}
 LOG  android WebSocket: sendWebsocketMessage iceCandidate {"candidate": {"candidate": "candidate:3787395334 1 udp 2122260223 192.168.1.13 40600 typ host generation 0 ufrag Tfd+ network-id 3 network-cost 10", "sdpMLineIndex": 0, "sdpMid": "0"}, "connectionId": "dIexneagSQ0CFXw="}
 LOG  android WebSocket: schedulePing
 LOG  android iceCandidate {"candidate": "candidate:3787395334 1 udp 2122260223 192.168.1.13 36205 typ host generation 0 ufrag Tfd+ network-id 3 network-cost 10", "sdpMLineIndex": 1, "sdpMid": "1"}
 LOG  android WebSocket: sendWebsocketMessage iceCandidate {"candidate": {"candidate": "candidate:3787395334 1 udp 2122260223 192.168.1.13 36205 typ host generation 0 ufrag Tfd+ network-id 3 network-cost 10", "sdpMLineIndex": 1, "sdpMid": "1"}, "connectionId": "dIexneagSQ0CFXw="}
 LOG  android WebSocket: schedulePing
 LOG  android iceCandidate {"candidate": "candidate:842163049 1 udp 1686052607 112.200.99.13 4737 typ srflx raddr 192.168.1.13 rport 40600 generation 0 ufrag Tfd+ network-id 3 network-cost 10", "sdpMLineIndex": 0, "sdpMid": "0"}
 LOG  android WebSocket: sendWebsocketMessage iceCandidate {"candidate": {"candidate": "candidate:842163049 1 udp 1686052607 112.200.99.13 4737 typ srflx raddr 192.168.1.13 rport 40600 generation 0 ufrag Tfd+ network-id 3 network-cost 10", "sdpMLineIndex": 0, "sdpMid": "0"}, "connectionId": "dIexneagSQ0CFXw="}
 LOG  android WebSocket: schedulePing
 LOG  android iceCandidate {"candidate": "candidate:842163049 1 udp 1686052607 112.200.99.13 4738 typ srflx raddr 192.168.1.13 rport 36205 generation 0 ufrag Tfd+ network-id 3 network-cost 10", "sdpMLineIndex": 1, "sdpMid": "1"}
 LOG  ios WebSocket: onMessage {"event":"offer","payload":{"connectionId":"dIeyjdbZSQ0CFaw=","offer":{"type":"offer","sdp":"v=0\r\no=- 8412393473377319713 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 9 102 0 8 105 13 110 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:Tfd+\r\na=ice-pwd:63YbvbH/9o/UBDorNYfZ6j00\r\na=ice-options:trickle renomination\r\na=fingerprint:sha-256 40:AB:1C:B1:8B:6A:3C:2F:20:AF:27:71:EF:EF:EB:B6:87:83:48:29:28:F8:53:9C:62:81:E2:65:01:F6:64:3D\r\na=setup:actpass\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=sendrecv\r\na=msid:- b293450b-1720-48f2-8fef-43b5656a29f8\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:63 red/48000/2\r\na=fmtp:63 111/111\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:102 ILBC/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:1164204168 cname:x20hUnPJ5ozz2iq4\r\na=ssrc:1164204168 msid:- b293450b-1720-48f2-8fef-43b5656a29f8\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 35 36 127 125 104 124 106\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:Tfd+\r\na=ice-pwd:63YbvbH/9o/UBDorNYfZ6j00\r\na=ice-options:trickle renomination\r\na=fingerprint:sha-256 40:AB:1C:B1:8B:6A:3C:2F:20:AF:27:71:EF:EF:EB:B6:87:83:48:29:28:F8:53:9C:62:81:E2:65:01:F6:64:3D\r\na=setup:actpass\r\na=mid:1\r\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:13 urn:3gpp:video-orientation\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendrecv\r\na=msid:- 6948318d-8d7d-4b9b-9d7d-85b8a8210dcf\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:35 AV1/90000\r\na=rtcp-fb:35 goog-remb\r\na=rtcp-fb:35 transport-cc\r\na=rtcp-fb:35 ccm fir\r\na=rtcp-fb:35 nack\r\na=rtcp-fb:35 nack pli\r\na=rtpmap:36 rtx/90000\r\na=fmtp:36 apt=35\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:125 rtx/90000\r\na=fmtp:125 apt=127\r\na=rtpmap:104 red/90000\r\na=rtpmap:124 rtx/90000\r\na=fmtp:124 apt=104\r\na=rtpmap:106 ulpfec/90000\r\na=ssrc-group:FID 158803842 373224314\r\na=ssrc:158803842 cname:x20hUnPJ5ozz2iq4\r\na=ssrc:158803842 msid:- 6948318d-8d7d-4b9b-9d7d-85b8a8210dcf\r\na=ssrc:373224314 cname:x20hUnPJ5ozz2iq4\r\na=ssrc:373224314 msid:- 6948318d-8d7d-4b9b-9d7d-85b8a8210dcf\r\n"}}}
 LOG  android WebSocket: sendWebsocketMessage iceCandidate {"candidate": {"candidate": "candidate:842163049 1 udp 1686052607 112.200.99.13 4738 typ srflx raddr 192.168.1.13 rport 36205 generation 0 ufrag Tfd+ network-id 3 network-cost 10", "sdpMLineIndex": 1, "sdpMid": "1"}, "connectionId": "dIexneagSQ0CFXw="}
 LOG  android WebSocket: schedulePing
 LOG  ios WebSocket: schedulePing
 LOG  android iceCandidate null
 LOG  android WebSocket: onMessage {"event":"iceCandidate","payload":{"connectionId":"dIexneagSQ0CFXw=","candidate":{"candidate":"candidate:3787395334 1 udp 2122260223 192.168.1.13 40600 typ host generation 0 ufrag Tfd+ network-id 3 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}}
 LOG  android WebSocket: schedulePing
 LOG  android WebSocket: onMessage {"event":"iceCandidate","payload":{"connectionId":"dIexneagSQ0CFXw=","candidate":{"candidate":"candidate:3787395334 1 udp 2122260223 192.168.1.13 36205 typ host generation 0 ufrag Tfd+ network-id 3 network-cost 10","sdpMLineIndex":1,"sdpMid":"1"}}}
 LOG  android WebSocket: schedulePing
 LOG  android WebSocket: onMessage {"event":"iceCandidate","payload":{"connectionId":"dIexneagSQ0CFXw=","candidate":{"candidate":"candidate:842163049 1 udp 1686052607 112.200.99.13 4737 typ srflx raddr 192.168.1.13 rport 40600 generation 0 ufrag Tfd+ network-id 3 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}}
 LOG  android WebSocket: schedulePing
 LOG  android WebSocket: onMessage {"event":"iceCandidate","payload":{"connectionId":"dIexneagSQ0CFXw=","candidate":{"candidate":"candidate:842163049 1 udp 1686052607 112.200.99.13 4738 typ srflx raddr 192.168.1.13 rport 36205 generation 0 ufrag Tfd+ network-id 3 network-cost 10","sdpMLineIndex":1,"sdpMid":"1"}}}
 LOG  android WebSocket: schedulePing
 LOG  ios websocketEvent-offer {"sdp": "v=0
o=- 8412393473377319713 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 9 102 0 8 105 13 110 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:Tfd+
a=ice-pwd:63YbvbH/9o/UBDorNYfZ6j00
a=ice-options:trickle renomination
a=fingerprint:sha-256 40:AB:1C:B1:8B:6A:3C:2F:20:AF:27:71:EF:EF:EB:B6:87:83:48:29:28:F8:53:9C:62:81:E2:65:01:F6:64:3D
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=sendrecv
a=msid:- b293450b-1720-48f2-8fef-43b5656a29f8
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
a=rtpmap:103 ISAC/16000
a=rtpmap:9 G722/8000
a=rtpmap:102 ILBC/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
a=ssrc:1164204168 cname:x20hUnPJ5ozz2iq4
a=ssrc:1164204168 msid:- b293450b-1720-48f2-8fef-43b5656a29f8
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 35 36 127 125 104 124 106
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:Tfd+
a=ice-pwd:63YbvbH/9o/UBDorNYfZ6j00
a=ice-options:trickle renomination
a=fingerprint:sha-256 40:AB:1C:B1:8B:6A:3C:2F:20:AF:27:71:EF:EF:EB:B6:87:83:48:29:28:F8:53:9C:62:81:E2:65:01:F6:64:3D
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:- 6948318d-8d7d-4b9b-9d7d-85b8a8210dcf
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:35 AV1/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=rtcp-fb:35 ccm fir
a=rtcp-fb:35 nack
a=rtcp-fb:35 nack pli
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:125 rtx/90000
a=fmtp:125 apt=127
a=rtpmap:104 red/90000
a=rtpmap:124 rtx/90000
a=fmtp:124 apt=104
a=rtpmap:106 ulpfec/90000
a=ssrc-group:FID 158803842 373224314
a=ssrc:158803842 cname:x20hUnPJ5ozz2iq4
a=ssrc:158803842 msid:- 6948318d-8d7d-4b9b-9d7d-85b8a8210dcf
a=ssrc:373224314 cname:x20hUnPJ5ozz2iq4
a=ssrc:373224314 msid:- 6948318d-8d7d-4b9b-9d7d-85b8a8210dcf
", "type": "offer"}
 LOG  ios rn-webrtc:pc:DEBUG 0 ctor +0ms
 LOG  ios rn-webrtc:pc:DEBUG 0 setRemoteDescription +4ms
 LOG  ios rn-webrtc:pc:DEBUG 0 createAnswer +1ms
 LOG  ios signalingstatechange {"isTrusted": false}
 LOG  ios rn-webrtc:pc:DEBUG 0 setRemoteDescription OK +9ms
 LOG  ios rn-webrtc:pc:DEBUG 0 createAnswer OK +5ms
 LOG  ios rn-webrtc:pc:DEBUG 0 setLocalDescription +1ms
 LOG  ios WebSocket: sendWebsocketMessage answer {"answer": {"sdp": "v=0
o=- 6575414303643588162 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 9 102 0 8 105 13 110 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:pALf
a=ice-pwd:eUgqY4cFIKmnB3YrYU2emNxx
a=ice-options:trickle renomination
a=fingerprint:sha-256 28:C1:B2:03:60:79:F5:EC:C7:EE:3C:A5:5D:5E:7C:1F:31:EE:AE:5A:91:2A:82:D1:C6:A5:8B:83:00:FE:DB:E7
a=setup:active
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
a=rtpmap:103 ISAC/16000
a=rtpmap:9 G722/8000
a=rtpmap:102 ILBC/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 35 36 127 125 104 124 106
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:pALf
a=ice-pwd:eUgqY4cFIKmnB3YrYU2emNxx
a=ice-options:trickle renomination
a=fingerprint:sha-256 28:C1:B2:03:60:79:F5:EC:C7:EE:3C:A5:5D:5E:7C:1F:31:EE:AE:5A:91:2A:82:D1:C6:A5:8B:83:00:FE:DB:E7
a=setup:active
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:35 AV1/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=rtcp-fb:35 ccm fir
a=rtcp-fb:35 nack
a=rtcp-fb:35 nack pli
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e02a
a=rtpmap:125 rtx/90000
a=fmtp:125 apt=127
a=rtpmap:104 red/90000
a=rtpmap:124 rtx/90000
a=fmtp:124 apt=104
a=rtpmap:106 ulpfec/90000
", "type": "answer"}, "connectionId": "dIeyjdbZSQ0CFaw="}
 LOG  ios WebSocket: schedulePing
 LOG  ios rn-webrtc:pc:DEBUG 0 ontrack +7ms
 LOG  ios track {"isTrusted": false, "receiver": {"_id": "b293450b-1720-48f2-8fef-43b5656a29f8", "_peerConnectionId": 0, "_rtpParameters": [Object], "_track": {"_constraints": [Object], "_enabled": true, "_muted": false, "_peerConnectionId": 0, "_readyState": "live", "_settings": [Object], "id": "b293450b-1720-48f2-8fef-43b5656a29f8", "kind": "audio", "label": "", "remote": true}}, "streams": [], "track": {"_constraints": {}, "_enabled": true, "_muted": false, "_peerConnectionId": 0, "_readyState": "live", "_settings": {}, "id": "b293450b-1720-48f2-8fef-43b5656a29f8", "kind": "audio", "label": "", "remote": true}, "transceiver": {"_currentDirection": undefined, "_direction": "recvonly", "_mid": "0", "_peerConnectionId": 0, "_receiver": {"_id": "b293450b-1720-48f2-8fef-43b5656a29f8", "_peerConnectionId": 0, "_rtpParameters": [RTCRtpReceiveParameters], "_track": [MediaStreamTrack]}, "_sender": {"_id": "afc4c29b-79d6-4777-b98e-ac6cc073918d", "_peerConnectionId": 0, "_rtpParameters": [RTCRtpSendParameters], "_track": null}, "_stopped": false}}
 LOG  ios track {"isTrusted": false, "receiver": {"_id": "b293450b-1720-48f2-8fef-43b5656a29f8", "_peerConnectionId": 0, "_rtpParameters": [Object], "_track": {"_constraints": [Object], "_enabled": true, "_muted": false, "_peerConnectionId": 0, "_readyState": "live", "_settings": [Object], "id": "b293450b-1720-48f2-8fef-43b5656a29f8", "kind": "audio", "label": "", "remote": true}}, "streams": [], "track": {"_constraints": {}, "_enabled": true, "_muted": false, "_peerConnectionId": 0, "_readyState": "live", "_settings": {}, "id": "b293450b-1720-48f2-8fef-43b5656a29f8", "kind": "audio", "label": "", "remote": true}, "transceiver": {"_currentDirection": undefined, "_direction": "recvonly", "_mid": "0", "_peerConnectionId": 0, "_receiver": {"_id": "b293450b-1720-48f2-8fef-43b5656a29f8", "_peerConnectionId": 0, "_rtpParameters": [RTCRtpReceiveParameters], "_track": [MediaStreamTrack]}, "_sender": {"_id": "afc4c29b-79d6-4777-b98e-ac6cc073918d", "_peerConnectionId": 0, "_rtpParameters": [RTCRtpSendParameters], "_track": null}, "_stopped": false}}
 LOG  ios rn-webrtc:pc:DEBUG 0 ontrack +43ms
 LOG  ios track {"isTrusted": false, "receiver": {"_id": "6948318d-8d7d-4b9b-9d7d-85b8a8210dcf", "_peerConnectionId": 0, "_rtpParameters": [Object], "_track": {"_constraints": [Object], "_enabled": true, "_muted": false, "_peerConnectionId": 0, "_readyState": "live", "_settings": [Object], "id": "6948318d-8d7d-4b9b-9d7d-85b8a8210dcf", "kind": "video", "label": "", "remote": true}}, "streams": [], "track": {"_constraints": {}, "_enabled": true, "_muted": false, "_peerConnectionId": 0, "_readyState": "live", "_settings": {}, "id": "6948318d-8d7d-4b9b-9d7d-85b8a8210dcf", "kind": "video", "label": "", "remote": true}, "transceiver": {"_currentDirection": undefined, "_direction": "recvonly", "_mid": "1", "_peerConnectionId": 0, "_receiver": {"_id": "6948318d-8d7d-4b9b-9d7d-85b8a8210dcf", "_peerConnectionId": 0, "_rtpParameters": [RTCRtpReceiveParameters], "_track": [MediaStreamTrack]}, "_sender": {"_id": "e53a340c-636a-4034-8ccb-26498c5108c4", "_peerConnectionId": 0, "_rtpParameters": [RTCRtpSendParameters], "_track": null}, "_stopped": false}}
 LOG  ios track {"isTrusted": false, "receiver": {"_id": "6948318d-8d7d-4b9b-9d7d-85b8a8210dcf", "_peerConnectionId": 0, "_rtpParameters": [Object], "_track": {"_constraints": [Object], "_enabled": true, "_muted": false, "_peerConnectionId": 0, "_readyState": "live", "_settings": [Object], "id": "6948318d-8d7d-4b9b-9d7d-85b8a8210dcf", "kind": "video", "label": "", "remote": true}}, "streams": [], "track": {"_constraints": {}, "_enabled": true, "_muted": false, "_peerConnectionId": 0, "_readyState": "live", "_settings": {}, "id": "6948318d-8d7d-4b9b-9d7d-85b8a8210dcf", "kind": "video", "label": "", "remote": true}, "transceiver": {"_currentDirection": undefined, "_direction": "recvonly", "_mid": "1", "_peerConnectionId": 0, "_receiver": {"_id": "6948318d-8d7d-4b9b-9d7d-85b8a8210dcf", "_peerConnectionId": 0, "_rtpParameters": [RTCRtpReceiveParameters], "_track": [MediaStreamTrack]}, "_sender": {"_id": "e53a340c-636a-4034-8ccb-26498c5108c4", "_peerConnectionId": 0, "_rtpParameters": [RTCRtpSendParameters], "_track": null}, "_stopped": false}}
 LOG  ios signalingstatechange {"isTrusted": false}
 LOG  ios WebSocket: onMessage {"event":"answer","payload":{"connectionId":"dIeyjdbZSQ0CFaw=","answer":{"type":"answer","sdp":"v=0\r\no=- 6575414303643588162 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 9 102 0 8 105 13 110 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:pALf\r\na=ice-pwd:eUgqY4cFIKmnB3YrYU2emNxx\r\na=ice-options:trickle renomination\r\na=fingerprint:sha-256 28:C1:B2:03:60:79:F5:EC:C7:EE:3C:A5:5D:5E:7C:1F:31:EE:AE:5A:91:2A:82:D1:C6:A5:8B:83:00:FE:DB:E7\r\na=setup:active\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:63 red/48000/2\r\na=fmtp:63 111/111\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:102 ILBC/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 35 36 127 125 104 124 106\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:pALf\r\na=ice-pwd:eUgqY4cFIKmnB3YrYU2emNxx\r\na=ice-options:trickle renomination\r\na=fingerprint:sha-256 28:C1:B2:03:60:79:F5:EC:C7:EE:3C:A5:5D:5E:7C:1F:31:EE:AE:5A:91:2A:82:D1:C6:A5:8B:83:00:FE:DB:E7\r\na=setup:active\r\na=mid:1\r\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:13 urn:3gpp:video-orientation\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=recvonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:35 AV1/90000\r\na=rtcp-fb:35 goog-remb\r\na=rtcp-fb:35 transport-cc\r\na=rtcp-fb:35 ccm fir\r\na=rtcp-fb:35 nack\r\na=rtcp-fb:35 nack pli\r\na=rtpmap:36 rtx/90000\r\na=fmtp:36 apt=35\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e02a\r\na=rtpmap:125 rtx/90000\r\na=fmtp:125 apt=127\r\na=rtpmap:104 red/90000\r\na=rtpmap:124 rtx/90000\r\na=fmtp:124 apt=104\r\na=rtpmap:106 ulpfec/90000\r\n"}}}
 LOG  ios WebSocket: schedulePing
 LOG  ios rn-webrtc:pc:DEBUG 0 setLocalDescription OK +2s
 LOG  ios iceCandidate {"candidate": "candidate:3596738868 1 udp 2122260223 192.168.1.16 64719 typ host generation 0 ufrag pALf network-id 1 network-cost 10", "sdpMLineIndex": 0, "sdpMid": "0"}
 LOG  ios WebSocket: sendWebsocketMessage iceCandidate {"candidate": {"candidate": "candidate:3596738868 1 udp 2122260223 192.168.1.16 64719 typ host generation 0 ufrag pALf network-id 1 network-cost 10", "sdpMLineIndex": 0, "sdpMid": "0"}, "connectionId": "dIeyjdbZSQ0CFaw="}
 LOG  ios WebSocket: schedulePing
 WARN  No video stream for react tag: 99b6d89e-3db8-2828-3688-bc882324a488
 LOG  ios iceCandidate {"candidate": "candidate:2564955588 1 tcp 1518280447 192.168.1.16 56880 typ host tcptype passive generation 0 ufrag pALf network-id 1 network-cost 10", "sdpMLineIndex": 0, "sdpMid": "0"}
 LOG  ios WebSocket: sendWebsocketMessage iceCandidate {"candidate": {"candidate": "candidate:2564955588 1 tcp 1518280447 192.168.1.16 56880 typ host tcptype passive generation 0 ufrag pALf network-id 1 network-cost 10", "sdpMLineIndex": 0, "sdpMid": "0"}, "connectionId": "dIeyjdbZSQ0CFaw="}
 LOG  ios WebSocket: schedulePing
 LOG  ios iceCandidate {"candidate": "candidate:544315616 1 udp 1686052607 112.200.99.13 4739 typ srflx raddr 192.168.1.16 rport 64719 generation 0 ufrag pALf network-id 1 network-cost 10", "sdpMLineIndex": 0, "sdpMid": "0"}
 LOG  ios WebSocket: sendWebsocketMessage iceCandidate {"candidate": {"candidate": "candidate:544315616 1 udp 1686052607 112.200.99.13 4739 typ srflx raddr 192.168.1.16 rport 64719 generation 0 ufrag pALf network-id 1 network-cost 10", "sdpMLineIndex": 0, "sdpMid": "0"}, "connectionId": "dIeyjdbZSQ0CFaw="}
 LOG  ios WebSocket: schedulePing
 LOG  ios iceCandidate null
 LOG  ios WebSocket: onMessage {"event":"iceCandidate","payload":{"connectionId":"dIeyjdbZSQ0CFaw=","candidate":{"candidate":"candidate:3596738868 1 udp 2122260223 192.168.1.16 64719 typ host generation 0 ufrag pALf network-id 1 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}}
 LOG  ios WebSocket: schedulePing
 LOG  ios rn-webrtc:pc:DEBUG 0 addIceCandidate +575ms
 LOG  ios WebSocket: onMessage {"event":"iceCandidate","payload":{"connectionId":"dIeyjdbZSQ0CFaw=","candidate":{"candidate":"candidate:2564955588 1 tcp 1518280447 192.168.1.16 56880 typ host tcptype passive generation 0 ufrag pALf network-id 1 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}}
 LOG  ios WebSocket: schedulePing
 LOG  ios rn-webrtc:pc:DEBUG 0 addIceCandidate +9ms
 LOG  ios WebSocket: onMessage {"event":"iceCandidate","payload":{"connectionId":"dIeyjdbZSQ0CFaw=","candidate":{"candidate":"candidate:544315616 1 udp 1686052607 112.200.99.13 4739 typ srflx raddr 192.168.1.16 rport 64719 generation 0 ufrag pALf network-id 1 network-cost 10","sdpMLineIndex":0,"sdpMid":"0"}}}
 LOG  ios WebSocket: schedulePing
 LOG  ios rn-webrtc:pc:DEBUG 0 addIceCandidate +3ms
 LOG  ios connectionstatechange {"isTrusted": false}
 LOG  ios iceconnectionstatechange {"isTrusted": false}

Are you certain the stream you are passing has a video track within it?