diff --git a/CHANGELOG.md b/CHANGELOG.md index d0b54b1d66..e7edbdb277 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +## stable-8960-1 + +Based on stable release 8960-1. + +* 9bd3258 jibri: fix variable names +* 807b7bf misc: working on unstable + +## stable-8960 + +Based on stable release 8960. + +* 5c5575c jibri: make some ffmpeg arguments configurable via env variables +* 09b0df4 misc: working on unstable + ## stable-8922-1 Based on stable release 8922-1. diff --git a/docker-compose.yml b/docker-compose.yml index c626fb9ac3..f88a4b8416 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.5' services: # Frontend web: - image: jitsi/web:${JITSI_IMAGE_VERSION:-stable-8922-1} + image: jitsi/web:${JITSI_IMAGE_VERSION:-stable-8960-1} restart: ${RESTART_POLICY:-unless-stopped} ports: - '${HTTP_PORT}:80' @@ -161,7 +161,7 @@ services: # XMPP server prosody: - image: jitsi/prosody:${JITSI_IMAGE_VERSION:-stable-8922-1} + image: jitsi/prosody:${JITSI_IMAGE_VERSION:-stable-8960-1} restart: ${RESTART_POLICY:-unless-stopped} expose: - '${XMPP_PORT:-5222}' @@ -264,7 +264,7 @@ services: # Focus component jicofo: - image: jitsi/jicofo:${JITSI_IMAGE_VERSION:-stable-8922-1} + image: jitsi/jicofo:${JITSI_IMAGE_VERSION:-stable-8960-1} restart: ${RESTART_POLICY:-unless-stopped} ports: - '127.0.0.1:${JICOFO_REST_PORT:-8888}:8888' @@ -334,7 +334,7 @@ services: # Video bridge jvb: - image: jitsi/jvb:${JITSI_IMAGE_VERSION:-stable-8922-1} + image: jitsi/jvb:${JITSI_IMAGE_VERSION:-stable-8960-1} restart: ${RESTART_POLICY:-unless-stopped} ports: - '${JVB_PORT:-10000}:${JVB_PORT:-10000}/udp' diff --git a/jibri.yml b/jibri.yml index dd62d1a0cd..a36ed3aa8f 100644 --- a/jibri.yml +++ b/jibri.yml @@ -2,7 +2,7 @@ version: '3.5' services: jibri: - image: jitsi/jibri:${JITSI_IMAGE_VERSION:-stable-8922-1} + image: jitsi/jibri:${JITSI_IMAGE_VERSION:-stable-8960-1} restart: ${RESTART_POLICY:-unless-stopped} volumes: - ${CONFIG}/jibri:/config:Z @@ -30,6 +30,11 @@ services: - JIBRI_HTTP_API_EXTERNAL_PORT - JIBRI_HTTP_API_INTERNAL_PORT - 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_XMPP_USER - JIBRI_XMPP_PASSWORD diff --git a/jibri/rootfs/defaults/jibri.conf b/jibri/rootfs/defaults/jibri.conf index 07eb4eb01a..5881d01bb9 100644 --- a/jibri/rootfs/defaults/jibri.conf +++ b/jibri/rootfs/defaults/jibri.conf @@ -2,6 +2,11 @@ {{ $JIBRI_RECORDER_USER := .Env.JIBRI_RECORDER_USER | default "recorder" -}} {{ $JIBRI_USAGE_TIMEOUT := .Env.JIBRI_USAGE_TIMEOUT | default "0" -}} {{ $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_SINGLE_USE_MODE := .Env.JIBRI_SINGLE_USE_MODE | default "false" -}} {{ $XMPP_AUTH_DOMAIN := .Env.XMPP_AUTH_DOMAIN | default "auth.meet.jitsi" -}} @@ -48,12 +53,12 @@ jibri { { // A user-friendly name for this environment name = "{{ $ENV.XMPP_ENV_NAME }}-{{$index}}" - + // A list of XMPP server hosts to which we'll connect - xmpp-server-hosts = [ + xmpp-server-hosts = [ "{{ $SERVER._0 }}" ] - + // The base XMPP domain xmpp-domain = "{{ $XMPP_DOMAIN }}" @@ -61,7 +66,7 @@ jibri { // An (optional) base url the Jibri will join if it is set base-url = "{{ $ENV.PUBLIC_URL }}" {{ end -}} - + // The MUC we'll join to announce our presence for // recording and streaming services control-muc { @@ -84,16 +89,16 @@ jibri { username = "{{ $JIBRI_RECORDER_USER }}" password = "{{ $ENV.JIBRI_RECORDER_PASSWORD }}" } - + // The value we'll strip from the room JID domain to derive // the call URL strip-from-room-domain = "{{ $JIBRI_STRIP_DOMAIN_JID }}." - + // How long Jibri sessions will be allowed to last before // they are stopped. A value of 0 allows them to go on // indefinitely usage-timeout = "{{ $JIBRI_USAGE_TIMEOUT }}" - + // Whether or not we'll automatically trust any cert on // this XMPP domain trust-all-xmpp-certs = {{ $XMPP_TRUST_ALL_CERTS }} @@ -118,6 +123,15 @@ jibri { audio-source = "pulse" // The audio device that will be used to capture audio on Linux 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 -}} @@ -136,31 +150,4 @@ jibri { port = {{ $STATSD_PORT }} } {{ end -}} - - call-status-checks { - {{ if .Env.NO_MEDIA_TIMEOUT -}} - // If all clients have their audio and video muted and if Jibri does not - // detect any data stream (audio or video) comming in, it will stop - // recording after NO_MEDIA_TIMEOUT expires. - no-media-timeout = {{ .Env.NO_MEDIA_TIMEOUT }} - {{ end -}} - - {{ if .Env.ALL_MUTED_TIMEOUT -}} - // If all clients have their audio and video muted, Jibri consideres this - // as an empty call and stops the recording after ALL_MUTED_TIMEOUT expires. - all-muted-timeout = {{ .Env.ALL_MUTED_TIMEOUT }} - {{ end -}} - - {{ if .Env.DEFAULT_CALL_EMPTY_TIMEOUT -}} - // When detecting if a call is empty, Jibri takes into consideration for how - // long the call has been empty already. If it has been empty for more than - // DEFAULT_CALL_EMPTY_TIMEOUT, it will consider it empty and stop the recording. - default-call-empty-timeout = {{ .Env.DEFAULT_CALL_EMPTY_TIMEOUT }} - {{ end -}} - - {{ if .Env.ICE_CONNECTION_TIMEOUT -}} - // If ICE hasn't completed, or stays in a state other than "connected" for this amount of time, Jibri will stop. - ice-connection-timeout = {{ .Env.ICE_CONNECTION_TIMEOUT }} - {{ end -}} - } } diff --git a/jigasi.yml b/jigasi.yml index 1744d07e83..dcdeb7d90e 100644 --- a/jigasi.yml +++ b/jigasi.yml @@ -3,7 +3,7 @@ version: '3.5' services: # SIP gateway (audio) jigasi: - image: jitsi/jigasi:${JITSI_IMAGE_VERSION:-stable-8922-1} + image: jitsi/jigasi:${JITSI_IMAGE_VERSION:-stable-8960-1} restart: ${RESTART_POLICY:-unless-stopped} ports: - '${JIGASI_PORT_MIN:-20000}-${JIGASI_PORT_MAX:-20050}:${JIGASI_PORT_MIN:-20000}-${JIGASI_PORT_MAX:-20050}/udp'