aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rwxr-xr-xexample-scripts/av-source-avsync-ffmpeg-noloop.sh1
-rwxr-xr-xexample-scripts/av-source-avsync-ffmpeg.sh1
-rwxr-xr-xexample-scripts/av-source-avsync.sh2
-rwxr-xr-xexample-scripts/av-source-background-loop.sh1
-rwxr-xr-xexample-scripts/av-source-background.sh2
-rwxr-xr-xexample-scripts/av-source-bmd-cam1.sh2
-rwxr-xr-xexample-scripts/av-source-bmd-cam2.sh2
-rwxr-xr-xexample-scripts/av-source-cam1.sh1
-rwxr-xr-xexample-scripts/av-source-cam2.sh1
-rwxr-xr-xexample-scripts/av-source-eevblog-ffmpeg.sh1
-rwxr-xr-xexample-scripts/av-source-eevblog.sh2
-rwxr-xr-xexample-scripts/av-source-grabber.sh1
-rw-r--r--voctocore/README.md12
-rw-r--r--voctocore/default-config.ini2
15 files changed, 20 insertions, 13 deletions
diff --git a/README.md b/README.md
index 1f4f58c..751c60a 100644
--- a/README.md
+++ b/README.md
@@ -47,7 +47,7 @@ For testing and development you may want to use a `config.ini` that reduces the
Such a config.ini might look like this:
````
[mix]
-videocaps=video/x-raw,format=I420,width=320,height=180,framerate=25/1,pixel-aspect-ratio=1/1
+videocaps=video/x-raw,format=UYVY,width=320,height=180,framerate=25/1,pixel-aspect-ratio=1/1
[previews]
enabled=false
diff --git a/example-scripts/av-source-avsync-ffmpeg-noloop.sh b/example-scripts/av-source-avsync-ffmpeg-noloop.sh
index 2183f35..61aed59 100755
--- a/example-scripts/av-source-avsync-ffmpeg-noloop.sh
+++ b/example-scripts/av-source-avsync-ffmpeg-noloop.sh
@@ -4,5 +4,6 @@ ffmpeg -y \
-vf scale=1920x1080 \
-c:v rawvideo \
-c:a pcm_s16le \
+ -pix_fmt uyvy422 \
-f matroska \
tcp://localhost:10000
diff --git a/example-scripts/av-source-avsync-ffmpeg.sh b/example-scripts/av-source-avsync-ffmpeg.sh
index d4e848b..3f9a06e 100755
--- a/example-scripts/av-source-avsync-ffmpeg.sh
+++ b/example-scripts/av-source-avsync-ffmpeg.sh
@@ -4,5 +4,6 @@
-vf scale=1920x1080 \
-c:v rawvideo \
-c:a pcm_s16le \
+ -pix_fmt uyvy422 \
-f matroska \
tcp://localhost:10000
diff --git a/example-scripts/av-source-avsync.sh b/example-scripts/av-source-avsync.sh
index 208e9c0..1e8d1eb 100755
--- a/example-scripts/av-source-avsync.sh
+++ b/example-scripts/av-source-avsync.sh
@@ -8,7 +8,7 @@ gst-launch-1.0 \
queue !\
videoconvert !\
videoscale !\
- video/x-raw,format=I420,width=1280,height=720,framerate=25/1,pixel-aspect-ratio=1/1 ! \
+ video/x-raw,format=UYVY,width=1280,height=720,framerate=25/1,pixel-aspect-ratio=1/1 ! \
mux. \
\
src. !\
diff --git a/example-scripts/av-source-background-loop.sh b/example-scripts/av-source-background-loop.sh
index 8b16487..6a269f4 100755
--- a/example-scripts/av-source-background-loop.sh
+++ b/example-scripts/av-source-background-loop.sh
@@ -2,5 +2,6 @@ while true; do cat ~/bg.ts || exit 1; done |\
ffmpeg -re -i - \
-map 0:v \
-c:v rawvideo \
+ -pix_fmt uyvy422 \
-f matroska \
tcp://localhost:16000
diff --git a/example-scripts/av-source-background.sh b/example-scripts/av-source-background.sh
index d978135..94dc978 100755
--- a/example-scripts/av-source-background.sh
+++ b/example-scripts/av-source-background.sh
@@ -1,6 +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 !\
+ video/x-raw,format=UYVY,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
index 600a0b7..f964cc6 100755
--- a/example-scripts/av-source-bmd-cam1.sh
+++ b/example-scripts/av-source-bmd-cam1.sh
@@ -3,6 +3,6 @@ ffmpeg -y \
-f decklink \
-i 'DeckLink Mini Recorder (1)@11' \
-c:v rawvideo -c:a pcm_s16le \
- -pix_fmt yuv420p \
+ -pix_fmt uyvy422 \
-f matroska \
tcp://localhost:10000
diff --git a/example-scripts/av-source-bmd-cam2.sh b/example-scripts/av-source-bmd-cam2.sh
index 3682663..f7d5d12 100755
--- a/example-scripts/av-source-bmd-cam2.sh
+++ b/example-scripts/av-source-bmd-cam2.sh
@@ -3,6 +3,6 @@ ffmpeg -y \
-f decklink \
-i 'DeckLink Mini Recorder (2)@11' \
-c:v rawvideo -c:a pcm_s16le \
- -pix_fmt yuv420p \
+ -pix_fmt uyvy422 \
-f matroska \
tcp://localhost:10001
diff --git a/example-scripts/av-source-cam1.sh b/example-scripts/av-source-cam1.sh
index 22b61f5..e61f336 100755
--- a/example-scripts/av-source-cam1.sh
+++ b/example-scripts/av-source-cam1.sh
@@ -3,6 +3,7 @@ ffmpeg -y \
-i "$HOME/31c3-sendezentrum-1013-de-Methodisch_inkorrekt_Die_falsche_42_hd.mp4" \
-ac 2 \
-af aresample=48000 \
+ -pix_fmt uyvy422 \
-c:v rawvideo \
-c:a pcm_s16le \
-f matroska \
diff --git a/example-scripts/av-source-cam2.sh b/example-scripts/av-source-cam2.sh
index 6f39fd0..d7da5a8 100755
--- a/example-scripts/av-source-cam2.sh
+++ b/example-scripts/av-source-cam2.sh
@@ -3,6 +3,7 @@ ffmpeg -y \
-i "$HOME/31c3-sendezentrum-1003-de-Freak_Show_FS147_That_Escalatored_Quickly_hd.mp4" \
-ac 2 \
-af aresample=48000 \
+ -pix_fmt uyvy422 \
-c:v rawvideo \
-c:a pcm_s16le \
-f matroska \
diff --git a/example-scripts/av-source-eevblog-ffmpeg.sh b/example-scripts/av-source-eevblog-ffmpeg.sh
index 3c3aab9..20cbe1c 100755
--- a/example-scripts/av-source-eevblog-ffmpeg.sh
+++ b/example-scripts/av-source-eevblog-ffmpeg.sh
@@ -3,6 +3,7 @@ ffmpeg -y \
-i $HOME/eevblog.mp4 \
-c:v rawvideo \
-c:a pcm_s16le \
+ -pix_fmt uyvy422 \
-af aresample=48000 \
-f matroska \
tcp://localhost:10000
diff --git a/example-scripts/av-source-eevblog.sh b/example-scripts/av-source-eevblog.sh
index 0ed237d..8a7a10f 100755
--- a/example-scripts/av-source-eevblog.sh
+++ b/example-scripts/av-source-eevblog.sh
@@ -7,7 +7,7 @@ gst-launch-1.0 \
queue !\
videoconvert !\
videoscale !\
- video/x-raw,format=I420,width=1280,height=720,framerate=25/1,pixel-aspect-ratio=1/1 ! \
+ video/x-raw,format=UYVY,width=1280,height=720,framerate=25/1,pixel-aspect-ratio=1/1 ! \
mux. \
\
src. !\
diff --git a/example-scripts/av-source-grabber.sh b/example-scripts/av-source-grabber.sh
index 2d646a9..038a870 100755
--- a/example-scripts/av-source-grabber.sh
+++ b/example-scripts/av-source-grabber.sh
@@ -6,5 +6,6 @@ ffmpeg -y \
-map "[a]" \
-c:a pcm_s16le \
-c:v rawvideo \
+ -pix_fmt uyvy422 \
-f matroska \
tcp://localhost:10002
diff --git a/voctocore/README.md b/voctocore/README.md
index 86a56cb..41020b6 100644
--- a/voctocore/README.md
+++ b/voctocore/README.md
@@ -7,13 +7,13 @@ While Sources ans Sinks all run on the same Machine, Control- or Monitoring-Clie
## Design decisions
To meet our goal of "read and understand in about a weekend" python was chosen as language for the high-level parts, with [GStreamer](http://gstreamer.freedesktop.org/) for the low-level media handling. GStreamer can be controlled via the [PyGI](https://wiki.gnome.org/action/show/Projects/PyGObject) bindings from Python.
-As an Idea borrowed from gst-switch, all Video- and Audio-Streams to and from the core are handled via TCP-Connections. Because they transport raw Video-Frames the only reasonable transport is via the loopback interface or a dedicated GBit-NIC (1920×1080×2 (I420)×8 (Bits)×25 (fps) = ~830 MBit/s). Nevertheless TCP is a quite efficient and good supported transport mechanism. For compatibility with ffmpeg and because of its good properties when streamed over TCP, [Matroska](http://www.matroska.org/) was chosen as a Container.
+As an Idea borrowed from gst-switch, all Video- and Audio-Streams to and from the core are handled via TCP-Connections. Because they transport raw Video-Frames the only reasonable transport is via the loopback interface or a dedicated GBit-NIC (1920×1080×2 (UYVY)×8 (Bits)×25 (fps) = ~830 MBit/s). Nevertheless TCP is a quite efficient and good supported transport mechanism. For compatibility with ffmpeg and because of its good properties when streamed over TCP, [Matroska](http://www.matroska.org/) was chosen as a Container.
-The ubiquitous Input/Output-Format into the core-process is therefore Raw I420 Frames and Raw S16LE Audio in a Matroska container for Timestamping via TCP over localhost. Network handling is done in python, because it allows for greater flexibility. After the TCP connection is ready, its file descriptor is passed to GStreamer which handles the low-level read/write operations. To be able to attach/detach sinks, the `multifdsink`-Element can be used. For the Sources it's more complicated:
+The ubiquitous Input/Output-Format into the core-process is therefore Raw UYVY Frames and Raw S16LE Audio in a Matroska container for Timestamping via TCP over localhost. Network handling is done in python, because it allows for greater flexibility. After the TCP connection is ready, its file descriptor is passed to GStreamer which handles the low-level read/write operations. To be able to attach/detach sinks, the `multifdsink`-Element can be used. For the Sources it's more complicated:
When a source is not connected, its video and audio stream must be substituted with black frames ans silence, to that the remaining parts of the pipeline can keep on running. To achive this, a separate GStreamer-Pipeline is launched for an incoming Source-Connection and destroyed in case of a disconnect or an error. To pass Video -and Audio-Buffers between the Source-Pipelines and the other parts of the Mixer, we make use of the `inter(audio/video)(sink/source)`-Elements. `intervideosrc` and `interaudiosrc` implement the creation of black frames and silence, in case no source is connected or the source broke down somehow.
-If enabled in Config, the core process offers two formats for most outputs: Raw-Frames in mkv as described above, which should be used to feed recording or streaming processes running on the same machine. For the GUI which usually runs on a different computer, they are not suited because of the bandwidth requirements (1920×1080 I420 @25fps = 791 MBit/s). For this reason the Servers offers Preview-Ports for each Input and the Main-Mix, which serves the same content, but the video frames there are jpeg compressed, combined with uncompressed S16LE audio and encapsulated in mkv.
+If enabled in Config, the core process offers two formats for most outputs: Raw-Frames in mkv as described above, which should be used to feed recording or streaming processes running on the same machine. For the GUI which usually runs on a different computer, they are not suited because of the bandwidth requirements (1920×1080 UYVY @25fps = 791 MBit/s). For this reason the Servers offers Preview-Ports for each Input and the Main-Mix, which serves the same content, but the video frames there are jpeg compressed, combined with uncompressed S16LE audio and encapsulated in mkv.
Also, if enabled in Config, another Building-Block is chained after the Main-Mix: the StreamBlanker. It is used in Cases when there should be no Stream, for example in Breaks between Talks. It is sourced from one ASource which usually accepts a Stream of Music-Loop and one or more VSources which usually accepts a "There is currently no Talk"-Loop. Because multiple VSources can be configured, one can additionally source a "We are not allowed to Stream this Talk" or any other Loop. All Video-Loops are combined with the Audio-Loop and can be selected from the GUI.
@@ -42,17 +42,17 @@ Also, if enabled in Config, another Building-Block is chained after the Main-Mix
````
## Network Ports Listing
-Ports that will accept Raw I420 Frames and Raw S16LE Audio in a Matroska container:
+Ports that will accept Raw UYVY Frames and Raw S16LE Audio in a Matroska container:
- 10000, 10001, … – Main Video-Sources, depending on the number of configured Sources
-Ports that will accept Raw I420 Frames without Audio in a Matroska container:
+Ports that will accept Raw UYVY Frames without Audio in a Matroska container:
- 16000 Mixer – Background Loop
- 17000, 17001, … – Stream-Blanker Video-Input, depending on the number of configured Stream-Blanker-Sources
Ports that will accept Raw S16LE Audio wihout Video in a Matroska container:
- 18000 – Stream-Blanker Audio-Input
-Ports that will provide Raw I420 Frames and Raw S16LE Audio in a Matroska container:
+Ports that will provide Raw UYVY Frames and Raw S16LE Audio in a Matroska container:
- 13000, 13001, … – Main Video-Source Mirrors, depending on the number of configured Sources
- 11000 – Main Mixer Output
- 15000 – Stream Output – only when [stream-blanker] enabled=true is configured
diff --git a/voctocore/default-config.ini b/voctocore/default-config.ini
index a5eaae4..323b0f0 100644
--- a/voctocore/default-config.ini
+++ b/voctocore/default-config.ini
@@ -1,5 +1,5 @@
[mix]
-videocaps=video/x-raw,format=I420,width=1920,height=1080,framerate=25/1,pixel-aspect-ratio=1/1
+videocaps=video/x-raw,format=UYVY,width=1920,height=1080,framerate=25/1,pixel-aspect-ratio=1/1
audiocaps=audio/x-raw,format=S16LE,channels=2,layout=interleaved,rate=48000,channel-mask=(bitmask)0x3
; tcp-ports will be 10000,10001,10002