| Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision |
| voctomix [2016/11/07 11:03] – 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]]. |
| | |
| | * [[https://media.ccc.de/v/froscon2016-1696-voctomix|Voctomix Lecture at FROSCON12]] by Mazdermind |
| | * [[http://slides.com/mazdermind/froscon12-voctomix|slides]] |
| |
| == Resources | == Resources |
| * [[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> |
| <WRAP half column> | <WRAP half column> |
| **Subprojects** | **Subprojects** |
| * [[voctomix:voctolight]] | * [[projects:tallycom]] |
| * [[voctomix:voctocom]] | * [[voctomix:voctopanel]] |
| | * [[voctomix:voctomidi]] |
| | |
| | ** related projects** |
| | * [[https://github.com/crossan007/PiCamFleetMapper | PiCamFleetMapper]] |
| | * [[https://github.com/CarlFK/voctomix-outcasts | vocotmix-outcasts]] |
| |
| </WRAP> | </WRAP> |
| </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> |
| |
| |