Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision |
voctomix [2016/11/06 14:38] – derpeter | voctomix [2019/03/28 22:54] – [Voctomix] eimann |
---|
= Voctomix | = Voctomix |
| |
Voctomix ist ein Softwaremischer der es uns erlaubt auf Konferenzen HD-Recording und -Streaming anbieten zu können. Voctomix wird aktuell von [[people:Mazdermind]] fürs VOC entwicklet und ist [[https://github.com/timvideos/gst-switch|gst-switch]]'s kleine Schwester. Sie lebt im [[intern:git|Git]] unter git@c3voc.de:voctomix und Read-Only [[https://github.com/voc/voctomix|auf Github]]. | ---- dataentry project ---- |
| name : Voctomix |
| project-owner : Mazdermind |
| git-url : https://github.com/voc/voctomix |
| project-description : |
| project-owner : |
| project-member : |
| project-status : running |
| ---- |
| Voctomix ist ein Softwaremischer der es uns erlaubt auf Konferenzen HD-Recording und -Streaming anbieten zu können. Voctomix wird aktuell von [[people:Mazdermind]] fürs VOC entwickelt und ist [[https://github.com/timvideos/gst-switch|gst-switch]]'s kleine Schwester. Sie lebt im [[intern:git|Git]] unter git@c3voc.de:voctomix und read-only [[https://github.com/voc/voctomix|auf Github]]. |
| |
== Doku | * [[https://media.ccc.de/v/froscon2016-1696-voctomix|Voctomix Lecture at FROSCON12]] by Mazdermind |
Kann auf Github angeschaut werden: | * [[http://slides.com/mazdermind/froscon12-voctomix|slides]] |
| |
| == Resources |
| <WRAP group> |
| <WRAP half column> |
| |
| **Documentation** |
* [[https://github.com/voc/voctomix/blob/master/README.md|Installation]] | * [[https://github.com/voc/voctomix/blob/master/README.md|Installation]] |
* [[https://github.com/voc/voctomix/blob/master/README_DOCKER.md|"Installation" mit Docker]] | * [[https://github.com/voc/voctomix/blob/master/README_DOCKER.md|"Installation" mit Docker]] |
* [[https://github.com/voc/voctomix/blob/master/voctocore/README.md|Voctocore, Protokoll und Ports]] | * [[https://github.com/voc/voctomix/blob/master/voctocore/README.md|Voctocore, Protokoll und Ports]] |
* [[https://github.com/voc/voctomix/blob/master/voctogui/README.md|Voctogui]] | * [[https://github.com/voc/voctomix/blob/master/voctogui/README.md|Voctogui]] |
| * [[software:voctomix-hardware-examples]] |
| |
| </WRAP> |
| <WRAP half column> |
| **Subprojects** |
| * [[projects:tallycom]] |
| * [[voctomix:voctopanel]] |
| * [[voctomix:voctomidi]] |
| |
| ** related projects** |
| * [[https://github.com/crossan007/PiCamFleetMapper | PiCamFleetMapper]] |
| * [[https://github.com/CarlFK/voctomix-outcasts | vocotmix-outcasts]] |
| |
| |
| </WRAP> |
| </WRAP> |
| |
== Installation on VOC-Hardware | == Installation on VOC hardware |
The Installation on VOC Machines (Encoder-Cubes and Mixer-Notebooks) is managed through [[Ansible]]. The Ansible Deployment creates the following Things on the Encoder-Cubes: | The installation on VOC machines (encoder cubes and mixer notebooks) is managed through [[Ansible]]. The Ansible deployment creates the following things on the encoder-cubes: |
* Source of last Release in ''/opt/voctomix/release'' | * Source of last release in ''/opt/voctomix/release'' |
* Config-File for Voctocore in ''/opt/voctomix/voctocore-config.ini'' | * Config file for voctocore in ''/opt/voctomix/voctocore-config.ini'' |
* Scripts to source/sink/playout Video-Content into/out of the Voctocore in ''/opt/voctomix/scripts'' | * Scripts to source/sink/playout video- content into/out of the voctocore in ''/opt/voctomix/scripts'' |
* Systemd-Units in ''/etc/systemd/system/*.service'' | * Systemd units in ''/etc/systemd/system/*.service'' |
* A System-Status-Script in ''/usr/bin/voctomix-status'' | * A system status script in ''/usr/bin/voctomix-status'' |
| |
Ansible always resetd the Setup to a default configuration, where all SDI-Ports are used as Campera-INs, no Playout is active and all Supporting-Scripts are enabled. Ansible generated the following Systemd-Units for Voctomix: | Ansible always resets the setup to a default configuration, where all SDI-ports are used as camera INs, no playout is active and all supporting scripts are enabled. Ansible generated the following Systemd units for Voctomix: |
^ Systemd-Unit ^ Description ^ | ^ Systemd-Unit ^ Description ^ |
| bgloop-source.service | Source the Background-Loop from ''/opt/voc/share/bgloop.ts'' | | | bgloop-source.service | Source the background loop from ''/opt/voc/share/bgloop.ts'' | |
| decklink-source-[NAME].service | Such a Unit is generated for each Decklink-Input-Device present at the time of the ansible-run. Source Video- and Audio from this Decklink-Input | | | decklink-source-[NAME].service | Such a unit is generated for each Decklink input device present at the time of the ansible-run. Source video- and audio from this Decklink input | |
| grabber-source.service | Source Video-Input from the Epiphan Framegrabber via Ethernet | | | grabber-source.service | Source Video-Input from the Epiphan framegrabber via Ethernet | |
| grabber-to-[NAME]-playout.service | Such a Unit is generated for each Decklink-Output-Device present at the time of the ansible-run. Playout Video- and Silence from the Framegrabber-Input to the Decklink-Output | | | grabber-to-[NAME]-playout.service | Such a unit is generated for each Decklink output device present at the time of the ansible-run. Playout video- and silence from the framegrabber input to the Decklink output | |
| grabber-to-framebuffer-playout.service | Playout Video from the Framegrabber-Input to the HDMI/DVI/VGA Output on the Mainboard | | | grabber-to-framebuffer-playout.service | Playout video from the framegrabber input to the HDMI/DVI/VGA output on the mainboard | |
| music-source.service | Source Music from ''/opt/voc/share/pause-music/'' into the Pause-Loop | | | music-source.service | Source Music from ''/opt/voc/share/pause-music/'' into the pause loop | |
| pause-source.service | Souece Pause-Loop from ''/opt/voc/share/pause.ts'' | | | pause-source.service | Source pause loop from ''/opt/voc/share/pause.ts'' | |
| program-to-[NAME]-playout.service | Such a Unit is generated for each Decklink-Output-Device present at the time of the ansible-run. Playout Video- and Audio from the Program-Output (=what is being recorded; before the Stream-Blanker) to the Decklink-Output | | | program-to-[NAME]-playout.service | Such a unit is generated for each Decklink output device present at the time of the ansible-run. Playout video- and audio from the program output (=what is being recorded; before the stream-blanker) to the Decklink output | |
| program-to-framebuffer-playout.service | Playout Video from the Program-Output (=what is being recorded; before the Stream-Blanker) to the HDMI/DVI/VGA Output on the Mainboard | | | program-to-framebuffer-playout.service | Playout video from the program output (=what is being recorded; before the stream-blanker) to the HDMI/DVI/VGA output on the mainboard | |
| recording-sink.service | Record the Program-Output to Segmented .ts-Files in ''/video'' | | | recording-sink.service | Record the program output to segmented .ts-files in ''/video'' | |
| streaming-hd-sink.service | Encode and Stream the Streamblanker-Output to rtmp://127.0.0.1:1935/stream/s{{ room_number }}_native_hd | | | streaming-hd-sink.service | Encode and stream the stream-blanker output to <code>rtmp://127.0.0.1:1935/stream/s{{ room_number }}_native_hd</code> | |
| streaming-sd-sink.service | Encode and Stream the Streamblanker-Output to rtmp://127.0.0.1:1935/stream/s{{ room_number }}_native_sd | | | streaming-sd-sink.service | Encode and stream the stream-blanker output to <code>rtmp://127.0.0.1:1935/stream/s{{ room_number }}_native_sd</code> | |
| stream-to-[NAME]-playout.service | Such a Unit is generated for each Decklink-Output-Device present at the time of the ansible-run. Playout Video- and Audio from the Stream-Output (=what is being streamed; after the Stream-Blanker) to the Decklink-Output | | | stream-to-[NAME]-playout.service | Such a unit is generated for each Decklink-Output-Device present at the time of the ansible-run. Playout video and audio from the stream output (=what is being streamed; after the stream-blanker) to the Decklink output | |
| stream-to-framebuffer-playout.service | Playout Video from the Stream-Output (=what is being streamed; after the Stream-Blanker) to the HDMI/DVI/VGA Output on the Mainboard | | | stream-to-framebuffer-playout.service | Playout video from the stream output (=what is being streamed; after the stream-blanker) to the HDMI/DVI/VGA output on the mainboard | |
| voctocore.service | The Voctocore | | | voctocore.service | The Voctocore | |
| |
All Supporting Units are ''WantedBy=voctocore.service'' as well as the request ''Requires=voctocore.service'' and ''After=voctocore.service''. | All supporting units are ''WantedBy=voctocore.service'' as well as the request ''Requires=voctocore.service'' and ''After=voctocore.service''. |
This means: | This means: |
* The Supporting Units only start up when the Core has successfully started up first | * The supporting units only start up when the core has successfully started up first |
* When enabled, the Supporting Units automatically start up when the Core is up | * When enabled, the supporting units automatically start up when the core is up |
* The Supporting Units go down when the Core goes down | * The supporting units go down when the core goes down |
| |
| |
<code> | <code> |
sudo systemctl restart voctocore.service | sudo systemctl restart voctocore.service |
| </code> |
| |
| Stop recording at night and schedule re-start in the morning: |
| <code> |
| for i in 1 2 3 4 5 6 41 42; do echo "10.73.${i}.3"; ssh 10.73.${i}.3 'sudo systemctl stop recording-sink.service'; done |
| for i in 1 2 3 4 5 6 41 42; do echo "10.73.${i}.3"; ssh 10.73.${i}.3 'echo "sudo systemctl restart voctocore.service" | at 09:00'; done |
</code> | </code> |
| |
</code> | </code> |
| |
If you leave out the enable/disable the change will be temporary and restarting the voctocore-Unit or the encoder-Cube will reset the change. | If you leave out the enable/disable the change will be temporary and restarting the voctocore unit or the encoder cube will reset the change. |
| |
Similar to enable Playout to the Framebuffer, you can do: | Similar to enable playout to the Framebuffer, you can do: |
<code> | <code> |
sudo systemctl start stream-to-framebuffer-playout.service sudo systemctl enable stream-to-framebuffer-playout.service | sudo systemctl start stream-to-framebuffer-playout.service sudo systemctl enable stream-to-framebuffer-playout.service |
Leaving out the enable/disable the change will also here be temporary. | Leaving out the enable/disable the change will also here be temporary. |
| |
Playout to the Framebuffer can always be interrupted by funny tty0 printouts at any time :) | Playout to the framebuffer can always be interrupted by funny tty0 printouts at any time :) |
Also think about whether you want to playout the Program-Output (before the Streamblanker) or the Streaming-Output (after the Streamblanker). | Also think about whether you want to playout the program output (before the stream-blanker) or the streaming output (after the stream-blanker). |
| |
Creating a background for the supersource from an image file | Creating a background for the supersource from an image file |
| |
== Debugging | == Debugging |
To see the Output of the various Units, you can use a command like this: | To see the output of the various units, you can use a command like this: |
<code> | <code> |
journalctl -au decklink-source-decklink-sdi-2.service | journalctl -au decklink-source-decklink-sdi-2.service |
journalctl -a -f -u grabber-source.service | journalctl -a -f -u grabber-source.service |
== Control Commands | == Control Commands |
Some Useful Control-Commands when you only have a Shell (see also [[https://github.com/voc/voctomix/tree/master/example-scripts/control-server|example-scripts/control-server]]: | Some useful control commands when you only have a shell (see also [[https://github.com/voc/voctomix/tree/master/example-scripts/control-server|example-scripts/control-server]]: |
| For more details see https://github.com/voc/voctomix/blob/voctopanel/voctocore/lib/commands.py |
<code> | <code> |
echo set_audio cam1 | nc -q0 localhost 9999 | echo set_audio cam1 | nc -q0 localhost 9999 |
</code> | </code> |
| |
== Hacking | here you can see the commands together with replays from the core |
if you want to interact with voctocore here are some commands and the replays from the core. | |
For more details see https://github.com/voc/voctomix/blob/voctopanel/voctocore/lib/commands.py | |
| |
<code> | <code> |
<= composite_mode side_by_side_equal | <= composite_mode side_by_side_equal |
</code> | </code> |
| |
| |