Guest User

Untitled

a guest
Jun 23rd, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.81 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3.  
  4. import gobject
  5. gobject.threads_init()
  6.  
  7. import pygst
  8. pygst.require("0.10")
  9.  
  10. import gst
  11.  
  12. import sys, os
  13. import pygtk, gtk
  14.  
  15.  
  16. class GTK_Main:
  17.  
  18. def __init__(self):
  19. window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  20. window.set_title("Video Conference Test Runs")
  21. window.set_default_size(800, 600)
  22. window.connect("destroy", gtk.main_quit, "WM destroy")
  23.  
  24. self.users = gtk.ListStore (str)
  25. self.users.append (['User1'])
  26. self.users.append (['User2'])
  27.  
  28. # horizontal container
  29. hbox = gtk.HBox()
  30. window.add(hbox)
  31.  
  32. # the vertical container to the left which will hold our view and the treeview
  33. vbox = gtk.VBox()
  34. hbox.pack_start(vbox, False, padding=5)
  35.  
  36. # Add our tree view
  37. self.list_users = gtk.TreeView(self.users)
  38. self.list_users.set_size_request (150, 300)
  39.  
  40. cell = gtk.CellRendererText()
  41.  
  42. col = gtk.TreeViewColumn ("Online Users:")
  43. col.pack_start (cell, True)
  44. col.set_attributes(cell, text=0)
  45.  
  46. self.list_users.append_column (col)
  47.  
  48. vbox.pack_start (self.list_users, padding=5)
  49.  
  50. # Our viewing area, the region where we will see ourselves
  51. self.my_view = gtk.DrawingArea ()
  52. vbox.add (self.my_view)
  53.  
  54. # The large viewing area where we will see the other party
  55. self.remote_view = gtk.DrawingArea()
  56. hbox.add(self.remote_view)
  57.  
  58. self._setupPipelines()
  59. window.show_all()
  60.  
  61. self.localview.set_state (gst.STATE_PLAYING)
  62. self.remoteview.set_state (gst.STATE_PLAYING)
  63.  
  64. def _setupPipelines (self):
  65. # a simple video test src pipelines for both views
  66. #
  67.  
  68. self._setupLocalPipeline ()
  69. self._setupRemotePipeline ()
  70.  
  71. def _setupLocalPipeline(self):
  72. # local pipeline, view our camera locally
  73. self.localview = gst.Pipeline ('localview0')
  74.  
  75. # videotestsrc -> ffmpegcolorspace -> video
  76. src = gst.element_factory_make ("v4l2src", "videotestsrc0")
  77. colorspace = gst.element_factory_make ("ffmpegcolorspace", "colorspace0")
  78. videoout = gst.element_factory_make ("autovideosink", "autovideosink0")
  79.  
  80. self.localview.add (src, colorspace, videoout)
  81. gst.element_link_many (src, colorspace, videoout)
  82.  
  83. bus = self.localview.get_bus ()
  84. bus.add_signal_watch ()
  85. bus.enable_sync_message_emission ()
  86. bus.connect ("message", self.on_localview_message)
  87. bus.connect ("sync-message::element", self.on_localview_sync_message)
  88.  
  89. def _setupRemotePipeline(self):
  90. # remote pipeline, view our camera locally
  91. self.remoteview = gst.Pipeline ('remoteview0')
  92.  
  93. # videotestsrc -> ffmpegcolorspace -> video
  94. src = gst.element_factory_make ("videotestsrc", "videotestsrc_rem0")
  95. colorspace = gst.element_factory_make ("ffmpegcolorspace", "colorspace_rem0")
  96. videoout = gst.element_factory_make ("autovideosink", "autovideosink_rem0")
  97.  
  98. self.remoteview.add (src, colorspace, videoout)
  99. gst.element_link_many (src, colorspace, videoout)
  100.  
  101. bus = self.remoteview.get_bus ()
  102. bus.add_signal_watch ()
  103. bus.enable_sync_message_emission ()
  104. bus.connect ("message", self.on_remoteview_message)
  105. bus.connect ("sync-message::element", self.on_remoteview_sync_message)
  106.  
  107. def on_localview_message(self, bus, message):
  108. if message.type == gst.MESSAGE_ERROR:
  109. err, debug = message.parse_error ()
  110. print err, debug
  111.  
  112. def on_localview_sync_message (self, bus, message):
  113. if message.structure is None:
  114. return
  115.  
  116. mn = message.structure.get_name()
  117. if mn == "prepare-xwindow-id":
  118. imagesink = message.src
  119. imagesink.set_property("force-aspect-ratio", True)
  120. imagesink.set_xwindow_id (self.my_view.window.xid)
  121.  
  122. def on_remoteview_message(self, bus, message):
  123. if message.type == gst.MESSAGE_ERROR:
  124. err, debug = message.parse_error ()
  125. print err, debug
  126.  
  127. def on_remoteview_sync_message (self, bus, message):
  128. if message.structure is None:
  129. return
  130.  
  131. mn = message.structure.get_name()
  132. if mn == "prepare-xwindow-id":
  133. imagesink = message.src
  134. imagesink.set_property("force-aspect-ratio", True)
  135. imagesink.set_xwindow_id (self.remote_view.window.xid)
  136.  
  137.  
  138.  
  139.  
  140. GTK_Main()
  141. gtk.gdk.threads_init()
  142. gtk.main()
Add Comment
Please, Sign In to add comment