#!/usr/bin/python3
import gi, time
import socket

# import GStreamer and GTK-Helper classes
gi.require_version('Gst', '1.0')
from gi.repository import GLib, Gst, GObject

# init GObject before importing local classes
GObject.threads_init()
Gst.init(None)

class Example:
	def __init__(self):
		self.mainloop = GObject.MainLoop()

		self.src   = Gst.parse_launch("""
			tcpserversrc port=10000 !
			matroskademux name=demux

			demux. !
			audio/x-raw,format=S16LE,channels=2,layout=interleaved,rate=48000,channel-mask=(bitmask)0x3 !
			queue !
			tee name=atee

			atee. ! queue ! interaudiosink channel=audio_cam1_mixer
			atee. ! queue ! interaudiosink channel=audio_cam1_mirror

			demux. !
			video/x-raw,format=I420,width=800,height=450,framerate=25/1 !
			queue !
			tee name=vtee

			vtee. ! queue ! intervideosink channel=video_cam1_mixer
			vtee. ! queue ! intervideosink channel=video_cam1_mirror
		""")

		self.sink   = Gst.parse_launch("""
			interaudiosrc channel=audio_cam1_mirror !
			audio/x-raw,format=S16LE,channels=2,layout=interleaved,rate=48000,channel-mask=(bitmask)0x3 !
			queue !
			mux.

			intervideosrc channel=video_cam1_mirror !
			video/x-raw,format=I420,width=800,height=450,framerate=25/1 !
			queue !
			mux.

			matroskamux
				name=mux
				streamable=true
				writing-app=Voctomix-AVRawOutput !

			tcpserversink port=11000
		""")

	def run(self):
		self.src.set_state(Gst.State.PLAYING)
		self.sink.set_state(Gst.State.PLAYING)
		self.mainloop.run()


example = Example()
example.run()