aboutsummaryrefslogtreecommitdiff
path: root/example-scripts
diff options
context:
space:
mode:
Diffstat (limited to 'example-scripts')
-rwxr-xr-xexample-scripts/audio-play-cam1-mirror.sh5
-rwxr-xr-xexample-scripts/audio-play-cam2-mirror.sh5
-rwxr-xr-xexample-scripts/audio-visualize-cam1-mirror.sh9
-rwxr-xr-xexample-scripts/av-play-cam1-mirror.sh12
-rwxr-xr-xexample-scripts/av-play-output-ffplay.sh2
-rwxr-xr-xexample-scripts/av-record-cam1-mirror.sh20
-rwxr-xr-xexample-scripts/av-record-output-ffmpeg-timestamps.sh8
-rwxr-xr-xexample-scripts/av-record-output-ffmpeg.sh8
-rwxr-xr-xexample-scripts/av-record-output.sh20
-rwxr-xr-xexample-scripts/av-source-avsync-ffmpeg-noloop.sh8
-rwxr-xr-xexample-scripts/av-source-avsync-ffmpeg.sh8
-rwxr-xr-xexample-scripts/av-source-avsync.sh23
-rwxr-xr-xexample-scripts/av-source-background-loop.py63
-rwxr-xr-xexample-scripts/av-source-background-loop.sh6
-rwxr-xr-xexample-scripts/av-source-background.sh6
-rwxr-xr-xexample-scripts/av-source-bmd-cam1.sh8
-rwxr-xr-xexample-scripts/av-source-bmd-cam2.sh8
-rwxr-xr-xexample-scripts/av-source-cam1.sh9
-rwxr-xr-xexample-scripts/av-source-cam2.sh9
-rwxr-xr-xexample-scripts/av-source-eevblog-ffmpeg.sh8
-rwxr-xr-xexample-scripts/av-source-eevblog.sh22
-rwxr-xr-xexample-scripts/av-source-grabber.sh12
-rwxr-xr-xexample-scripts/av-stream-hd.sh12
-rwxr-xr-xexample-scripts/av-stream-sd.sh10
-rwxr-xr-xexample-scripts/benchmark.sh13
-rwxr-xr-xexample-scripts/demo-cube-files.sh15
-rwxr-xr-xexample-scripts/demo-cube.sh15
-rwxr-xr-xexample-scripts/demo-cycle-modes.sh42
-rwxr-xr-xexample-scripts/demo-local.sh15
-rwxr-xr-xexample-scripts/perf.sh12
-rwxr-xr-xexample-scripts/set-audio-cam1.sh2
-rwxr-xr-xexample-scripts/set-audio-cam2.sh2
-rwxr-xr-xexample-scripts/set-composite-fullscreen.sh2
-rwxr-xr-xexample-scripts/set-composite-picture-in-picture.sh2
-rwxr-xr-xexample-scripts/set-composite-side-by-side-equal.sh2
-rwxr-xr-xexample-scripts/set-composite-side-by-side-preview.sh2
-rwxr-xr-xexample-scripts/set-stream-blank-nostream.sh2
-rwxr-xr-xexample-scripts/set-stream-blank-pause.sh2
-rwxr-xr-xexample-scripts/set-stream-live.sh2
-rwxr-xr-xexample-scripts/set-video-cam1.sh2
-rwxr-xr-xexample-scripts/set-video-cam2.sh2
-rwxr-xr-xexample-scripts/set-video-grabber.sh2
-rwxr-xr-xexample-scripts/video-play-cam1-mirror.sh5
-rwxr-xr-xexample-scripts/video-play-cam2-mirror.sh5
-rwxr-xr-xexample-scripts/video-play-mixer-output.sh5
45 files changed, 452 insertions, 0 deletions
diff --git a/example-scripts/audio-play-cam1-mirror.sh b/example-scripts/audio-play-cam1-mirror.sh
new file mode 100755
index 0000000..6b60a9b
--- /dev/null
+++ b/example-scripts/audio-play-cam1-mirror.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+gst-launch-1.0 \
+ tcpclientsrc host=localhost port=13000 !\
+ matroskademux !\
+ alsasink
diff --git a/example-scripts/audio-play-cam2-mirror.sh b/example-scripts/audio-play-cam2-mirror.sh
new file mode 100755
index 0000000..e9f2fb1
--- /dev/null
+++ b/example-scripts/audio-play-cam2-mirror.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+gst-launch-1.0 \
+ tcpclientsrc host=localhost port=13001 !\
+ matroskademux !\
+ alsasink
diff --git a/example-scripts/audio-visualize-cam1-mirror.sh b/example-scripts/audio-visualize-cam1-mirror.sh
new file mode 100755
index 0000000..70772c4
--- /dev/null
+++ b/example-scripts/audio-visualize-cam1-mirror.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+gst-launch-1.0 \
+ tcpclientsrc host=localhost port=13000 !\
+ matroskademux !\
+ audioconvert !\
+ wavescope shader=none style=lines !\
+ video/x-raw,width=800,height=300 !\
+ videoconvert !\
+ xvimagesink
diff --git a/example-scripts/av-play-cam1-mirror.sh b/example-scripts/av-play-cam1-mirror.sh
new file mode 100755
index 0000000..0ec1f2b
--- /dev/null
+++ b/example-scripts/av-play-cam1-mirror.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+gst-launch-1.0 \
+ tcpclientsrc host=localhost port=13000 !\
+ matroskademux name=demux \
+ \
+ demux. !\
+ queue !\
+ xvimagesink ts-offset=300000000 \
+ \
+ demux. !\
+ queue !\
+ alsasink provide-clock=false ts-offset=300000000
diff --git a/example-scripts/av-play-output-ffplay.sh b/example-scripts/av-play-output-ffplay.sh
new file mode 100755
index 0000000..733c279
--- /dev/null
+++ b/example-scripts/av-play-output-ffplay.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+ffplay tcp://localhost:11000
diff --git a/example-scripts/av-record-cam1-mirror.sh b/example-scripts/av-record-cam1-mirror.sh
new file mode 100755
index 0000000..5726535
--- /dev/null
+++ b/example-scripts/av-record-cam1-mirror.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+gst-launch-1.0 \
+ tcpclientsrc host=localhost port=13000 !\
+ matroskademux name=demux \
+ \
+ demux. !\
+ queue !\
+ avenc_mpeg2video bitrate=5000000 max-key-interval=0 !\
+ queue !\
+ mux. \
+ \
+ demux. !\
+ queue !\
+ audioconvert !\
+ avenc_mp2 bitrate=192000 !\
+ queue !\
+ mux. \
+ \
+ mpegtsmux name=mux !\
+ filesink location=foo.ts
diff --git a/example-scripts/av-record-output-ffmpeg-timestamps.sh b/example-scripts/av-record-output-ffmpeg-timestamps.sh
new file mode 100755
index 0000000..86bd1d1
--- /dev/null
+++ b/example-scripts/av-record-output-ffmpeg-timestamps.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+ffmpeg \
+ -i tcp://localhost:11000 \
+ -ac 2 -channel_layout 2 -aspect 16:9 \
+ -map 0:v -c:v:0 mpeg2video -pix_fmt:v:0 yuv422p -qscale:v:0 2 -qmin:v:0 2 -qmax:v:0 7 -keyint_min 0 -bf:0 0 -g:0 0 -intra:0 -maxrate:0 90M \
+ -map 0:a -c:a:0 mp2 -b:a:0 192k -ac:a:0 2 -ar:a:0 48000 \
+ -flags +global_header -flags +ilme+ildct \
+ -f segment -segment_time 180 -segment_format mpegts segment-%t-%05d.ts.ts
diff --git a/example-scripts/av-record-output-ffmpeg.sh b/example-scripts/av-record-output-ffmpeg.sh
new file mode 100755
index 0000000..0ea3d25
--- /dev/null
+++ b/example-scripts/av-record-output-ffmpeg.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+ffmpeg \
+ -i tcp://localhost:11000 \
+ -ac 2 -channel_layout 2 -aspect 16:9 \
+ -map 0:v -c:v:0 mpeg2video -pix_fmt:v:0 yuv422p -qscale:v:0 2 -qmin:v:0 2 -qmax:v:0 7 -keyint_min 0 -bf:0 0 -g:0 0 -intra:0 -maxrate:0 90M \
+ -map 0:a -c:a:0 mp2 -b:a:0 192k -ac:a:0 2 -ar:a:0 48000 \
+ -flags +global_header -flags +ilme+ildct \
+ -f segment -segment_time 180 -segment_format mpegts segment-%d.ts
diff --git a/example-scripts/av-record-output.sh b/example-scripts/av-record-output.sh
new file mode 100755
index 0000000..ef306ed
--- /dev/null
+++ b/example-scripts/av-record-output.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+gst-launch-1.0 \
+ tcpclientsrc host=localhost port=11000 !\
+ matroskademux name=demux \
+ \
+ demux. !\
+ queue !\
+ avenc_mpeg2video bitrate=5000000 max-key-interval=0 !\
+ queue !\
+ mux. \
+ \
+ demux. !\
+ queue !\
+ audioconvert !\
+ avenc_mp2 bitrate=192000 !\
+ queue !\
+ mux. \
+ \
+ mpegtsmux name=mux !\
+ filesink location=foo.ts
diff --git a/example-scripts/av-source-avsync-ffmpeg-noloop.sh b/example-scripts/av-source-avsync-ffmpeg-noloop.sh
new file mode 100755
index 0000000..2183f35
--- /dev/null
+++ b/example-scripts/av-source-avsync-ffmpeg-noloop.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+ffmpeg -y \
+ -i $HOME/avsync.ts \
+ -vf scale=1920x1080 \
+ -c:v rawvideo \
+ -c:a pcm_s16le \
+ -f matroska \
+ tcp://localhost:10000
diff --git a/example-scripts/av-source-avsync-ffmpeg.sh b/example-scripts/av-source-avsync-ffmpeg.sh
new file mode 100755
index 0000000..d4e848b
--- /dev/null
+++ b/example-scripts/av-source-avsync-ffmpeg.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+(while true; do cat $HOME/avsync.ts || exit; done) | ffmpeg -y \
+ -i - \
+ -vf scale=1920x1080 \
+ -c:v rawvideo \
+ -c:a pcm_s16le \
+ -f matroska \
+ tcp://localhost:10000
diff --git a/example-scripts/av-source-avsync.sh b/example-scripts/av-source-avsync.sh
new file mode 100755
index 0000000..208e9c0
--- /dev/null
+++ b/example-scripts/av-source-avsync.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+gst-launch-1.0 \
+ uridecodebin \
+ uri=http://c3voc.mazdermind.de/avsync.mp4 \
+ name=src \
+ \
+ src. !\
+ queue !\
+ videoconvert !\
+ videoscale !\
+ video/x-raw,format=I420,width=1280,height=720,framerate=25/1,pixel-aspect-ratio=1/1 ! \
+ mux. \
+ \
+ src. !\
+ queue !\
+ audioconvert !\
+ audioresample !\
+ audiorate !\
+ audio/x-raw,format=S16LE,channels=2,layout=interleaved,rate=48000 !\
+ mux. \
+ \
+ matroskamux name=mux !\
+ tcpclientsink host=localhost port=10001
diff --git a/example-scripts/av-source-background-loop.py b/example-scripts/av-source-background-loop.py
new file mode 100755
index 0000000..9f4dc6d
--- /dev/null
+++ b/example-scripts/av-source-background-loop.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python3
+import sys, gi, signal
+
+gi.require_version('Gst', '1.0')
+from gi.repository import Gst, GObject
+
+# init GObject & Co. before importing local classes
+GObject.threads_init()
+Gst.init([])
+
+class LoopSource(object):
+ def __init__(self):
+ pipeline = """
+ uridecodebin name=src uri=http://c3voc.mazdermind.de/bg.ts !
+ video/x-raw,format=I420,width=1920,height=1080,framerate=25/1,pixel-aspect-ratio=1/1 !
+ matroskamux !
+ tcpclientsink host=localhost port=16000
+ """
+
+ self.senderPipeline = Gst.parse_launch(pipeline)
+ self.src = self.senderPipeline.get_by_name('src')
+
+ # Binding End-of-Stream-Signal on Source-Pipeline
+ self.senderPipeline.bus.add_signal_watch()
+ self.senderPipeline.bus.connect("message::eos", self.on_eos)
+ self.senderPipeline.bus.connect("message::error", self.on_error)
+
+ print("playing")
+ self.senderPipeline.set_state(Gst.State.PLAYING)
+
+
+ def on_eos(self, bus, message):
+ print('Received EOS-Signal, Seeking to start')
+ self.src.seek(
+ 1.0, # rate (float)
+ Gst.Format.TIME, # format (Gst.Format)
+ Gst.SeekFlags.FLUSH, # flags (Gst.SeekFlags)
+ Gst.SeekType.SET, # start_type (Gst.SeekType)
+ 0, # start (int)
+ Gst.SeekType.NONE, # stop_type (Gst.SeekType)
+ 0 # stop (int)
+ )
+
+ def on_error(self, bus, message):
+ print('Received Error-Signal')
+ (error, debug) = message.parse_error()
+ print('Error-Details: #%u: %s' % (error.code, debug))
+ sys.exit(1)
+
+def main():
+ signal.signal(signal.SIGINT, signal.SIG_DFL)
+
+ src = LoopSource()
+
+ mainloop = GObject.MainLoop()
+ try:
+ mainloop.run()
+ except KeyboardInterrupt:
+ print('Terminated via Ctrl-C')
+
+
+if __name__ == '__main__':
+ main()
diff --git a/example-scripts/av-source-background-loop.sh b/example-scripts/av-source-background-loop.sh
new file mode 100755
index 0000000..8b16487
--- /dev/null
+++ b/example-scripts/av-source-background-loop.sh
@@ -0,0 +1,6 @@
+while true; do cat ~/bg.ts || exit 1; done |\
+ ffmpeg -re -i - \
+ -map 0:v \
+ -c:v rawvideo \
+ -f matroska \
+ tcp://localhost:16000
diff --git a/example-scripts/av-source-background.sh b/example-scripts/av-source-background.sh
new file mode 100755
index 0000000..d978135
--- /dev/null
+++ b/example-scripts/av-source-background.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+gst-launch-1.0 \
+ videotestsrc pattern=ball !\
+ video/x-raw,format=I420,width=1280,height=720,framerate=25/1,pixel-aspect-ratio=1/1 !\
+ matroskamux !\
+ tcpclientsink host=localhost port=16000
diff --git a/example-scripts/av-source-bmd-cam1.sh b/example-scripts/av-source-bmd-cam1.sh
new file mode 100755
index 0000000..600a0b7
--- /dev/null
+++ b/example-scripts/av-source-bmd-cam1.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+ffmpeg -y \
+ -f decklink \
+ -i 'DeckLink Mini Recorder (1)@11' \
+ -c:v rawvideo -c:a pcm_s16le \
+ -pix_fmt yuv420p \
+ -f matroska \
+ tcp://localhost:10000
diff --git a/example-scripts/av-source-bmd-cam2.sh b/example-scripts/av-source-bmd-cam2.sh
new file mode 100755
index 0000000..3682663
--- /dev/null
+++ b/example-scripts/av-source-bmd-cam2.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+ffmpeg -y \
+ -f decklink \
+ -i 'DeckLink Mini Recorder (2)@11' \
+ -c:v rawvideo -c:a pcm_s16le \
+ -pix_fmt yuv420p \
+ -f matroska \
+ tcp://localhost:10001
diff --git a/example-scripts/av-source-cam1.sh b/example-scripts/av-source-cam1.sh
new file mode 100755
index 0000000..22b61f5
--- /dev/null
+++ b/example-scripts/av-source-cam1.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+ffmpeg -y \
+ -i "$HOME/31c3-sendezentrum-1013-de-Methodisch_inkorrekt_Die_falsche_42_hd.mp4" \
+ -ac 2 \
+ -af aresample=48000 \
+ -c:v rawvideo \
+ -c:a pcm_s16le \
+ -f matroska \
+ tcp://localhost:10000
diff --git a/example-scripts/av-source-cam2.sh b/example-scripts/av-source-cam2.sh
new file mode 100755
index 0000000..6f39fd0
--- /dev/null
+++ b/example-scripts/av-source-cam2.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+ffmpeg -y \
+ -i "$HOME/31c3-sendezentrum-1003-de-Freak_Show_FS147_That_Escalatored_Quickly_hd.mp4" \
+ -ac 2 \
+ -af aresample=48000 \
+ -c:v rawvideo \
+ -c:a pcm_s16le \
+ -f matroska \
+ tcp://localhost:10001
diff --git a/example-scripts/av-source-eevblog-ffmpeg.sh b/example-scripts/av-source-eevblog-ffmpeg.sh
new file mode 100755
index 0000000..3c3aab9
--- /dev/null
+++ b/example-scripts/av-source-eevblog-ffmpeg.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+ffmpeg -y \
+ -i $HOME/eevblog.mp4 \
+ -c:v rawvideo \
+ -c:a pcm_s16le \
+ -af aresample=48000 \
+ -f matroska \
+ tcp://localhost:10000
diff --git a/example-scripts/av-source-eevblog.sh b/example-scripts/av-source-eevblog.sh
new file mode 100755
index 0000000..0ed237d
--- /dev/null
+++ b/example-scripts/av-source-eevblog.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+gst-launch-1.0 \
+ filesrc location=$HOME/eevblog.mp4 !\
+ decodebin name=src \
+ \
+ src. !\
+ queue !\
+ videoconvert !\
+ videoscale !\
+ video/x-raw,format=I420,width=1280,height=720,framerate=25/1,pixel-aspect-ratio=1/1 ! \
+ mux. \
+ \
+ src. !\
+ queue !\
+ audioconvert !\
+ audioresample !\
+ audiorate !\
+ audio/x-raw,format=S16LE,channels=2,layout=interleaved,rate=48000 !\
+ mux. \
+ \
+ matroskamux name=mux !\
+ tcpclientsink host=localhost port=10000
diff --git a/example-scripts/av-source-grabber.sh b/example-scripts/av-source-grabber.sh
new file mode 100755
index 0000000..8329dc4
--- /dev/null
+++ b/example-scripts/av-source-grabber.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+ffmpeg -y \
+ -i "http://10.73.5.2:1881/stream.mjpg" \
+ -filter_complex "scale=1920:1080,fps=25" \
+ -ar 48000 \
+ -ac 2 \
+ -f s16le \
+ -i "/dev/zero" \
+ -c:a pcm_s16le \
+ -c:v rawvideo \
+ -f matroska \
+ tcp://localhost:10002
diff --git a/example-scripts/av-stream-hd.sh b/example-scripts/av-stream-hd.sh
new file mode 100755
index 0000000..e273a02
--- /dev/null
+++ b/example-scripts/av-stream-hd.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+ffmpeg -i tcp://localhost:11000 -aspect 16:9 -threads:0 0 \
+-c:v libx264 \
+-filter_complex "
+ yadif=mode=2, hqdn3d [deinter];
+ movie=$HOME/overlay_hd.png [logo];
+ [deinter] [logo] overlay=0:0 [out]
+" -map '[out]' -maxrate:v:0 3000k -bufsize:v:0 8192k -crf:0 21 -pix_fmt:0 yuv420p -profile:v:0 main -g:v:0 25 -preset:v:0 veryfast \
+-ac 1 -c:a libfdk_aac -b:a 96k -ar 44100 \
+-map 0:a -filter:a:0 pan=mono:c0=FL \
+-ac:a:2 2 \
+-y -f flv rtmp://127.0.0.1:1935/stream/voctomix
diff --git a/example-scripts/av-stream-sd.sh b/example-scripts/av-stream-sd.sh
new file mode 100755
index 0000000..608c643
--- /dev/null
+++ b/example-scripts/av-stream-sd.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+ffmpeg -i tcp://localhost:11000 -aspect 16:9 -threads:0 0 \
+-c:v libx264 \
+-filter_complex "
+ yadif=mode=2, hqdn3d, scale=720:576 [out]
+" -map '[out]' -maxrate:v:0 800k -bufsize:v:0 8192k -crf:0 18 -pix_fmt:0 yuv420p -profile:v:0 main -g:v:0 25 -preset:v:0 veryfast \
+-ac 1 -c:a libfdk_aac -b:a 96k -ar 44100 \
+-map 0:a -filter:a:0 pan=mono:c0=FL \
+-ac:a:2 2 \
+-y -f flv rtmp://127.0.0.1:1935/stream/s5_native_sd
diff --git a/example-scripts/benchmark.sh b/example-scripts/benchmark.sh
new file mode 100755
index 0000000..7b3a72b
--- /dev/null
+++ b/example-scripts/benchmark.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+../voctocore.py &
+PID=$!
+echo "PID=$PID"
+sleep 1
+./set-composite-side-by-side-equal.sh >/dev/null 2>/dev/null
+./av-source-eevblog.sh >/dev/null 2>/dev/null &
+./av-source-avsync.sh >/dev/null 2>/dev/null &
+pidstat -p $PID 1 &
+sleep 10
+kill $PID
+wait
diff --git a/example-scripts/demo-cube-files.sh b/example-scripts/demo-cube-files.sh
new file mode 100755
index 0000000..978c91e
--- /dev/null
+++ b/example-scripts/demo-cube-files.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+../voctocore.py -vv &
+PID=$!
+echo "PID=$PID"
+sleep 1
+./av-source-cam1.sh &
+./av-source-cam2.sh &
+./av-source-background-loop.py &
+./av-record-output-ffmpeg-timestamps.sh &
+./av-stream-hd.sh &
+./demo-cycle-modes.sh &
+while true; do sleep 1; done
+kill $PID
+wait
diff --git a/example-scripts/demo-cube.sh b/example-scripts/demo-cube.sh
new file mode 100755
index 0000000..587f533
--- /dev/null
+++ b/example-scripts/demo-cube.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+../voctocore.py -vv &
+PID=$!
+echo "PID=$PID"
+sleep 1
+./av-source-bmd-cam1.sh &
+./av-source-bmd-cam2.sh &
+./av-source-background-loop.py &
+./av-record-output-ffmpeg-timestamps.sh &
+./av-stream-hd.sh &
+./demo-cycle-modes.sh &
+while true; do sleep 1; done
+kill $PID
+wait
diff --git a/example-scripts/demo-cycle-modes.sh b/example-scripts/demo-cycle-modes.sh
new file mode 100755
index 0000000..b626b28
--- /dev/null
+++ b/example-scripts/demo-cycle-modes.sh
@@ -0,0 +1,42 @@
+while true; do
+ sleep 10
+ echo "composite-picture-in-picture"
+ ./set-composite-picture-in-picture.sh
+ sleep 10
+ echo "audio/video cam2"
+ ./set-video-cam2.sh
+ ./set-audio-cam2.sh
+ sleep 10
+ echo "composite-side-by-side-preview"
+ ./set-composite-side-by-side-preview.sh
+ sleep 10
+ echo "audio/video cam1"
+ ./set-audio-cam1.sh
+ ./set-video-cam1.sh
+ sleep 10
+ echo "composite-fullscreen"
+ ./set-composite-fullscreen.sh
+ sleep 10
+ echo "audio/video cam2"
+ ./set-audio-cam2.sh
+ ./set-video-cam2.sh
+ sleep 10
+ echo "audio/video cam1"
+ ./set-video-cam1.sh
+ ./set-audio-cam1.sh
+ sleep 10
+ echo "composite-side-by-side-equal"
+ ./set-composite-side-by-side-equal.sh
+ sleep 10
+ echo "audio/video cam2"
+ ./set-video-cam2.sh
+ ./set-audio-cam2.sh
+ sleep 10
+ echo "composite-picture-in-picture"
+ ./set-composite-picture-in-picture.sh
+ sleep 10
+ echo "audio/video cam1, composite-fullscreen"
+ ./set-video-cam1.sh
+ ./set-audio-cam1.sh
+ ./set-composite-fullscreen.sh
+done
diff --git a/example-scripts/demo-local.sh b/example-scripts/demo-local.sh
new file mode 100755
index 0000000..2fb1f6a
--- /dev/null
+++ b/example-scripts/demo-local.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+../voctocore.py -vv &
+PID=$!
+echo "PID=$PID"
+sleep 1
+./av-source-cam1.sh &
+./av-source-cam2.sh &
+./av-source-background-loop.py &
+./av-record-output-ffmpeg.sh &
+#./av-stream-hd.sh &
+./demo-cycle-modes.sh &
+ffplay tcp://localhost:11000
+kill $PID
+wait
diff --git a/example-scripts/perf.sh b/example-scripts/perf.sh
new file mode 100755
index 0000000..035ec05
--- /dev/null
+++ b/example-scripts/perf.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+../voctocore.py &
+PID=$!
+echo "PID=$PID"
+sleep 1
+./set-composite-side-by-side-equal.sh >/dev/null 2>/dev/null
+./av-source-eevblog.sh >/dev/null 2>/dev/null &
+./av-source-avsync.sh >/dev/null 2>/dev/null &
+sudo perf top -g -p $PID
+kill $PID
+wait
diff --git a/example-scripts/set-audio-cam1.sh b/example-scripts/set-audio-cam1.sh
new file mode 100755
index 0000000..19d3b8e
--- /dev/null
+++ b/example-scripts/set-audio-cam1.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo set_audio cam1 | nc -q0 localhost 9999
diff --git a/example-scripts/set-audio-cam2.sh b/example-scripts/set-audio-cam2.sh
new file mode 100755
index 0000000..9177772
--- /dev/null
+++ b/example-scripts/set-audio-cam2.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo set_audio cam2 | nc -q0 localhost 9999
diff --git a/example-scripts/set-composite-fullscreen.sh b/example-scripts/set-composite-fullscreen.sh
new file mode 100755
index 0000000..850e591
--- /dev/null
+++ b/example-scripts/set-composite-fullscreen.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo set_composite_mode fullscreen | nc -q0 localhost 9999
diff --git a/example-scripts/set-composite-picture-in-picture.sh b/example-scripts/set-composite-picture-in-picture.sh
new file mode 100755
index 0000000..eae3bea
--- /dev/null
+++ b/example-scripts/set-composite-picture-in-picture.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo set_composite_mode picture_in_picture | nc -q0 localhost 9999
diff --git a/example-scripts/set-composite-side-by-side-equal.sh b/example-scripts/set-composite-side-by-side-equal.sh
new file mode 100755
index 0000000..37e3357
--- /dev/null
+++ b/example-scripts/set-composite-side-by-side-equal.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo set_composite_mode side_by_side_equal | nc -q0 localhost 9999
diff --git a/example-scripts/set-composite-side-by-side-preview.sh b/example-scripts/set-composite-side-by-side-preview.sh
new file mode 100755
index 0000000..dd8a04b
--- /dev/null
+++ b/example-scripts/set-composite-side-by-side-preview.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo set_composite_mode side_by_side_preview | nc -q0 localhost 9999
diff --git a/example-scripts/set-stream-blank-nostream.sh b/example-scripts/set-stream-blank-nostream.sh
new file mode 100755
index 0000000..abdab4b
--- /dev/null
+++ b/example-scripts/set-stream-blank-nostream.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo set_stream_blank nostream | nc -q0 localhost 9999
diff --git a/example-scripts/set-stream-blank-pause.sh b/example-scripts/set-stream-blank-pause.sh
new file mode 100755
index 0000000..abf3580
--- /dev/null
+++ b/example-scripts/set-stream-blank-pause.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo set_stream_blank pause | nc -q0 localhost 9999
diff --git a/example-scripts/set-stream-live.sh b/example-scripts/set-stream-live.sh
new file mode 100755
index 0000000..e2584c8
--- /dev/null
+++ b/example-scripts/set-stream-live.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo set_stream_live | nc -q0 localhost 9999
diff --git a/example-scripts/set-video-cam1.sh b/example-scripts/set-video-cam1.sh
new file mode 100755
index 0000000..d02b385
--- /dev/null
+++ b/example-scripts/set-video-cam1.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo set_video_a cam1 | nc -q0 localhost 9999
diff --git a/example-scripts/set-video-cam2.sh b/example-scripts/set-video-cam2.sh
new file mode 100755
index 0000000..c953ade
--- /dev/null
+++ b/example-scripts/set-video-cam2.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo set_video_a cam2 | nc -q0 localhost 9999
diff --git a/example-scripts/set-video-grabber.sh b/example-scripts/set-video-grabber.sh
new file mode 100755
index 0000000..ee39c3b
--- /dev/null
+++ b/example-scripts/set-video-grabber.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo set_video_a grabber | nc -q0 localhost 9999
diff --git a/example-scripts/video-play-cam1-mirror.sh b/example-scripts/video-play-cam1-mirror.sh
new file mode 100755
index 0000000..ec3605b
--- /dev/null
+++ b/example-scripts/video-play-cam1-mirror.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+gst-launch-1.0 \
+ tcpclientsrc host=localhost port=13000 !\
+ matroskademux !\
+ xvimagesink
diff --git a/example-scripts/video-play-cam2-mirror.sh b/example-scripts/video-play-cam2-mirror.sh
new file mode 100755
index 0000000..e42ca6a
--- /dev/null
+++ b/example-scripts/video-play-cam2-mirror.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+gst-launch-1.0 \
+ tcpclientsrc host=localhost port=13001 !\
+ matroskademux !\
+ xvimagesink
diff --git a/example-scripts/video-play-mixer-output.sh b/example-scripts/video-play-mixer-output.sh
new file mode 100755
index 0000000..abb3174
--- /dev/null
+++ b/example-scripts/video-play-mixer-output.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+gst-launch-1.0 \
+ tcpclientsrc host=localhost port=11000 !\
+ matroskademux !\
+ xvimagesink