Code Monkey home page Code Monkey logo

mediasoup-ios-client-sample's Introduction

mediasoup-ios-client-sample's People

Contributors

ethand91 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

mediasoup-ios-client-sample's Issues

How come I don't need to add the WebRTC binaries (libwebrtc.a, libmediasoupclient.a and libsdptransform.a) in the project?

Hi,

Since I was building the WebRTC binaries from your mediasoup-ios-client instructions I'm a bit confused how come I just cloned this sample client and it's building, am I missing something where we don't need the enormous libwebrtc.a, libmediasoupclient.a and libsdptransform.a? See the screenshots below.

My project frameworks:
Screen Shot 2020-06-23 at 04 37 52

Your project frameworks:
Screen Shot 2020-06-23 at 04 38 16

The next thing I noticed is that SceneDelegate.swift is removed from your workspace, nevertheless, while I have all frameworks in place I added let device = Device.init(); in my project SceneDelegate.swift but I receive Use of unresolved identifier 'Device'.

Class X is implemented in both mediasoup_client_ios and WebRTC. One of the two will be used. Which one is undefined.

Hi,

I cloned the repo to start learning how to add the functionality in my project, started the sample-server, changed the webRtcTransport ip located in config.js and I received a lot of interesting output like the below.

objc[24770]: Class RTCAudioSession is implemented in both /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/mediasoup_client_ios.framework/mediasoup_client_ios (0x10133c108) and /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/WebRTC.framework/WebRTC (0x100cc1ee0). One of the two will be used. Which one is undefined.
objc[24770]: Class RTCAudioSessionConfiguration is implemented in both /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/mediasoup_client_ios.framework/mediasoup_client_ios (0x10133c158) and /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/WebRTC.framework/WebRTC (0x100cc1f30). One of the two will be used. Which one is undefined.
objc[24770]: Class RTCNativeAudioSessionDelegateAdapter is implemented in both /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/mediasoup_client_ios.framework/mediasoup_client_ios (0x10133c1a8) and /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/WebRTC.framework/WebRTC (0x100cc1f80). One of the two will be used. Which one is undefined.
objc[24770]: Class RTCEncodedImage is implemented in both /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/mediasoup_client_ios.framework/mediasoup_client_ios (0x10133c220) and /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/WebRTC.framework/WebRTC (0x100cc1ff8). One of the two will be used. Which one is undefined.
objc[24770]: Class RTCRtpFragmentationHeader is implemented in both /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/mediasoup_client_ios.framework/mediasoup_client_ios (0x10133c270) and /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/WebRTC.framework/WebRTC (0x100cc2048). One of the two will be used. Which one is undefined.
objc[24770]: Class RTCVideoCapturer is implemented in both /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/mediasoup_client_ios.framework/mediasoup_client_ios (0x10133c298) and /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/WebRTC.framework/WebRTC (0x100cc2070). One of the two will be used. Which one is undefined.
objc[24770]: Class RTCVideoCodecInfo is implemented in both /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/mediasoup_client_ios.framework/mediasoup_client_ios (0x10133c2e8) and /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/WebRTC.framework/WebRTC (0x100cc20c0). One of the two will be used. Which one is undefined.
objc[24770]: Class RTCVideoEncoderQpThresholds is implemented in both /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/mediasoup_client_ios.framework/mediasoup_client_ios (0x10133c338) and /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/WebRTC.framework/WebRTC (0x100cc2110). One of the two will be used. Which one is undefined.
objc[24770]: Class RTCVideoEncoderSettings is implemented in both /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/mediasoup_client_ios.framework/mediasoup_client_ios (0x10133c3b0) and /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/WebRTC.framework/WebRTC (0x100cc2188). One of the two will be used. Which one is undefined.
objc[24770]: Class RTCVideoFrame is implemented in both /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/mediasoup_client_ios.framework/mediasoup_client_ios (0x10133c3d8) and /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/WebRTC.framework/WebRTC (0x100cc21b0). One of the two will be used. Which one is undefined.
objc[24770]: Class RTCDispatcher is implemented in both /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/mediasoup_client_ios.framework/mediasoup_client_ios (0x10133c450) and /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/WebRTC.framework/WebRTC (0x100cc32b8). One of the two will be used. Which one is undefined.
objc[24770]: Class RTCCameraPreviewView is implemented in both /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/mediasoup_client_ios.framework/mediasoup_client_ios (0x10133c478) and /private/var/containers/Bundle/Application/5F08382E-32B9-4F06-B20A-7C9F2F72E50C/mediasoup-ios-cient-sample.app/Frameworks/WebRTC.framework/WebRTC (0x100cc32e0). One of the two will be used. Which one is undefined.

Local video view seems to be working fine but the remote video doesn't really show anything, is there any additional steps to take or the sample client assumes another instance will connect to the same room and remote video view will show the peer joined?

Here is the full output:
Xcode: https://gist.github.com/xplatsolutions/21347e6d935d90329c070da8e5991ba3
Server: https://gist.github.com/xplatsolutions/f1dbf6a9b3eb8ccc62cad6de959a4b12

Happy to support and work with you improving the amazing work you have done! Thank you it is appreciated highly.

WebSocker URL

  1. On connectWebSocket() method, what will be the web socket URL?
  2. Does this sample work with mediasoup demo server?

Thanks in advance.

MediasoupDevice.createSendTransport delegate not fired

I have the below code to create a MediasoupDevice client send transport.

let id = jsonResponse["id"].stringValue
    let dtlsParameters: JSON = jsonResponse["dtlsParameters"]
    let iceParameters: JSON = jsonResponse["iceParameters"]
    let iceCandidatesArray: JSON = jsonResponse["iceCandidates"]
    let sctpParameters: JSON = jsonResponse["sctpParameters"]
    
    self.sendTransport = mediasoupDevice!.createSendTransport(self, id: id, iceParameters: iceParameters.description, iceCandidates: iceCandidatesArray.description, dtlsParameters: dtlsParameters.description, sctpParameters: sctpParameters.description, options: nil, appData: nil)
    
    print("Local Transport\nID: \(self.sendTransport!.getId()!)\nConn State: \(self.sendTransport!.getConnectionState()!)\nIsClosed: \(self.sendTransport!.isClosed())")

And the function implementations.

extension MediasoupRoomManager : SendTransportListener {
  
  func onProduce(_ transport: Transport!, kind: String!, rtpParameters: String!, appData: String!, callback: ((String?) -> Void)!) {
    print("SendTransport::onProduce" + kind + "rtpParameters = " + rtpParameters)
    onLocalTransportProduce(transport: transport, kind: kind, rtpParameters: rtpParameters, appData: appData, callback: callback)
  }
  
  func onConnect(_ transport: Transport!, dtlsParameters: String!) {
    print("SendTransport::onConnect dtlsParameters = " + dtlsParameters)
    onLocalTransportConnect(transport: transport, dtlsParameters: dtlsParameters)
  }
  
  func onConnectionStateChange(_ transport: Transport!, connectionState: String!) {
    print("SendTransport::onConnectionStateChange connectionState = " + connectionState)
  }
  
}

None of the delegate methods are invoked, there are no errors in my console for send or receive transport creation.
I set the mediasoup log to the below.

// Set mediasoup log
    Logger.setLogLevel(LogLevel.TRACE)
    Logger.setDefaultHandler()

And the console output, I can't seem to find an error although I don't understand where is the last output coming from.

websocket is connected: ["Sec-WebSocket-Protocol": "protoo", "Upgrade": "websocket", "Origin": "wss://192.168.2.2:4443", "Connection": "Upgrade", "Sec-WebSocket-Accept": "zfL/KQvv9fXc50GReMMRRYaE+08="]
[DEBUG] Device::Load() | got native RTP capabilities:
{
    "codecs": [
        {
            "channels": 1,
            "clockRate": 8000,
            "kind": "audio",
            "mimeType": "audio/PCMU",
            "parameters": {},
            "preferredPayloadType": 0,
            "rtcpFeedback": []
        },
        {
            "channels": 1,
            "clockRate": 8000,
            "kind": "audio",
            "mimeType": "audio/PCMA",
            "parameters": {},
            "preferredPayloadType": 8,
            "rtcpFeedback": []
        },
        {
            "channels": 1,
            "clockRate": 8000,
            "kind": "audio",
            "mimeType": "audio/G722",
            "parameters": {},
            "preferredPayloadType": 9,
            "rtcpFeedback": []
        },
        {
            "channels": 1,
            "clockRate": 8000,
            "kind": "audio",
            "mimeType": "audio/CN",
            "parameters": {},
            "preferredPayloadType": 13,
            "rtcpFeedback": []
        },
        {
            "clockRate": 90000,
            "kind": "video",
            "mimeType": "video/VP8",
            "parameters": {},
            "preferredPayloadType": 96,
            "rtcpFeedback": [
                {
                    "type": "goog-remb"
                },
                {
                    "type": "transport-cc"
                },
                {
                    "parameter": "fir",
                    "type": "ccm"
                },
                {
                    "type": "nack"
                },
                {
                    "parameter": "pli",
                    "type": "nack"
                }
            ]
        },
        {
            "clockRate": 90000,
            "kind": "video",
            "mimeType": "video/rtx",
            "parameters": {
                "apt": 96
            },
            "preferredPayloadType": 97,
            "rtcpFeedback": []
        },
        {
            "clockRate": 90000,
            "kind": "video",
            "mimeType": "video/VP9",
            "parameters": {
                "profile-id": "0"
            },
            "preferredPayloadType": 98,
            "rtcpFeedback": [
                {
                    "type": "goog-remb"
                },
                {
                    "type": "transport-cc"
                },
                {
                    "parameter": "fir",
                    "type": "ccm"
                },
                {
                    "type": "nack"
                },
                {
                    "parameter": "pli",
                    "type": "nack"
                }
            ]
        },
        {
            "clockRate": 90000,
            "kind": "video",
            "mimeType": "video/rtx",
            "parameters": {
                "apt": 98
            },
            "preferredPayloadType": 99,
            "rtcpFeedback": []
        },
        {
            "clockRate": 90000,
            "kind": "video",
            "mimeType": "video/AV1X",
            "parameters": {},
            "preferredPayloadType": 100,
            "rtcpFeedback": [
                {
                    "type": "goog-remb"
                },
                {
                    "type": "transport-cc"
                },
                {
                    "parameter": "fir",
                    "type": "ccm"
                },
                {
                    "type": "nack"
                },
                {
                    "parameter": "pli",
                    "type": "nack"
                }
            ]
        },
        {
            "clockRate": 90000,
            "kind": "video",
            "mimeType": "video/rtx",
            "parameters": {
                "apt": 100
            },
            "preferredPayloadType": 101,
            "rtcpFeedback": []
        },
        {
            "channels": 1,
            "clockRate": 8000,
            "kind": "audio",
            "mimeType": "audio/ILBC",
            "parameters": {},
            "preferredPayloadType": 102,
            "rtcpFeedback": []
        },
        {
            "channels": 1,
            "clockRate": 16000,
            "kind": "audio",
            "mimeType": "audio/ISAC",
            "parameters": {},
            "preferredPayloadType": 103,
            "rtcpFeedback": []
        },
        {
            "channels": 1,
            "clockRate": 32000,
            "kind": "audio",
            "mimeType": "audio/ISAC",
            "parameters": {},
            "preferredPayloadType": 104,
            "rtcpFeedback": []
        },
        {
            "channels": 1,
            "clockRate": 16000,
            "kind": "audio",
            "mimeType": "audio/CN",
            "parameters": {},
            "preferredPayloadType": 105,
            "rtcpFeedback": []
        },
        {
            "channels": 1,
            "clockRate": 32000,
            "kind": "audio",
            "mimeType": "audio/CN",
            "parameters": {},
            "preferredPayloadType": 106,
            "rtcpFeedback": []
        },
        {
            "channels": 1,
            "clockRate": 48000,
            "kind": "audio",
            "mimeType": "audio/telephone-event",
            "parameters": {},
            "preferredPayloadType": 110,
            "rtcpFeedback": []
        },
        {
            "channels": 2,
            "clockRate": 48000,
            "kind": "audio",
            "mimeType": "audio/opus",
            "parameters": {
                "minptime": 10,
                "useinbandfec": 1
            },
            "preferredPayloadType": 111,
            "rtcpFeedback": [
                {
                    "type": "transport-cc"
                }
            ]
        },
        {
            "channels": 1,
            "clockRate": 32000,
            "kind": "audio",
            "mimeType": "audio/telephone-event",
            "parameters": {},
            "preferredPayloadType": 112,
            "rtcpFeedback": []
        },
        {
            "channels": 1,
            "clockRate": 16000,
            "kind": "audio",
            "mimeType": "audio/telephone-event",
            "parameters": {},
            "preferredPayloadType": 113,
            "rtcpFeedback": []
        },
        {
            "clockRate": 90000,
            "kind": "video",
            "mimeType": "video/rtx",
            "parameters": {
                "apt": 127
            },
            "preferredPayloadType": 124,
            "rtcpFeedback": []
        },
        {
            "clockRate": 90000,
            "kind": "video",
            "mimeType": "video/ulpfec",
            "parameters": {},
            "preferredPayloadType": 125,
            "rtcpFeedback": []
        },
        {
            "channels": 1,
            "clockRate": 8000,
            "kind": "audio",
            "mimeType": "audio/telephone-event",
            "parameters": {},
            "preferredPayloadType": 126,
            "rtcpFeedback": []
        },
        {
            "clockRate": 90000,
            "kind": "video",
            "mimeType": "video/red",
            "parameters": {},
            "preferredPayloadType": 127,
            "rtcpFeedback": []
        }
    ],
    "fecMechanisms": [],
    "headerExtensions": [
        {
            "kind": "audio",
            "preferredId": 1,
            "uri": "urn:ietf:params:rtp-hdrext:ssrc-audio-level"
        },
        {
            "kind": "audio",
            "preferredId": 2,
            "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"
        },
        {
            "kind": "audio",
            "preferredId": 3,
            "uri": "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"
        },
        {
            "kind": "audio",
            "preferredId": 4,
            "uri": "urn:ietf:params:rtp-hdrext:sdes:mid"
        },
        {
            "kind": "audio",
            "preferredId": 5,
            "uri": "urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id"
        },
        {
            "kind": "audio",
            "preferredId": 6,
            "uri": "urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id"
        },
        {
            "kind": "video",
            "preferredId": 14,
            "uri": "urn:ietf:params:rtp-hdrext:toffset"
        },
        {
            "kind": "video",
            "preferredId": 2,
            "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"
        },
        {
            "kind": "video",
            "preferredId": 13,
            "uri": "urn:3gpp:video-orientation"
        },
        {
            "kind": "video",
            "preferredId": 3,
            "uri": "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"
        },
        {
            "kind": "video",
            "preferredId": 12,
            "uri": "http://www.webrtc.org/experiments/rtp-hdrext/playout-delay"
        },
        {
            "kind": "video",
            "preferredId": 11,
            "uri": "http://www.webrtc.org/experiments/rtp-hdrext/video-content-type"
        },
        {
            "kind": "video",
            "preferredId": 7,
            "uri": "http://www.webrtc.org/experiments/rtp-hdrext/video-timing"
        },
        {
            "kind": "video",
            "preferredId": 8,
            "uri": "http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07"
        },
        {
            "kind": "video",
            "preferredId": 9,
            "uri": "http://www.webrtc.org/experiments/rtp-hdrext/color-space"
        },
        {
            "kind": "video",
            "preferredId": 4,
            "uri": "urn:ietf:params:rtp-hdrext:sdes:mid"
        },
        {
            "kind": "video",
            "preferredId": 5,
            "uri": "urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id"
        },
        {
            "kind": "video",
            "preferredId": 6,
            "uri": "urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id"
        }
    ]
}
[DEBUG] Device::Load() | got extended RTP capabilities:
{
    "codecs": [
        {
            "channels": 2,
            "clockRate": 48000,
            "kind": "audio",
            "localParameters": {
                "minptime": 10,
                "useinbandfec": 1
            },
            "localPayloadType": 111,
            "localRtxPayloadType": null,
            "mimeType": "audio/opus",
            "remoteParameters": {},
            "remotePayloadType": 100,
            "remoteRtxPayloadType": null,
            "rtcpFeedback": [
                {
                    "parameter": "",
                    "type": "transport-cc"
                }
            ]
        },
        {
            "clockRate": 90000,
            "kind": "video",
            "localParameters": {},
            "localPayloadType": 96,
            "localRtxPayloadType": 97,
            "mimeType": "video/VP8",
            "remoteParameters": {
                "x-google-start-bitrate": 1000
            },
            "remotePayloadType": 101,
            "remoteRtxPayloadType": 102,
            "rtcpFeedback": [
                {
                    "parameter": "",
                    "type": "goog-remb"
                },
                {
                    "parameter": "",
                    "type": "transport-cc"
                },
                {
                    "parameter": "fir",
                    "type": "ccm"
                },
                {
                    "parameter": "",
                    "type": "nack"
                },
                {
                    "parameter": "pli",
                    "type": "nack"
                }
            ]
        }
    ],
    "headerExtensions": [
        {
            "direction": "sendrecv",
            "encrypt": false,
            "kind": "audio",
            "recvId": 1,
            "sendId": 4,
            "uri": "urn:ietf:params:rtp-hdrext:sdes:mid"
        },
        {
            "direction": "sendrecv",
            "encrypt": false,
            "kind": "video",
            "recvId": 1,
            "sendId": 4,
            "uri": "urn:ietf:params:rtp-hdrext:sdes:mid"
        },
        {
            "direction": "sendonly",
            "encrypt": false,
            "kind": "video",
            "recvId": 2,
            "sendId": 5,
            "uri": "urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id"
        },
        {
            "direction": "sendonly",
            "encrypt": false,
            "kind": "video",
            "recvId": 3,
            "sendId": 6,
            "uri": "urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id"
        },
        {
            "direction": "sendrecv",
            "encrypt": false,
            "kind": "audio",
            "recvId": 4,
            "sendId": 2,
            "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"
        },
        {
            "direction": "sendrecv",
            "encrypt": false,
            "kind": "video",
            "recvId": 4,
            "sendId": 2,
            "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"
        },
        {
            "direction": "sendonly",
            "encrypt": false,
            "kind": "audio",
            "recvId": 5,
            "sendId": 3,
            "uri": "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"
        },
        {
            "direction": "sendrecv",
            "encrypt": false,
            "kind": "video",
            "recvId": 5,
            "sendId": 3,
            "uri": "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"
        },
        {
            "direction": "sendrecv",
            "encrypt": false,
            "kind": "video",
            "recvId": 6,
            "sendId": 8,
            "uri": "http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07"
        },
        {
            "direction": "sendrecv",
            "encrypt": false,
            "kind": "audio",
            "recvId": 10,
            "sendId": 1,
            "uri": "urn:ietf:params:rtp-hdrext:ssrc-audio-level"
        },
        {
            "direction": "sendrecv",
            "encrypt": false,
            "kind": "video",
            "recvId": 11,
            "sendId": 13,
            "uri": "urn:3gpp:video-orientation"
        },
        {
            "direction": "sendrecv",
            "encrypt": false,
            "kind": "video",
            "recvId": 12,
            "sendId": 14,
            "uri": "urn:ietf:params:rtp-hdrext:toffset"
        }
    ]
}
[DEBUG] Device::Load() | got receiving RTP capabilities:
{
    "codecs": [
        {
            "channels": 2,
            "clockRate": 48000,
            "kind": "audio",
            "mimeType": "audio/opus",
            "parameters": {
                "minptime": 10,
                "useinbandfec": 1
            },
            "preferredPayloadType": 100,
            "rtcpFeedback": [
                {
                    "parameter": "",
                    "type": "transport-cc"
                }
            ]
        },
        {
            "clockRate": 90000,
            "kind": "video",
            "mimeType": "video/VP8",
            "parameters": {},
            "preferredPayloadType": 101,
            "rtcpFeedback": [
                {
                    "parameter": "",
                    "type": "goog-remb"
                },
                {
                    "parameter": "",
                    "type": "transport-cc"
                },
                {
                    "parameter": "fir",
                    "type": "ccm"
                },
                {
                    "parameter": "",
                    "type": "nack"
                },
                {
                    "parameter": "pli",
                    "type": "nack"
                }
            ]
        },
        {
            "clockRate": 90000,
            "kind": "video",
            "mimeType": "video/rtx",
            "parameters": {
                "apt": 101
            },
            "preferredPayloadType": 102,
            "rtcpFeedback": []
        }
    ],
    "headerExtensions": [
        {
            "direction": "sendrecv",
            "kind": "audio",
            "preferredEncrypt": false,
            "preferredId": 1,
            "uri": "urn:ietf:params:rtp-hdrext:sdes:mid"
        },
        {
            "direction": "sendrecv",
            "kind": "video",
            "preferredEncrypt": false,
            "preferredId": 1,
            "uri": "urn:ietf:params:rtp-hdrext:sdes:mid"
        },
        {
            "direction": "sendrecv",
            "kind": "audio",
            "preferredEncrypt": false,
            "preferredId": 4,
            "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"
        },
        {
            "direction": "sendrecv",
            "kind": "video",
            "preferredEncrypt": false,
            "preferredId": 4,
            "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"
        },
        {
            "direction": "sendrecv",
            "kind": "video",
            "preferredEncrypt": false,
            "preferredId": 5,
            "uri": "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"
        },
        {
            "direction": "sendrecv",
            "kind": "video",
            "preferredEncrypt": false,
            "preferredId": 6,
            "uri": "http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07"
        },
        {
            "direction": "sendrecv",
            "kind": "audio",
            "preferredEncrypt": false,
            "preferredId": 10,
            "uri": "urn:ietf:params:rtp-hdrext:ssrc-audio-level"
        },
        {
            "direction": "sendrecv",
            "kind": "video",
            "preferredEncrypt": false,
            "preferredId": 11,
            "uri": "urn:3gpp:video-orientation"
        },
        {
            "direction": "sendrecv",
            "kind": "video",
            "preferredEncrypt": false,
            "preferredId": 12,
            "uri": "urn:ietf:params:rtp-hdrext:toffset"
        }
    ]
}
[DEBUG] Device::Load() | got receiving SCTP capabilities:
{
    "numStreams": {
        "MIS": 1024,
        "OS": 1024
    }
}
[DEBUG] Device::Load() | succeeded
Local Transport
ID: 15d4696f-c88a-496c-a834-6afe6c6019f8
Conn State: new
IsClosed: false
2020-07-10 13:42:53.017171-0400 Phone[700:106705] [] tcp_input [C2:3] flags=[R] seq=3714223190, ack=0, win=0 state=LAST_ACK rcv_nxt=3714223190, snd_una=3270915267
2020-07-10 13:42:53.017912-0400 Phone[700:106705] [] tcp_input [C2:3] flags=[R] seq=3714223190, ack=0, win=0 state=CLOSED rcv_nxt=3714223190, snd_una=3270915267

My config listenIps:

https:
	{
		listenIp: '0.0.0.0',
		// NOTE: Don't change listenPort (client app assumes 4443).
		listenPort: process.env.PROTOO_LISTEN_PORT || 4443,
		// NOTE: Set your own valid certificate files.
		tls:
		{
			cert: process.env.HTTPS_CERT_FULLCHAIN || `${__dirname}/certs/localhost.cert`,
			key: process.env.HTTPS_CERT_PRIVKEY || `${__dirname}/certs/localhost.key`
		}
	},

webRtcTransportOptions:
		{
			listenIps:
				[
					{
						ip: process.env.MEDIASOUP_LISTEN_IP || '192.168.2.2',
						announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP
					}
				],
			initialAvailableOutgoingBitrate: 1000000,
			minimumAvailableOutgoingBitrate: 600000,
			maxSctpMessageSize: 262144,
			// Additional options that are not part of WebRtcTransportOptions.
			maxIncomingBitrate: 1500000
		},

Unable to see remote video (occasionally)

Hello, I'm trying to connect to the official mediacup demo server, but I have a problem. There is a certain chance that I can't see the remote video when two IOS are talking. When I turn off the audio transmission, everything is normal, I don't know how to solve it, hope to get your help, thank you very much

The opening and closing of cameras

When I repeat to open, close the camera, could lead to a surge in memory.Should I open again, close the camera, how to correctly handle?

help me!

Excuse me, your project does not seem to support more than two people to participate in the meeting. Also, can you provide a set of flutter projects?

mediasoup-ios-client-sample crashed due to below error

mediasoup-ios-cient-sample[1533:200280] *** Terminating app due to uncaught exception 'RuntimeException', reason: 'Failed to set remote offer sdp: Duplicate a=mid value '2'.'

issue due to below line
for consumerInfo in self.consumersInfo {
self.consumeTrack(consumerInfo: consumerInfo)
}

when comment above no crashes but listener not working
please give me any solution

MediaCapturer IDs - Do they matter; Why?

private static let MEDIA_STREAM_ID: String = "ARDAMS"
private static let VIDEO_TRACK_ID: String = "ARDAMSv0"
private static let AUDIO_TRACK_ID: String = "ARDAMSa0"

Should these values be unique for every broadcaster?

updateiceservers functions crash on transport

Hello I am trying to call the functions updateIceServers on transport and the app is crashing, is there any other way to give stun/turn servers in the transport, or is my format incorrect, Please need your help

self.sendTransportVideo?.updateIceServers("stun.l.google.com:19302")

Regards

The Demo collapse - Failed to set remote offer sdp: Duplicate a=mid value '1'.

### Part of the log:
RecvTransport::onConnect
handleLocalTransportConnectEvent() id =8d392763-690a-4573-8fd5-c758a4f429eb
websocketDisReceiveMessage {"action":"connectWebRtcTransport"}
Unknown event connectWebRtcTransport
RecvTransport::onConnectionStateChange newState = checking
RecvTransport::onConnectionStateChange newState = connected
RecvTransport::onConnectionStateChange newState = completed
RecvTransport::onConnectionStateChange newState = disconnected
websocketDisReceiveMessage {"action":"score","userId":1,"consumerId":{"producerScore":10,"score":10}}
Unknown event score
RecvTransport::onConnectionStateChange newState = checking
RecvTransport::onConnectionStateChange newState = connected
RecvTransport::onConnectionStateChange newState = completed
consumeTrack() consuming id =dc8b946a-ab94-4dda-bfcb-3913bdda7119
RoomListener::onNewConsumer kind=video
websocketDisReceiveMessage {"action":"resumeConsumer"}
Unknown event resumeConsumer
websocketDisReceiveMessage {"action":"newconsumer","consumerData":{"consumerUserId":1,"producerUserId":2,"producerId":"d9b90c29-4ac1-4051-af00-cfa212710486","id":"03713c5c-703c-4ae7-baa4-a21b42ba944d","kind":"audio","rtpParameters":{"codecs":[{"mimeType":"audio/opus","payloadType":100,"clockRate":48000,"channels":2,"parameters":{"useinbandfec":1,"minptime":10},"rtcpFeedback":[]}],"headerExtensions":[{"uri":"urn:ietf:params:rtp-hdrext:sdes:mid","id":1,"encrypt":false,"parameters":{}},{"uri":"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time","id":4,"encrypt":false,"parameters":{}},{"uri":"urn:ietf:params:rtp-hdrext:ssrc-audio-level","id":10,"encrypt":false,"parameters":{}}],"encodings":[{"ssrc":309019743}],"rtcp":{"cname":"b318841a","reducedSize":true,"mux":true},"mid":"1"},"type":"simple","producerPaused":false}}
NEW_CONSUMER data={
"consumerData" : {
"rtpParameters" : {
"encodings" : [
{
"ssrc" : 309019743
}
],
"rtcp" : {
"mux" : true,
"cname" : "b318841a",
"reducedSize" : true
},
"mid" : "1",
"headerExtensions" : [
{
"encrypt" : false,
"parameters" : {

      },
      "id" : 1,
      "uri" : "urn:ietf:params:rtp-hdrext:sdes:mid"
    },
    {
      "encrypt" : false,
      "parameters" : {

      },
      "id" : 4,
      "uri" : "http:\/\/www.webrtc.org\/experiments\/rtp-hdrext\/abs-send-time"
    },
    {
      "encrypt" : false,
      "parameters" : {

      },
      "id" : 10,
      "uri" : "urn:ietf:params:rtp-hdrext:ssrc-audio-level"
    }
  ],
  "codecs" : [
    {
      "clockRate" : 48000,
      "channels" : 2,
      "mimeType" : "audio\/opus",
      "payloadType" : 100,
      "rtcpFeedback" : [

      ],
      "parameters" : {
        "useinbandfec" : 1,
        "minptime" : 10
      }
    }
  ]
},
"type" : "simple",
"id" : "03713c5c-703c-4ae7-baa4-a21b42ba944d",
"kind" : "audio",
"producerUserId" : 2,
"consumerUserId" : 1,
"producerPaused" : false,
"producerId" : "d9b90c29-4ac1-4051-af00-cfa212710486"

},
"action" : "newconsumer"
}
handleNewConsumerEvent info = {
"rtpParameters" : {
"encodings" : [
{
"ssrc" : 309019743
}
],
"rtcp" : {
"mux" : true,
"cname" : "b318841a",
"reducedSize" : true
},
"mid" : "1",
"headerExtensions" : [
{
"encrypt" : false,
"parameters" : {

    },
    "id" : 1,
    "uri" : "urn:ietf:params:rtp-hdrext:sdes:mid"
  },
  {
    "encrypt" : false,
    "parameters" : {

    },
    "id" : 4,
    "uri" : "http:\/\/www.webrtc.org\/experiments\/rtp-hdrext\/abs-send-time"
  },
  {
    "encrypt" : false,
    "parameters" : {

    },
    "id" : 10,
    "uri" : "urn:ietf:params:rtp-hdrext:ssrc-audio-level"
  }
],
"codecs" : [
  {
    "clockRate" : 48000,
    "channels" : 2,
    "mimeType" : "audio\/opus",
    "payloadType" : 100,
    "rtcpFeedback" : [

    ],
    "parameters" : {
      "useinbandfec" : 1,
      "minptime" : 10
    }
  }
]

},
"type" : "simple",
"id" : "03713c5c-703c-4ae7-baa4-a21b42ba944d",
"kind" : "audio",
"producerUserId" : 2,
"consumerUserId" : 1,
"producerPaused" : false,
"producerId" : "d9b90c29-4ac1-4051-af00-cfa212710486"
}
consumeTrack() rtpParameters {
"encodings" : [
{
"ssrc" : 309019743
}
],
"rtcp" : {
"mux" : true,
"cname" : "b318841a",
"reducedSize" : true
},
"mid" : "1",
"headerExtensions" : [
{
"encrypt" : false,
"parameters" : {

  },
  "id" : 1,
  "uri" : "urn:ietf:params:rtp-hdrext:sdes:mid"
},
{
  "encrypt" : false,
  "parameters" : {

  },
  "id" : 4,
  "uri" : "http:\/\/www.webrtc.org\/experiments\/rtp-hdrext\/abs-send-time"
},
{
  "encrypt" : false,
  "parameters" : {

  },
  "id" : 10,
  "uri" : "urn:ietf:params:rtp-hdrext:ssrc-audio-level"
}

],
"codecs" : [
{
"clockRate" : 48000,
"channels" : 2,
"mimeType" : "audio/opus",
"payloadType" : 100,
"rtcpFeedback" : [

  ],
  "parameters" : {
    "useinbandfec" : 1,
    "minptime" : 10
  }
}

]
}
websocketDisReceiveMessage {"action":"score","userId":1,"consumerId":{"producerScore":10,"score":10}}
Unknown event score
[WARN] PeerConnection::OnFailure() | webtc::SetSessionDescriptionObserver failure [INVALID_PARAMETER:Failed to set remote offer sdp: Duplicate a=mid value '1'.]
[ERROR] transport_wrapper::+TransportWrapper nativeConsume:listener:id:producerId:kind:rtpParameters:appData: | Failed to set remote offer sdp: Duplicate a=mid value '1'.
2020-07-09 19:01:00.271754+0800 mediasoup-ios-cient-sample[2952:822544] *** Terminating app due to uncaught exception 'RuntimeException', reason: 'Failed to set remote offer sdp: Duplicate a=mid value '1'.'
*** First throw call stack:
(0x1c0357180 0x1bf52f9f8 0x100c306ac 0x100c1f6d8 0x101d74c78 0x101d835e8 0x101d74c78 0x101d826fc 0x1c02e8b20 0x1c02e3a58 0x1c02e2fb4 0x1c24e479c 0x1ec98ac38 0x100030584 0x1bfda68e0)
libc++abi.dylib: terminating with uncaught exception of type NSException

How to close producer

Everytime when I run the method producer.close(), my project will crash.
The same situation when I run mediasoupDevice.dispose.

Data channel!

I need to use the data channel.But not found in the API interface of data channel.What should I do?Thank you for your guidance!

Two questions

question one: The podfile file contains 1.2.3. The actual import result is 1.2.4

111
222

question two: The camera is still unavailable when the real machine is debugged
333
444
1586425542563

Such as android docking

Hello:After consult, run the demo, how to dock with the Android, now, I don't know how to modify the parameters.Thank you very much.

Open to consultation?

We are building a mobile-first real-time application and we want to use Mediasoup as a media server.

Are you open to some type of consultancy that can lead to long-term collaboration; this is a no-funded personal bootstrap startup and we are looking to make it a business (reaching out to investors) as soon as we solve the real-time feature of the app.

We are open to discuss if we can afford to pay you for 1 day of client-server consultancy, mainly around the interface between client-server (websocket, express, body structure, when to use REST and when socket).

I know you are a very busy person and I appreciate the time reading this message and responding to me.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.