Advertisement
RAJensen

PyGi: tcpclientsrc : not linked

Apr 3rd, 2016
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.11 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import os, platform
  4.  
  5. try:
  6. import gi
  7. except:
  8. print("No GI")
  9. try:
  10. gi.require_version('Gtk', '3.0')
  11. from gi.repository import GObject,Gtk as Gtk
  12. except:
  13. print("No Gtk")
  14. try:
  15. gi.require_version ('Gst', '1.0')
  16. from gi.repository import Gst
  17. except:
  18. print("No Gst")
  19. try:
  20. # Needed for window.get_xid(), xvimagesink.set_window_handle(), respectively:
  21. gi.require_version('GdkX11', '3.0')
  22. from gi.repository import GdkX11
  23. except:
  24. print("No GdkX11 3.0")
  25. try:
  26. gi.require_version('GstVideo', '1.0')
  27. from gi.repository import GstVideo
  28. except:
  29. print("No GstVideo 1.0")
  30. sys.exit(1)
  31.  
  32.  
  33. class GTK_Main(object):
  34.  
  35. def __init__(self):
  36. ## Create a window,
  37. self.gladefile = ("hello_Gstream_tcpclient_work.glade")
  38. self.builder = Gtk.Builder()
  39. self.builder.add_from_file(self.gladefile)
  40. self.builder.connect_signals(self)
  41.  
  42. ## Create objects by name from Glade
  43. self.window = self.builder.get_object("window")
  44. self.movie_window = self.builder.get_object("movie_window")
  45. self.button1 = self.builder.get_object("button1")
  46. self.button2 = self.builder.get_object("button2")
  47. self.button3 = self.builder.get_object("button3")
  48. self.entry_host_1 = self.builder.get_object("entry_host_1")
  49. self.entry_host_2 = self.builder.get_object("entry_host_2")
  50. self.entry_host_3 = self.builder.get_object("entry_host_3")
  51. self.entry_port_1 = self.builder.get_object("entry_port_1")
  52. self.entry_port_2 = self.builder.get_object("entry_port_2")
  53. self.entry_port_3 = self.builder.get_object("entry_port_3")
  54. self.window.show_all()
  55.  
  56. ## Create pibeline & connect bus
  57. self.player = Gst.Pipeline.new("player")
  58. bus = self.player.get_bus()
  59. bus.add_signal_watch()
  60. bus.enable_sync_message_emission()
  61. bus.connect("message", self.on_message)
  62. bus.connect("sync-message::element", self.on_sync_message)
  63.  
  64. ## Create tcpclientsr, gdpdepay, rtph264depay, h264parse, decodebin,
  65. ## videoconvert, autovideosink
  66. self.tcpclientsrc_1 = Gst.ElementFactory.make("tcpclientsrc", "tcpclientsrc_1")
  67. self.gdpdepay_1 = Gst.ElementFactory.make("gdpdepay", "gdpdepay_1")
  68. self.rtph264depay_1 = Gst.ElementFactory.make("rtph264depay", "rtph264depay_1")
  69. self.h264parse_1 = Gst.ElementFactory.make("h264parse", "h264parse_1")
  70. self.decodebin_1 = Gst.ElementFactory.make("decodebin", "decodebin_1")
  71. self.videoconvert_1 = Gst.ElementFactory.make("videoconvert", "videoconvert_1")
  72. self.autovideosink = Gst.ElementFactory.make("autovideosink", "autovideosink")
  73.  
  74. ## Add elements to pibeline
  75. self.player.add(self.tcpclientsrc_1)
  76. self.player.add(self.gdpdepay_1)
  77. self.player.add(self.rtph264depay_1)
  78. self.player.add(self.h264parse_1)
  79. self.player.add(self.decodebin_1)
  80. self.player.add(self.videoconvert_1)
  81. self.player.add(self.autovideosink)
  82.  
  83. ## Link elements
  84. self.tcpclientsrc_1.link(self.gdpdepay_1)
  85. self.gdpdepay_1.link(self.rtph264depay_1)
  86. self.rtph264depay_1.link(self.h264parse_1)
  87. self.h264parse_1.link(self.decodebin_1)
  88. self.decodebin_1.link(self.videoconvert_1)
  89. self.videoconvert_1.link(self.autovideosink)
  90.  
  91. ## Create handles
  92. def on_window_destroy(self, object, data=None):
  93. Gtk.main_quit()
  94.  
  95. def on_button1_clicked(self, object, data=None):
  96. w = self.entry_host_1.get_text().strip()
  97. self.start_stop(w)
  98.  
  99. ## Play - Stop
  100. def start_stop(self, w):
  101. if self.button1.get_label() == "Start":
  102. tcpiphost_1 = self.entry_host_1.get_text().strip()
  103. tcpport_1 = int(self.entry_port_1.get_text().strip())
  104. #print tcpiphost_1
  105. #print tcpport_1
  106. self.tcpclientsrc_1.set_property("host", tcpiphost_1)
  107. self.tcpclientsrc_1.set_property("port", tcpport_1)
  108. self.button1.set_label("Stop")
  109. self.player.set_state(Gst.State.PLAYING)
  110. else:
  111. self.player.set_state(Gst.State.NULL)
  112. self.button1.set_label("Start")
  113.  
  114. ## Message system
  115. def on_message(self, bus, message):
  116. t = message.type
  117. if t == Gst.MessageType.EOS:
  118. self.player.set_state(Gst.State.NULL)
  119. self.button1.set_label("Start")
  120. elif t == Gst.MessageType.ERROR:
  121. self.player.set_state(Gst.State.NULL)
  122. err, debug = message.parse_error()
  123. print "Error: %s" % err, debug
  124. self.button1.set_label("Start")
  125.  
  126. def on_sync_message(self, bus, message):
  127. if message.get_structure().get_name() == 'prepare-window-handle':
  128. imagesink = message.src
  129. imagesink.set_property("force-aspect-ratio", True)
  130. imagesink.set_window_handle(self.movie_window.get_property('window').get_xid())
  131.  
  132.  
  133. GObject.threads_init()
  134. Gst.init(None)
  135. GTK_Main()
  136. Gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement