Advertisement
Guest User

webrtcbin_test.py

a guest
Jul 6th, 2022
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.26 KB | None | 0 0
  1. import gi
  2. gi.require_version('Gst', '1.0')
  3. gi.require_version('GstWebRTC', '1.0')
  4. gi.require_version('GstSdp', '1.0')
  5. from gi.repository import GLib, Gst, GstWebRTC, GstSdp
  6.  
  7. import time
  8.  
  9. import logging
  10. import sys
  11. logging.basicConfig(level=logging.INFO,
  12.                     stream=sys.stdout,
  13.                     format='%(levelname)-8s %(name)s:%(message)s')
  14. logger = logging.getLogger(__name__)
  15.  
  16. SDP_EXAMPLE = """v=0
  17. o=- 1657097603554088 1 IN IP4 192.168.0.95
  18. s=Mountpoint 7595272868738783
  19. t=0 0
  20. a=group:BUNDLE video
  21. a=msid-semantic: WMS janus
  22. m=video 9 UDP/TLS/RTP/SAVPF 96 97
  23. c=IN IP4 192.168.0.95
  24. a=sendonly
  25. a=mid:video
  26. a=rtcp-mux
  27. a=ice-ufrag:Qrt1
  28. a=ice-pwd:2SYwnMmbQHXD5Ew0C/2bNm
  29. a=ice-options:trickle
  30. 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
  31. a=setup:actpass
  32. a=rtpmap:96 H264/90000
  33. a=fmtp:96 profile-level-id=42e01f;packetization-mode=1
  34. a=rtcp-fb:96 nack
  35. a=rtcp-fb:96 nack pli
  36. a=rtcp-fb:96 goog-remb
  37. a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
  38. a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
  39. a=rtpmap:97 rtx/90000
  40. a=fmtp:97 apt=96
  41. a=ssrc-group:FID 2109758724 594261311
  42. a=msid:janus janusv0
  43. a=ssrc:2109758724 cname:janus
  44. a=ssrc:2109758724 msid:janus janusv0
  45. a=ssrc:2109758724 mslabel:janus
  46. a=ssrc:2109758724 label:janusv0
  47. a=ssrc:594261311 cname:janus
  48. a=ssrc:594261311 msid:janus janusv0
  49. a=ssrc:594261311 mslabel:janus
  50. a=ssrc:594261311 label:janusv0
  51. a=candidate:1 1 udp 2013266431 192.168.0.95 10053 typ host
  52. a=candidate:2 1 udp 2013266430 10.8.0.1 10027 typ host
  53. a=candidate:3 1 udp 2013266429 10.7.1.1 10085 typ host
  54. a=candidate:4 1 udp 2013266428 172.17.0.1 10016 typ host
  55. a=candidate:5 1 udp 2013266427 192.168.64.1 10147 typ host
  56. a=end-of-candidates
  57. """
  58.  
  59. def wrb_test():
  60.     logger.info("BEGIN WRB TEST")
  61.     Gst.init(None)
  62.     webrtc = Gst.parse_launch("webrtcbin name=wrb")
  63.     webrtc.set_state(Gst.State.PLAYING)
  64.  
  65.     sdp = SDP_EXAMPLE
  66.     res, sdpmsg = GstSdp.SDPMessage.new()
  67.     assert res == GstSdp.SDPResult.OK, f"unexpected res {res}"
  68.     GstSdp.sdp_message_parse_buffer(bytes(sdp.encode()), sdpmsg)
  69.     offer = GstWebRTC.WebRTCSessionDescription.new(GstWebRTC.WebRTCSDPType.OFFER, sdpmsg)
  70.     promise1 = Gst.Promise.new()
  71.     webrtc.emit('set-remote-description', offer, promise1)
  72.     promise1.wait()
  73.  
  74.     def on_answer_created(promise, _, __):
  75.         logger.info(f"on answer: {promise} {_} {__}") # debug
  76.         answer = promise.get_reply().get_value("answer")
  77.         logger.info(f"answer: {answer}")
  78.         logger.info(f"answer fields: {answer.type}")
  79.         logger.info(f"answer fields: {answer.type} {answer.type.real}")
  80.         logger.info(f"answer fields: {answer.type} {answer.type.to_string(answer.type)}")
  81.         logger.info(f"answer sdp is None: {answer.sdp is None}")
  82.         logger.info(f"answer fields: {answer.sdp}")
  83.         sdp = answer.sdp.as_text()
  84.         logger.info(f"answer sdp: {sdp}")
  85.         promise3 = Gst.Promise.new()
  86.         webrtc.emit('set-local-description', answer, promise3)
  87.     promise2 = Gst.Promise.new_with_change_func(on_answer_created, webrtc, None)
  88.     webrtc.emit('create-answer', None, promise2)
  89.     promise2.wait()
  90.  
  91.     time.sleep(15)
  92.  
  93. if __name__ == "__main__":
  94.     wrb_test()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement