Browse Source

jibri: make some ffmpeg arguments configurable via env variables

Introduce a few new environment variables:
- `JIBRI_RECORDING_VIDEO_ENCODE_PRESET`
- `JIBRI_RECORDING_CONSTANT_RATE_FACTOR`
- `JIBRI_RECORDING_CONSTANT_FRAMERATE`
- `JIBRI_RECORDING_CONSTANT_QUEUE_SIZE`
- `JIBRI_RECORDING_CONSTANT_STREAMING_MAX_BITRATE`

Co-authored-by: Christian Ribeaud <christian.ribeaud@karakun.com>
Christian Ribeaud 1 year ago
parent
commit
5c5575c
2 changed files with 27 additions and 8 deletions
  1. 5 0
      jibri.yml
  2. 22 8
      jibri/rootfs/defaults/jibri.conf

+ 5 - 0
jibri.yml

@@ -27,6 +27,11 @@ services:
             - JIBRI_HTTP_API_EXTERNAL_PORT
             - JIBRI_HTTP_API_EXTERNAL_PORT
             - JIBRI_HTTP_API_INTERNAL_PORT
             - JIBRI_HTTP_API_INTERNAL_PORT
             - JIBRI_RECORDING_RESOLUTION
             - JIBRI_RECORDING_RESOLUTION
+            - JIBRI_RECORDING_VIDEO_ENCODE_PRESET
+            - JIBRI_RECORDING_CONSTANT_RATE_FACTOR
+            - JIBRI_RECORDING_FRAMERATE
+            - JIBRI_RECORDING_QUEUE_SIZE
+            - JIBRI_RECORDING_STREAMING_MAX_BITRATE
             - JIBRI_USAGE_TIMEOUT
             - JIBRI_USAGE_TIMEOUT
             - JIBRI_XMPP_USER
             - JIBRI_XMPP_USER
             - JIBRI_XMPP_PASSWORD
             - JIBRI_XMPP_PASSWORD

+ 22 - 8
jibri/rootfs/defaults/jibri.conf

@@ -2,6 +2,11 @@
 {{ $JIBRI_RECORDER_USER := .Env.JIBRI_RECORDER_USER | default "recorder" -}}
 {{ $JIBRI_RECORDER_USER := .Env.JIBRI_RECORDER_USER | default "recorder" -}}
 {{ $JIBRI_USAGE_TIMEOUT := .Env.JIBRI_USAGE_TIMEOUT | default "0" -}}
 {{ $JIBRI_USAGE_TIMEOUT := .Env.JIBRI_USAGE_TIMEOUT | default "0" -}}
 {{ $JIBRI_RECORDING_RESOLUTION := .Env.JIBRI_RECORDING_RESOLUTION | default "1280x720" -}}
 {{ $JIBRI_RECORDING_RESOLUTION := .Env.JIBRI_RECORDING_RESOLUTION | default "1280x720" -}}
+{{ $JIBRI_RECORDING_VIDEO_ENCODE_PRESET := .Env.JIBRI_RECORDING_VIDEO_ENCODE_PRESET | default "veryfast" -}}
+{{ $JIBRI_RECORDING_CONSTANT_RATE_FACTOR := .Env.JIBRI_RECORDING_CONSTANT_RATE_FACTOR | default 25 -}}
+{{ $JIBRI_RECORDING_FRAMERATE := .Env.$JIBRI_RECORDING_FRAMERATE | default 30 -}}
+{{ $JIBRI_RECORDING_QUEUE_SIZE := .Env.$JIBRI_RECORDING_QUEUE_SIZE | default 4096 -}}
+{{ $JIBRI_RECORDING_STREAMING_MAX_BITRATE := .Env.$JIBRI_RECORDING_STREAMING_MAX_BITRATE | default 2976 -}}
 {{ $JIBRI_BREWERY_MUC := .Env.JIBRI_BREWERY_MUC | default "jibribrewery" -}}
 {{ $JIBRI_BREWERY_MUC := .Env.JIBRI_BREWERY_MUC | default "jibribrewery" -}}
 {{ $JIBRI_SINGLE_USE_MODE := .Env.JIBRI_SINGLE_USE_MODE | default "false" -}}
 {{ $JIBRI_SINGLE_USE_MODE := .Env.JIBRI_SINGLE_USE_MODE | default "false" -}}
 {{ $XMPP_AUTH_DOMAIN := .Env.XMPP_AUTH_DOMAIN | default "auth.meet.jitsi" -}}
 {{ $XMPP_AUTH_DOMAIN := .Env.XMPP_AUTH_DOMAIN | default "auth.meet.jitsi" -}}
@@ -48,12 +53,12 @@ jibri {
             {
             {
                 // A user-friendly name for this environment
                 // A user-friendly name for this environment
                 name = "{{ $ENV.XMPP_ENV_NAME }}-{{$index}}"
                 name = "{{ $ENV.XMPP_ENV_NAME }}-{{$index}}"
-    
+
                 // A list of XMPP server hosts to which we'll connect
                 // A list of XMPP server hosts to which we'll connect
-                xmpp-server-hosts = [ 
+                xmpp-server-hosts = [
                     "{{ $SERVER._0 }}"
                     "{{ $SERVER._0 }}"
                 ]
                 ]
-    
+
                 // The base XMPP domain
                 // The base XMPP domain
                 xmpp-domain = "{{ $XMPP_DOMAIN }}"
                 xmpp-domain = "{{ $XMPP_DOMAIN }}"
 
 
@@ -61,7 +66,7 @@ jibri {
                 // An (optional) base url the Jibri will join if it is set
                 // An (optional) base url the Jibri will join if it is set
                 base-url = "{{ $ENV.PUBLIC_URL }}"
                 base-url = "{{ $ENV.PUBLIC_URL }}"
                 {{ end -}}
                 {{ end -}}
-                
+
                 // The MUC we'll join to announce our presence for
                 // The MUC we'll join to announce our presence for
                 // recording and streaming services
                 // recording and streaming services
                 control-muc {
                 control-muc {
@@ -84,16 +89,16 @@ jibri {
                     username = "{{ $JIBRI_RECORDER_USER }}"
                     username = "{{ $JIBRI_RECORDER_USER }}"
                     password = "{{ $ENV.JIBRI_RECORDER_PASSWORD }}"
                     password = "{{ $ENV.JIBRI_RECORDER_PASSWORD }}"
                 }
                 }
-                
+
                 // The value we'll strip from the room JID domain to derive
                 // The value we'll strip from the room JID domain to derive
                 // the call URL
                 // the call URL
                 strip-from-room-domain = "{{ $JIBRI_STRIP_DOMAIN_JID }}."
                 strip-from-room-domain = "{{ $JIBRI_STRIP_DOMAIN_JID }}."
-    
+
                 // How long Jibri sessions will be allowed to last before
                 // How long Jibri sessions will be allowed to last before
                 // they are stopped.  A value of 0 allows them to go on
                 // they are stopped.  A value of 0 allows them to go on
                 // indefinitely
                 // indefinitely
                 usage-timeout = "{{ $JIBRI_USAGE_TIMEOUT }}"
                 usage-timeout = "{{ $JIBRI_USAGE_TIMEOUT }}"
-                
+
                 // Whether or not we'll automatically trust any cert on
                 // Whether or not we'll automatically trust any cert on
                 // this XMPP domain
                 // this XMPP domain
                 trust-all-xmpp-certs = {{ $XMPP_TRUST_ALL_CERTS }}
                 trust-all-xmpp-certs = {{ $XMPP_TRUST_ALL_CERTS }}
@@ -118,6 +123,15 @@ jibri {
       audio-source = "pulse"
       audio-source = "pulse"
       // The audio device that will be used to capture audio on Linux
       // The audio device that will be used to capture audio on Linux
       audio-device =  "default"
       audio-device =  "default"
+      framerate = {{ $JIBRI_RECORDING_FRAMERATE }}
+      queue-size = {{ $JIBRI_RECORDING_QUEUE_SIZE }}
+      streaming-max-bitrate = {{ $JIBRI_RECORDING_STREAMING_MAX_BITRATE }}
+      // Available presets: ultrafast, superfast, veryfast, faster, fast, medium,
+      // slow, slower, veryslow, placebo
+      video-encode-preset = "{{ $JIBRI_RECORDING_VIDEO_ENCODE_PRESET }}"
+      // The range of the CRF scale is 0-51, where 0 is lossless,
+      // 23 is the default, and 51 is worst quality possible.
+      h264-constant-rate-factor = {{ $JIBRI_RECORDING_CONSTANT_RATE_FACTOR }}
     }
     }
 
 
     {{ if .Env.CHROMIUM_FLAGS -}}
     {{ if .Env.CHROMIUM_FLAGS -}}
@@ -136,4 +150,4 @@ jibri {
       port = {{ $STATSD_PORT }}
       port = {{ $STATSD_PORT }}
     }
     }
     {{ end -}}
     {{ end -}}
-}
+}