X-Git-Url: https://git.toastfreeware.priv.at/toast/stream2beamer.git/blobdiff_plain/c7973a1e48b8ff169d4d6e5585df55431de43cc3..7fc8b5a1f9425a11ccf996b578ca5f907722d786:/laplace_client.py?ds=inline diff --git a/laplace_client.py b/laplace_client.py index 2778341..1b9c8f0 100755 --- a/laplace_client.py +++ b/laplace_client.py @@ -31,6 +31,7 @@ class WebRTCClient: self.ssl_context.verify_mode = ssl.CERT_NONE self.websocket = None self.session_id = None + self.userfragments = [] def send_sdp_offer(self, offer): text = offer.sdp.as_text() @@ -57,6 +58,9 @@ class WebRTCClient: promise.interrupt() self.send_sdp_offer(offer) + sdp = offer.sdp + self.userfragments = [sdp.get_media(i).get_attribute_val('ice-ufrag') for i in range(sdp.medias_len())] + def on_negotiation_needed(self, element): log.info('on_negotiation_needed') promise = Gst.Promise.new_with_change_func(self.on_offer_created, element, None) @@ -68,8 +72,9 @@ class WebRTCClient: 'Type': 'addCalleeIceCandidate', 'Value': json.dumps({ "candidate": candidate, - "sdpMid": "0", + "sdpMid": f"{mlineindex}", "sdpMLineIndex": mlineindex, + "usernameFragment": self.userfragments[mlineindex], }) }) log.info(f'send_ice_candidate_message with {icemsg}') @@ -120,12 +125,12 @@ class WebRTCClient: def start_pipeline(self): self.webrtc = Gst.ElementFactory.make('webrtcbin', 'laplace') + # self.webrtc.set_property("bundle-policy", 3) direction = GstWebRTC.WebRTCRTPTransceiverDirection.RECVONLY - vcaps = Gst.caps_from_string("application/x-rtp,media=video,encoding-name=VP8/9000,payload=96") - acaps = Gst.caps_from_string("application/x-rtp,media=audio,encoding-name=OPUS,media=audio,clock-rate=48000,payload=97") - # vcaps.append(acaps) - self.webrtc.emit('add-transceiver', direction, vcaps) - self.webrtc.emit('add-transceiver', direction, acaps) + video_caps = Gst.caps_from_string("application/x-rtp,media=video,encoding-name=VP8/9000,payload=96") + audio_caps = Gst.caps_from_string("application/x-rtp,media=audio,encoding-name=OPUS,clock-rate=48000,payload=111") + self.webrtc.emit('add-transceiver', direction, video_caps) + self.webrtc.emit('add-transceiver', direction, audio_caps) self.pipe = Gst.Pipeline.new("pipeline") Gst.Bin.do_add_element(self.pipe, self.webrtc) self.webrtc.connect('on-negotiation-needed', self.on_negotiation_needed) @@ -193,7 +198,7 @@ def main(): if not check_plugins(): sys.exit(1) parser = argparse.ArgumentParser() - parser.add_argument('--uri', default='wss://localhost:2222/ws_connect?id=cug', + parser.add_argument('--uri', default='wss://localhost:1234/ws_connect?id=cug', help='Signalling server URI') args = parser.parse_args() c = WebRTCClient(args.uri)