0

データチャネルを作成したい。しかし、これを実装するにはいくつかの困難があります。「呼び出し側」で実行されるコードを追加しました。

func initWebRTC() {
        RTCInitializeSSL()
        peerConnectionFactory = RTCPeerConnectionFactory()

        let mandatoryConstraints = ["OfferToReceiveAudio": "true", "OfferToReceiveVideo": "false"]
        let optionalConstraints = [ "DtlsSrtpKeyAgreement": "true", "RtpDataChannels" : "true"]


        mediaConstraints = RTCMediaConstraints.init(mandatoryConstraints: mandatoryConstraints, optionalConstraints: optionalConstraints)
    }

func prepareNewConnection() -> RTCPeerConnection {
        var icsServers: [RTCIceServer] = []

        icsServers.append(RTCIceServer(urlStrings: ["stun:stun.l.google.com:19302"], username:"",credential: ""))

        let rtcConfig: RTCConfiguration = RTCConfiguration()
        rtcConfig.tcpCandidatePolicy = RTCTcpCandidatePolicy.disabled
        rtcConfig.bundlePolicy = RTCBundlePolicy.maxBundle
        rtcConfig.rtcpMuxPolicy = RTCRtcpMuxPolicy.require
        rtcConfig.iceServers = icsServers;

        peerConnection = peerConnectionFactory.peerConnection(with: rtcConfig, constraints: mediaConstraints, delegate: self)
        peerConnection.add(mediaStream);

        let tt = RTCDataChannelConfiguration();
        tt.isOrdered = false;

        tt.isNegotiated = false

        self.dataChannel = peerConnection.dataChannel(forLabel: "datachannel", configuration: tt)

        self.dataChannel.delegate = self
        print("create datachannel")

        return peerConnection;
    }

多くの人が言うように、オファーの前にデータチャネルを作成します。このメソッド (次のコードを参照) は数回呼び出されます。チャネルの状態が 2 から 3 に変わります。

public func dataChannelDidChangeState(_ dataChannel: RTCDataChannel){
        print("channel.state \(dataChannel.readyState.rawValue)");
    }

しかし、受信側で何をする必要がありますか?そこでは何も起こらないから?データ チャネルをレシーバーにバインドする必要がありますか? もしそうなら、どうすればそれを行うことができますか?

4

1 に答える 1