diff options
-rw-r--r-- | inventory/host_vars/glt-datacop.yml | 22 | ||||
-rw-r--r-- | roles/streaming/recorder/defaults/main.yml | 16 | ||||
-rw-r--r-- | roles/streaming/recorder/tasks/main.yml | 22 | ||||
-rw-r--r-- | roles/streaming/recorder/templates/pod-spec.yml.j2 | 72 | ||||
-rw-r--r-- | spreadspace/glt-datacop.yml | 3 | ||||
-rw-r--r-- | spreadspace/glt-thetys.yml | 2 |
6 files changed, 135 insertions, 2 deletions
diff --git a/inventory/host_vars/glt-datacop.yml b/inventory/host_vars/glt-datacop.yml index 978ad21e..26ea5753 100644 --- a/inventory/host_vars/glt-datacop.yml +++ b/inventory/host_vars/glt-datacop.yml @@ -41,6 +41,12 @@ apt_repo_components: - non-free ## for microcode updates +lvm_groups: + storage: + pvs: + - /dev/disk/by-id/ata-WDC_WD5000AAJS-00TKA0_WD-WCAPW2771922-part1 + + blackmagic_desktopvideo_version: 11.7a12 blackmagic_desktopvideo_include_gui: yes @@ -65,3 +71,19 @@ kubernetes_version: 1.20.5 kubernetes_container_runtime: docker kubernetes_standalone_max_pods: 42 kubernetes_standalone_cni_variant: with-portmap + + +recorder_storage: + type: lvm + vg: storage + lv: recorder + size: 400G + fs: ext4 +recorder_base_path: /srv/recorder +recorder_inst_name: feed-glt21s1 +recorder_ffmpeg_image_version: 2021-02-24.7 +recorder_decklink_card: "DeckLink Mini Recorder" +recorder_decklink_format_code: Hp25 + +recorder_segment_time: 3600 +recorder_segment_clocktime_offset: 3300 diff --git a/roles/streaming/recorder/defaults/main.yml b/roles/streaming/recorder/defaults/main.yml new file mode 100644 index 00000000..6bcfde17 --- /dev/null +++ b/roles/streaming/recorder/defaults/main.yml @@ -0,0 +1,16 @@ +--- +# recorder_storage: +# type: (lvm|zfs) +# ... +recorder_base_path: /srv/recorder + +# recorder_inst_name: feed +# recorder_ffmpeg_image_version: 2021-02-24.7 +# recorder_decklink_card: "DeckLink Mini Recorder" +# recorder_decklink_format_code: Hp25 +recorder_audio_channels: 2 +recorder_audio_bitrate: 256k +recorder_video_crf: 16 + +recorder_segment_time: 3600 +recorder_segment_clocktime_offset: 0 diff --git a/roles/streaming/recorder/tasks/main.yml b/roles/streaming/recorder/tasks/main.yml new file mode 100644 index 00000000..ee682b89 --- /dev/null +++ b/roles/streaming/recorder/tasks/main.yml @@ -0,0 +1,22 @@ +--- +- name: prepare recorder storage volume + when: recorder_storage is defined + vars: + storage_volume: "{{ recorder_storage | combine({'dest': recorder_base_path}) }}" + include_role: + name: "storage/{{ recorder_storage.type }}/volume" + +- name: create recorder instance directory + file: + path: "{{ recorder_base_path }}/{{ recorder_inst_name }}" + state: directory + owner: app + group: app + +- name: install pod manifest + vars: + kubernetes_standalone_pod: + name: "recorder-{{ recorder_inst_name }}" + spec: "{{ lookup('template', 'pod-spec.yml.j2') }}" + include_role: + name: kubernetes/standalone/pod diff --git a/roles/streaming/recorder/templates/pod-spec.yml.j2 b/roles/streaming/recorder/templates/pod-spec.yml.j2 new file mode 100644 index 00000000..92f6ce36 --- /dev/null +++ b/roles/streaming/recorder/templates/pod-spec.yml.j2 @@ -0,0 +1,72 @@ +containers: +- name: record + image: registry.gitlab.com/spreadspace/docker/ffmpeg:{{ recorder_ffmpeg_image_version }} + imagePullPolicy: Always + command: + - /usr/bin/ffmpeg + args: + - -f + - decklink + - -format_code + - '{{ recorder_decklink_format_code }}' + - -ac + - '{{ recorder_audio_channels }}' + - -i + - '{{ recorder_decklink_card }}' + - -c:a + - aac + - -b:a + - '{{ recorder_audio_bitrate }}' + - -g + - '1' + - -c:v + - libx264 + - -crf + - '{{ recorder_video_crf }}' + - -x264-params + - 'colorprim=bt709:transfer=bt709:colormatrix=bt709:fullrange=off' + - -f + - segment + - -segment_atclocktime + - '1' + - -segment_time + - '{{ recorder_segment_time }}' + - -segment_clocktime_offset + - '{{ recorder_segment_clocktime_offset }}' + - -strftime + - '1' + - -reset_timestamps + - '1' + - '%Y-%m-%d_%H-%M-%S.mkv' + workingDir: /srv + securityContext: + privileged: true + volumeMounts: + - name: home + mountPath: /srv + - name: decklink-device + mountPath: /dev/blackmagic + - name: decklink-libs + subPath: libDeckLinkAPI.so + mountPath: /usr/lib/libDeckLinkAPI.so + readOnly: true + - name: decklink-libs + subPath: libDeckLinkPreviewAPI.so + mountPath: /usr/lib/libDeckLinkPreviewAPI.so + readOnly: true + - name: decklink-libs + subPath: blackmagic + mountPath: /usr/lib/blackmagic + readOnly: true + +volumes: +- name: home + hostPath: + path: "{{ recorder_base_path }}/{{ recorder_inst_name }}" +- name: decklink-device + hostPath: + path: /dev/blackmagic +- name: decklink-libs + hostPath: + type: Directory + path: /usr/lib/ diff --git a/spreadspace/glt-datacop.yml b/spreadspace/glt-datacop.yml index c1123142..b3fb9005 100644 --- a/spreadspace/glt-datacop.yml +++ b/spreadspace/glt-datacop.yml @@ -8,11 +8,12 @@ - role: core/zsh - role: core/ntp - role: core/cpu-microcode + - role: storage/lvm/groups - role: apt-repo/spreadspace - role: streaming/blackmagic/desktopvideo - role: kubernetes/base - role: kubernetes/standalone/base - #- role: streaming/rtmp/streamer + - role: streaming/recorder post_tasks: - name: install lm-sensors and i7z apt: diff --git a/spreadspace/glt-thetys.yml b/spreadspace/glt-thetys.yml index e07dbaf5..9454142f 100644 --- a/spreadspace/glt-thetys.yml +++ b/spreadspace/glt-thetys.yml @@ -8,8 +8,8 @@ - role: core/zsh - role: core/ntp - role: core/cpu-microcode - - role: apt-repo/spreadspace - role: storage/lvm/groups + - role: apt-repo/spreadspace - role: streaming/blackmagic/desktopvideo - role: kubernetes/base - role: kubernetes/standalone/base |