summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--inventory/host_vars/glt-datacop.yml22
-rw-r--r--roles/streaming/recorder/defaults/main.yml16
-rw-r--r--roles/streaming/recorder/tasks/main.yml22
-rw-r--r--roles/streaming/recorder/templates/pod-spec.yml.j272
-rw-r--r--spreadspace/glt-datacop.yml3
-rw-r--r--spreadspace/glt-thetys.yml2
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