Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import gi
- gi.require_version('Gst', '1.0')
- gi.require_version('GstWebRTC', '1.0')
- gi.require_version('GstSdp', '1.0')
- from gi.repository import GLib, Gst, GstWebRTC, GstSdp
- import time
- import logging
- import sys
- logging.basicConfig(level=logging.INFO,
- stream=sys.stdout,
- format='%(levelname)-8s %(name)s:%(message)s')
- logger = logging.getLogger(__name__)
- SDP_EXAMPLE = """v=0
- o=- 1657097603554088 1 IN IP4 192.168.0.95
- s=Mountpoint 7595272868738783
- t=0 0
- a=group:BUNDLE video
- a=msid-semantic: WMS janus
- m=video 9 UDP/TLS/RTP/SAVPF 96 97
- c=IN IP4 192.168.0.95
- a=sendonly
- a=mid:video
- a=rtcp-mux
- a=ice-ufrag:Qrt1
- a=ice-pwd:2SYwnMmbQHXD5Ew0C/2bNm
- a=ice-options:trickle
- a=fingerprint:sha-256 E5:B5:7A:3F:B3:FF:3C:DF:3B:1A:C9:A1:03:EB:FB:14:F9:E7:97:0F:BE:0D:BB:A2:6C:59:08:B9:D7:9C:F9:53
- a=setup:actpass
- a=rtpmap:96 H264/90000
- a=fmtp:96 profile-level-id=42e01f;packetization-mode=1
- a=rtcp-fb:96 nack
- a=rtcp-fb:96 nack pli
- a=rtcp-fb:96 goog-remb
- a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
- a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
- a=rtpmap:97 rtx/90000
- a=fmtp:97 apt=96
- a=ssrc-group:FID 2109758724 594261311
- a=msid:janus janusv0
- a=ssrc:2109758724 cname:janus
- a=ssrc:2109758724 msid:janus janusv0
- a=ssrc:2109758724 mslabel:janus
- a=ssrc:2109758724 label:janusv0
- a=ssrc:594261311 cname:janus
- a=ssrc:594261311 msid:janus janusv0
- a=ssrc:594261311 mslabel:janus
- a=ssrc:594261311 label:janusv0
- a=candidate:1 1 udp 2013266431 192.168.0.95 10053 typ host
- a=candidate:2 1 udp 2013266430 10.8.0.1 10027 typ host
- a=candidate:3 1 udp 2013266429 10.7.1.1 10085 typ host
- a=candidate:4 1 udp 2013266428 172.17.0.1 10016 typ host
- a=candidate:5 1 udp 2013266427 192.168.64.1 10147 typ host
- a=end-of-candidates
- """
- def wrb_test():
- logger.info("BEGIN WRB TEST")
- Gst.init(None)
- webrtc = Gst.parse_launch("webrtcbin name=wrb")
- webrtc.set_state(Gst.State.PLAYING)
- sdp = SDP_EXAMPLE
- res, sdpmsg = GstSdp.SDPMessage.new()
- assert res == GstSdp.SDPResult.OK, f"unexpected res {res}"
- GstSdp.sdp_message_parse_buffer(bytes(sdp.encode()), sdpmsg)
- offer = GstWebRTC.WebRTCSessionDescription.new(GstWebRTC.WebRTCSDPType.OFFER, sdpmsg)
- promise1 = Gst.Promise.new()
- webrtc.emit('set-remote-description', offer, promise1)
- promise1.wait()
- def on_answer_created(promise, _, __):
- logger.info(f"on answer: {promise} {_} {__}") # debug
- answer = promise.get_reply().get_value("answer")
- logger.info(f"answer: {answer}")
- logger.info(f"answer fields: {answer.type}")
- logger.info(f"answer fields: {answer.type} {answer.type.real}")
- logger.info(f"answer fields: {answer.type} {answer.type.to_string(answer.type)}")
- logger.info(f"answer sdp is None: {answer.sdp is None}")
- logger.info(f"answer fields: {answer.sdp}")
- sdp = answer.sdp.as_text()
- logger.info(f"answer sdp: {sdp}")
- promise3 = Gst.Promise.new()
- webrtc.emit('set-local-description', answer, promise3)
- promise2 = Gst.Promise.new_with_change_func(on_answer_created, webrtc, None)
- webrtc.emit('create-answer', None, promise2)
- promise2.wait()
- time.sleep(15)
- if __name__ == "__main__":
- wrb_test()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement