more updates march
This commit is contained in:
19
jitsi/jibri/rootfs/defaults/autoscaler-sidecar.config
Normal file
19
jitsi/jibri/rootfs/defaults/autoscaler-sidecar.config
Normal file
@@ -0,0 +1,19 @@
|
||||
{{ $JIBRI_HTTP_API_EXTERNAL_PORT := .Env.JIBRI_HTTP_API_EXTERNAL_PORT | default "2222" -}}
|
||||
{{ $SHUTDOWN_POLLING_INTERVAL := .Env.AUTOSCALER_SIDECAR_SHUTDOWN_POLLING_INTERVAL | default "60" -}}
|
||||
{{ $STATS_POLLING_INTERVAL := .Env.AUTOSCALER_SIDECAR_STATS_POLLING_INTERVAL | default "30" -}}
|
||||
export SHUTDOWN_POLLING_INTERVAL={{ $SHUTDOWN_POLLING_INTERVAL }}
|
||||
export STATS_POLLING_INTERVAL={{ $STATS_POLLING_INTERVAL }}
|
||||
export PORT={{ .Env.AUTOSCALER_SIDECAR_PORT }}
|
||||
export GRACEFUL_SHUTDOWN_SCRIPT="/opt/jitsi/jibri/wait_graceful_shutdown.sh"
|
||||
export TERMINATE_SCRIPT="/opt/jitsi/shutdown.sh"
|
||||
export ENABLE_REPORT_STATS=true
|
||||
export POLLING_URL="{{ .Env.AUTOSCALER_URL }}/sidecar/poll"
|
||||
export STATUS_URL="{{ .Env.AUTOSCALER_URL }}/sidecar/status"
|
||||
export SHUTDOWN_URL="{{ .Env.AUTOSCALER_URL }}/sidecar/shutdown"
|
||||
export STATS_RETRIEVE_URL="http://localhost:{{ $JIBRI_HTTP_API_EXTERNAL_PORT }}/jibri/api/v1.0/health"
|
||||
export STATS_REPORT_URL="{{ .Env.AUTOSCALER_URL }}/sidecar/stats"
|
||||
export ASAP_SIGNING_KEY_FILE="{{ .Env.AUTOSCALER_SIDECAR_KEY_FILE }}"
|
||||
export ASAP_JWT_KID="{{ .Env.AUTOSCALER_SIDECAR_KEY_ID }}"
|
||||
export INSTANCE_TYPE="jibri"
|
||||
export INSTANCE_ID="{{ .Env.AUTOSCALER_SIDECAR_INSTANCE_ID }}"
|
||||
export INSTANCE_METADATA='{"environment":"{{ .Env.XMPP_ENV_NAME }}","region":"{{ .Env.AUTOSCALER_SIDECAR_REGION }}","group":"{{ .Env.AUTOSCALER_SIDECAR_GROUP_NAME }}","name":"{{ .Env.JIBRI_INSTANCE_ID }}","version":"{{ .Env.JIBRI_VERSION }}","privateIp":"{{ .Env.LOCAL_ADDRESS }}","hostId":"{{ .Env.AUTOSCALER_SIDECAR_HOST_ID }}"}'
|
||||
96
jitsi/jibri/rootfs/defaults/jibri.conf
Normal file
96
jitsi/jibri/rootfs/defaults/jibri.conf
Normal file
@@ -0,0 +1,96 @@
|
||||
{{ $IGNORE_CERTIFICATE_ERRORS := .Env.IGNORE_CERTIFICATE_ERRORS | default "false" | toBool -}}
|
||||
{{ $ENABLE_PROMETHEUS := .Env.JIBRI_ENABLE_PROMETHEUS | default "false" | toBool -}}
|
||||
{{ $JIBRI_RECORDING_RESOLUTION := .Env.JIBRI_RECORDING_RESOLUTION | default "1280x720" -}}
|
||||
{{ $JIBRI_RECORDING_VIDEO_ENCODE_PRESET_RECORDING := .Env.JIBRI_RECORDING_VIDEO_ENCODE_PRESET_RECORDING | default "ultrafast" -}}
|
||||
{{ $JIBRI_RECORDING_VIDEO_ENCODE_PRESET_STREAMING := .Env.JIBRI_RECORDING_VIDEO_ENCODE_PRESET_STREAMING | 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 "2976k" -}}
|
||||
{{ $JIBRI_SINGLE_USE_MODE := .Env.JIBRI_SINGLE_USE_MODE | default "false" -}}
|
||||
{{ $STATSD_HOST := .Env.JIBRI_STATSD_HOST | default "localhost" -}}
|
||||
{{ $STATSD_PORT := .Env.JIBRI_STATSD_PORT | default "8125" -}}
|
||||
|
||||
jibri {
|
||||
// A unique identifier for this Jibri
|
||||
id = "{{ .Env.JIBRI_INSTANCE_ID }}"
|
||||
// Whether or not Jibri should return to idle state after handling
|
||||
// (successfully or unsuccessfully) a request. A value of 'true'
|
||||
// here means that a Jibri will NOT return back to the IDLE state
|
||||
// and will need to be restarted in order to be used again.
|
||||
single-use-mode = {{ $JIBRI_SINGLE_USE_MODE }}
|
||||
|
||||
api {
|
||||
{{ if or .Env.JIBRI_HTTP_API_EXTERNAL_PORT .Env.JIBRI_HTTP_API_INTERNAL_PORT -}}
|
||||
http {
|
||||
{{ if .Env.JIBRI_HTTP_API_EXTERNAL_PORT -}}
|
||||
external-api-port = {{ .Env.JIBRI_HTTP_API_EXTERNAL_PORT }}
|
||||
{{ end -}}
|
||||
{{ if .Env.JIBRI_HTTP_API_INTERNAL_PORT -}}
|
||||
internal-api-port = {{ .Env.JIBRI_HTTP_API_INTERNAL_PORT }}
|
||||
{{ end -}}
|
||||
}
|
||||
{{ end -}}
|
||||
}
|
||||
recording {
|
||||
recordings-directory = "{{ .Env.JIBRI_RECORDING_DIR | default "/config/recordings" }}"
|
||||
{{ if .Env.JIBRI_FINALIZE_RECORDING_SCRIPT_PATH -}}
|
||||
finalize-script = "{{ .Env.JIBRI_FINALIZE_RECORDING_SCRIPT_PATH }}"
|
||||
{{ end -}}
|
||||
}
|
||||
{{ if .Env.JIBRI_WEBHOOK_SUBSCRIBERS -}}
|
||||
webhook {
|
||||
subscribers = [{{ range $index, $element := (splitList "," .Env.JIBRI_WEBHOOK_SUBSCRIBERS | compact) }}{{ if gt $index 0}},{{ end }}"{{ $element }}"{{ end }}]
|
||||
}{{ end }}
|
||||
ffmpeg {
|
||||
resolution = "{{ $JIBRI_RECORDING_RESOLUTION }}"
|
||||
// The audio source that will be used to capture audio on Linux
|
||||
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-streaming = "{{ $JIBRI_RECORDING_VIDEO_ENCODE_PRESET_STREAMING }}"
|
||||
video-encode-preset-recording = "{{ $JIBRI_RECORDING_VIDEO_ENCODE_PRESET_RECORDING }}"
|
||||
|
||||
// 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 -}}
|
||||
chrome {
|
||||
// The flags which will be passed to chromium when launching
|
||||
flags = [
|
||||
"{{ join "\",\"" (splitList "," .Env.CHROMIUM_FLAGS | compact) }}"
|
||||
]
|
||||
}
|
||||
{{ else if $IGNORE_CERTIFICATE_ERRORS -}}
|
||||
chrome {
|
||||
flags = [
|
||||
"--use-fake-ui-for-media-stream",
|
||||
"--start-maximized",
|
||||
"--kiosk",
|
||||
"--enabled",
|
||||
"--autoplay-policy=no-user-gesture-required",
|
||||
"--ignore-certificate-errors"
|
||||
]
|
||||
}
|
||||
{{ end -}}
|
||||
|
||||
stats {
|
||||
{{- if .Env.ENABLE_STATS_D }}
|
||||
enable-stats-d = {{ .Env.ENABLE_STATS_D }}
|
||||
host = "{{ $STATSD_HOST }}"
|
||||
port = {{ $STATSD_PORT }}
|
||||
{{- end }}
|
||||
prometheus.enabled = {{ $ENABLE_PROMETHEUS }}
|
||||
}
|
||||
}
|
||||
|
||||
include "xmpp.conf"
|
||||
|
||||
include "/config/custom-jibri.conf"
|
||||
33
jitsi/jibri/rootfs/defaults/logging.properties
Normal file
33
jitsi/jibri/rootfs/defaults/logging.properties
Normal file
@@ -0,0 +1,33 @@
|
||||
handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
|
||||
|
||||
org.jitsi.utils.logging2.JitsiLogFormatter.programname=Jibri
|
||||
|
||||
java.util.logging.FileHandler.level = FINE
|
||||
java.util.logging.FileHandler.pattern = /config/logs/log.%g.txt
|
||||
java.util.logging.FileHandler.formatter = org.jitsi.utils.logging2.JitsiLogFormatter
|
||||
java.util.logging.FileHandler.count = 10
|
||||
java.util.logging.FileHandler.limit = 10000000
|
||||
|
||||
org.jitsi.jibri.capture.ffmpeg.util.FfmpegFileHandler.level = FINE
|
||||
org.jitsi.jibri.capture.ffmpeg.util.FfmpegFileHandler.pattern = /config/logs/ffmpeg.%g.txt
|
||||
org.jitsi.jibri.capture.ffmpeg.util.FfmpegFileHandler.formatter = org.jitsi.utils.logging2.JitsiLogFormatter
|
||||
org.jitsi.jibri.capture.ffmpeg.util.FfmpegFileHandler.count = 10
|
||||
org.jitsi.jibri.capture.ffmpeg.util.FfmpegFileHandler.limit = 10000000
|
||||
|
||||
org.jitsi.jibri.sipgateway.pjsua.util.PjsuaFileHandler.level = FINE
|
||||
org.jitsi.jibri.sipgateway.pjsua.util.PjsuaFileHandler.pattern = /config/logs/pjsua.%g.txt
|
||||
org.jitsi.jibri.sipgateway.pjsua.util.PjsuaFileHandler.formatter = org.jitsi.utils.logging2.JitsiLogFormatter
|
||||
org.jitsi.jibri.sipgateway.pjsua.util.PjsuaFileHandler.count = 10
|
||||
org.jitsi.jibri.sipgateway.pjsua.util.PjsuaFileHandler.limit = 10000000
|
||||
|
||||
org.jitsi.jibri.selenium.util.BrowserFileHandler.level = FINE
|
||||
org.jitsi.jibri.selenium.util.BrowserFileHandler.pattern = /config/logs/browser.%g.txt
|
||||
org.jitsi.jibri.selenium.util.BrowserFileHandler.formatter = org.jitsi.utils.logging2.JitsiLogFormatter
|
||||
org.jitsi.jibri.selenium.util.BrowserFileHandler.count = 10
|
||||
org.jitsi.jibri.selenium.util.BrowserFileHandler.limit = 10000000
|
||||
|
||||
java.util.logging.ConsoleHandler.level = FINE
|
||||
java.util.logging.ConsoleHandler.formatter = org.jitsi.utils.logging2.JitsiLogFormatter
|
||||
|
||||
org.jitsi.level = FINE
|
||||
org.glassfish.level = INFO
|
||||
77
jitsi/jibri/rootfs/defaults/xmpp.conf
Normal file
77
jitsi/jibri/rootfs/defaults/xmpp.conf
Normal file
@@ -0,0 +1,77 @@
|
||||
{{ $JIBRI_BREWERY_MUC := .Env.JIBRI_BREWERY_MUC | default "jibribrewery" -}}
|
||||
{{ $XMPP_MUC_DOMAIN := .Env.XMPP_MUC_DOMAIN | default "muc.meet.jitsi" -}}
|
||||
{{ $XMPP_MUC_DOMAIN_PREFIX := (split "." $XMPP_MUC_DOMAIN)._0 -}}
|
||||
{{ $JIBRI_STRIP_DOMAIN_JID := .Env.JIBRI_STRIP_DOMAIN_JID | default $XMPP_MUC_DOMAIN_PREFIX -}}
|
||||
{{ $JIBRI_RECORDER_USER := .Env.JIBRI_RECORDER_USER | default "recorder" -}}
|
||||
{{ $JIBRI_USAGE_TIMEOUT := .Env.JIBRI_USAGE_TIMEOUT | default "0" -}}
|
||||
{{ $JIBRI_XMPP_USER := .Env.JIBRI_XMPP_USER | default "jibri" -}}
|
||||
{{ $XMPP_AUTH_DOMAIN := .Env.XMPP_AUTH_DOMAIN | default "auth.meet.jitsi" -}}
|
||||
{{ $XMPP_DOMAIN := .Env.XMPP_DOMAIN | default "meet.jitsi" -}}
|
||||
{{ $XMPP_INTERNAL_MUC_DOMAIN := .Env.XMPP_INTERNAL_MUC_DOMAIN | default "internal-muc.meet.jitsi" -}}
|
||||
{{ $XMPP_HIDDEN_DOMAIN := .Env.XMPP_HIDDEN_DOMAIN | default "hidden.meet.jitsi" -}}
|
||||
{{ $XMPP_TRUST_ALL_CERTS := .Env.XMPP_TRUST_ALL_CERTS | default "true" | toBool -}}
|
||||
{{ $XMPP_PORT := .Env.XMPP_PORT | default "5222" -}}
|
||||
{{ $XMPP_SERVER := .Env.XMPP_SERVER | default "xmpp.meet.jitsi" -}}
|
||||
{{ $XMPP_SERVERS := splitList "," $XMPP_SERVER | compact -}}
|
||||
{{/* assign env from context, preserve during range when . is re-assigned */}}
|
||||
{{ $ENV := .Env -}}
|
||||
|
||||
jibri.api.xmpp.environments = [
|
||||
// See example_xmpp_envs.conf for an example of what is expected here
|
||||
{{ range $index, $element := $XMPP_SERVERS -}}
|
||||
{{ $SERVER := splitn ":" 2 $element }}
|
||||
{
|
||||
// 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 = [
|
||||
"{{ $SERVER._0 }}"
|
||||
]
|
||||
|
||||
// The base XMPP domain
|
||||
xmpp-domain = "{{ $XMPP_DOMAIN }}"
|
||||
|
||||
{{ if $ENV.PUBLIC_URL -}}
|
||||
// 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 {
|
||||
domain = "{{ $XMPP_INTERNAL_MUC_DOMAIN }}"
|
||||
room-name = "{{ $JIBRI_BREWERY_MUC }}"
|
||||
nickname = "{{ $ENV.JIBRI_INSTANCE_ID }}"
|
||||
}
|
||||
|
||||
// The login information for the control MUC
|
||||
control-login {
|
||||
domain = "{{ $XMPP_AUTH_DOMAIN }}"
|
||||
port = "{{ $SERVER._1 | default $XMPP_PORT }}"
|
||||
username = "{{ $JIBRI_XMPP_USER }}"
|
||||
password = "{{ $ENV.JIBRI_XMPP_PASSWORD }}"
|
||||
}
|
||||
|
||||
// The login information the selenium web client will use
|
||||
call-login {
|
||||
domain = "{{ $XMPP_HIDDEN_DOMAIN }}"
|
||||
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 }}
|
||||
}
|
||||
{{ end }}
|
||||
]
|
||||
122
jitsi/jibri/rootfs/defaults/xorg-video-dummy.conf
Normal file
122
jitsi/jibri/rootfs/defaults/xorg-video-dummy.conf
Normal file
@@ -0,0 +1,122 @@
|
||||
{{ $JIBRI_RECORDING_RESOLUTION := .Env.JIBRI_RECORDING_RESOLUTION | default "1280x720" -}}
|
||||
{{ $JIBRI_HORIZ_SYNC := .Env.JIBRI_XORG_HORIZ_SYNC | default "5.0 - 1000.0" -}}
|
||||
{{ $JIBRI_VERT_REFRESH := .Env.JIBRI_XORG_VERT_REFRESH | default "5.0 - 200.0" -}}
|
||||
|
||||
# This xorg configuration file is meant to be used by xpra
|
||||
# to start a dummy X11 server.
|
||||
# For details, please see:
|
||||
# https://xpra.org/Xdummy.html
|
||||
|
||||
Section "ServerFlags"
|
||||
Option "DontVTSwitch" "true"
|
||||
Option "AllowMouseOpenFail" "true"
|
||||
Option "PciForceNone" "true"
|
||||
Option "AutoEnableDevices" "false"
|
||||
Option "AutoAddDevices" "false"
|
||||
EndSection
|
||||
|
||||
Section "Device"
|
||||
Identifier "dummy_videocard"
|
||||
Driver "dummy"
|
||||
Option "ConstantDPI" "true"
|
||||
#VideoRam 4096000
|
||||
#VideoRam 256000
|
||||
VideoRam 192000
|
||||
EndSection
|
||||
|
||||
Section "Monitor"
|
||||
Identifier "dummy_monitor"
|
||||
HorizSync {{ $JIBRI_HORIZ_SYNC }}
|
||||
VertRefresh {{ $JIBRI_VERT_REFRESH }}
|
||||
#This can be used to get a specific DPI, but only for the default resolution:
|
||||
#DisplaySize 508 317
|
||||
#NOTE: the highest modes will not work without increasing the VideoRam
|
||||
# for the dummy video card.
|
||||
Modeline "32768x32768" 15226.50 32768 35800 39488 46208 32768 32771 32781 32953
|
||||
Modeline "32768x16384" 7516.25 32768 35544 39192 45616 16384 16387 16397 16478
|
||||
Modeline "16384x8192" 2101.93 16384 16416 24400 24432 8192 8390 8403 8602
|
||||
Modeline "8192x4096" 424.46 8192 8224 9832 9864 4096 4195 4202 4301
|
||||
Modeline "5496x1200" 199.13 5496 5528 6280 6312 1200 1228 1233 1261
|
||||
Modeline "5280x1080" 169.96 5280 5312 5952 5984 1080 1105 1110 1135
|
||||
Modeline "5280x1200" 191.40 5280 5312 6032 6064 1200 1228 1233 1261
|
||||
Modeline "5120x3200" 199.75 5120 5152 5904 5936 3200 3277 3283 3361
|
||||
Modeline "4800x1200" 64.42 4800 4832 5072 5104 1200 1229 1231 1261
|
||||
Modeline "3840x2880" 133.43 3840 3872 4376 4408 2880 2950 2955 3025
|
||||
Modeline "3840x2560" 116.93 3840 3872 4312 4344 2560 2622 2627 2689
|
||||
Modeline "3840x2048" 91.45 3840 3872 4216 4248 2048 2097 2101 2151
|
||||
Modeline "3840x1080" 100.38 3840 3848 4216 4592 1080 1081 1084 1093
|
||||
Modeline "3600x1200" 106.06 3600 3632 3984 4368 1200 1201 1204 1214
|
||||
Modeline "3288x1080" 39.76 3288 3320 3464 3496 1080 1106 1108 1135
|
||||
Modeline "2048x2048" 49.47 2048 2080 2264 2296 2048 2097 2101 2151
|
||||
Modeline "2048x1536" 80.06 2048 2104 2312 2576 1536 1537 1540 1554
|
||||
Modeline "2560x1600" 47.12 2560 2592 2768 2800 1600 1639 1642 1681
|
||||
Modeline "2560x1440" 42.12 2560 2592 2752 2784 1440 1475 1478 1513
|
||||
Modeline "1920x1440" 69.47 1920 1960 2152 2384 1440 1441 1444 1457
|
||||
Modeline "1920x1200" 26.28 1920 1952 2048 2080 1200 1229 1231 1261
|
||||
Modeline "1920x1080" 23.53 1920 1952 2040 2072 1080 1106 1108 1135
|
||||
Modeline "1680x1050" 20.08 1680 1712 1784 1816 1050 1075 1077 1103
|
||||
Modeline "1600x1200" 22.04 1600 1632 1712 1744 1200 1229 1231 1261
|
||||
Modeline "1600x900" 33.92 1600 1632 1760 1792 900 921 924 946
|
||||
Modeline "1440x900" 30.66 1440 1472 1584 1616 900 921 924 946
|
||||
ModeLine "1366x768" 72.00 1366 1414 1446 1494 768 771 777 803
|
||||
Modeline "1280x1024" 31.50 1280 1312 1424 1456 1024 1048 1052 1076
|
||||
Modeline "1280x800" 24.15 1280 1312 1400 1432 800 819 822 841
|
||||
Modeline "1280x768" 23.11 1280 1312 1392 1424 768 786 789 807
|
||||
Modeline "1360x768" 24.49 1360 1392 1480 1512 768 786 789 807
|
||||
Modeline "1024x768" 18.71 1024 1056 1120 1152 768 786 789 807
|
||||
Modeline "768x1024" 19.50 768 800 872 904 1024 1048 1052 1076
|
||||
|
||||
|
||||
#common resolutions for android devices (both orientations):
|
||||
Modeline "800x1280" 25.89 800 832 928 960 1280 1310 1315 1345
|
||||
Modeline "1280x800" 24.15 1280 1312 1400 1432 800 819 822 841
|
||||
Modeline "720x1280" 30.22 720 752 864 896 1280 1309 1315 1345
|
||||
Modeline "1280x720" 27.41 1280 1312 1416 1448 720 737 740 757
|
||||
Modeline "768x1024" 24.93 768 800 888 920 1024 1047 1052 1076
|
||||
Modeline "1024x768" 23.77 1024 1056 1144 1176 768 785 789 807
|
||||
Modeline "600x1024" 19.90 600 632 704 736 1024 1047 1052 1076
|
||||
Modeline "1024x600" 18.26 1024 1056 1120 1152 600 614 617 631
|
||||
Modeline "536x960" 16.74 536 568 624 656 960 982 986 1009
|
||||
Modeline "960x536" 15.23 960 992 1048 1080 536 548 551 563
|
||||
Modeline "600x800" 15.17 600 632 688 720 800 818 822 841
|
||||
Modeline "800x600" 14.50 800 832 880 912 600 614 617 631
|
||||
Modeline "480x854" 13.34 480 512 560 592 854 873 877 897
|
||||
Modeline "848x480" 12.09 848 880 920 952 480 491 493 505
|
||||
Modeline "480x800" 12.43 480 512 552 584 800 818 822 841
|
||||
Modeline "800x480" 11.46 800 832 872 904 480 491 493 505
|
||||
#resolutions for android devices (both orientations)
|
||||
#minus the status bar
|
||||
#38px status bar (and width rounded up)
|
||||
Modeline "800x1242" 25.03 800 832 920 952 1242 1271 1275 1305
|
||||
Modeline "1280x762" 22.93 1280 1312 1392 1424 762 780 783 801
|
||||
Modeline "720x1242" 29.20 720 752 856 888 1242 1271 1276 1305
|
||||
Modeline "1280x682" 25.85 1280 1312 1408 1440 682 698 701 717
|
||||
Modeline "768x986" 23.90 768 800 888 920 986 1009 1013 1036
|
||||
Modeline "1024x730" 22.50 1024 1056 1136 1168 730 747 750 767
|
||||
Modeline "600x986" 19.07 600 632 704 736 986 1009 1013 1036
|
||||
Modeline "1024x562" 17.03 1024 1056 1120 1152 562 575 578 591
|
||||
Modeline "536x922" 16.01 536 568 624 656 922 943 947 969
|
||||
Modeline "960x498" 14.09 960 992 1040 1072 498 509 511 523
|
||||
Modeline "600x762" 14.39 600 632 680 712 762 779 783 801
|
||||
Modeline "800x562" 13.52 800 832 880 912 562 575 578 591
|
||||
Modeline "480x810" 12.59 480 512 552 584 810 828 832 851
|
||||
Modeline "848x442" 11.09 848 880 920 952 442 452 454 465
|
||||
Modeline "480x762" 11.79 480 512 552 584 762 779 783 801
|
||||
EndSection
|
||||
|
||||
Section "Screen"
|
||||
Identifier "dummy_screen"
|
||||
Device "dummy_videocard"
|
||||
Monitor "dummy_monitor"
|
||||
DefaultDepth 24
|
||||
SubSection "Display"
|
||||
Viewport 0 0
|
||||
Depth 24
|
||||
Modes {{ $JIBRI_RECORDING_RESOLUTION | quote }}
|
||||
EndSubSection
|
||||
EndSection
|
||||
|
||||
Section "ServerLayout"
|
||||
Identifier "dummy_layout"
|
||||
Screen "dummy_screen"
|
||||
EndSection
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"CommandLineFlagSecurityWarningsEnabled": false
|
||||
}
|
||||
93
jitsi/jibri/rootfs/etc/cont-init.d/10-config
Normal file
93
jitsi/jibri/rootfs/etc/cont-init.d/10-config
Normal file
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
# Check if the SYS_ADMIN cap is set
|
||||
if ! capsh --has-p=cap_sys_admin; then
|
||||
echo "Required capability SYS_ADMIN is missing"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if /dev/shm is large enough (2GB at least)
|
||||
if ! shm-check; then
|
||||
echo "/dev/shm must be at least 2GB in size"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z $JIBRI_RECORDER_PASSWORD || -z $JIBRI_XMPP_PASSWORD ]]; then
|
||||
echo 'FATAL ERROR: Jibri recorder password and auth password must be set'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OLD_JIBRI_RECORDER_PASSWORD=passw0rd
|
||||
if [[ "$JIBRI_RECORDER_PASSWORD" == "$OLD_JIBRI_RECORDER_PASSWORD" ]]; then
|
||||
echo 'FATAL ERROR: Jibri recorder password must be changed, check the README'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OLD_JIBRI_XMPP_PASSWORD=passw0rd
|
||||
if [[ "$JIBRI_XMPP_PASSWORD" == "$OLD_JIBRI_XMPP_PASSWORD" ]]; then
|
||||
echo 'FATAL ERROR: Jibri auth password must be changed, check the README'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# DISPLAY is necessary for start
|
||||
[ -z "${DISPLAY}" ] \
|
||||
&& ( echo -e "\e[31mERROR: Please set DISPLAY variable.\e[39m"; kill 1; exit 1 )
|
||||
|
||||
# script for finalizing must have executing bit.
|
||||
[ ! -z "${JIBRI_FINALIZE_RECORDING_SCRIPT_PATH}" ] \
|
||||
&& [ -f "${JIBRI_FINALIZE_RECORDING_SCRIPT_PATH}" ] \
|
||||
&& [ ! -x "${JIBRI_FINALIZE_RECORDING_SCRIPT_PATH}" ] \
|
||||
&& chmod +x ${JIBRI_FINALIZE_RECORDING_SCRIPT_PATH}
|
||||
|
||||
# set random jibri nickname for the instance if is not set
|
||||
[ -z "${JIBRI_INSTANCE_ID}" ] && export JIBRI_INSTANCE_ID="jibri-$(date +%N)"
|
||||
|
||||
# check for AUTOSCALER_URL, AUTOSCALER_SIDECAR_KEY_FILE and AUTOSCALER_SIDECAR_KEY_ID as indicator that sidecar should be enabled
|
||||
if [ -n "$AUTOSCALER_URL" ]; then
|
||||
if [ -z "$AUTOSCALER_SIDECAR_KEY_FILE" ]; then
|
||||
export AUTOSCALER_SIDECAR_KEY_FILE="/etc/jitsi/autoscaler-sidecar/asap.pem"
|
||||
fi
|
||||
if [ -z "$AUTOSCALER_SIDECAR_KEY_ID" ]; then
|
||||
# assume key id is equal to the base real path of the key file minus .pem
|
||||
export AUTOSCALER_SIDECAR_KEY_ID="$(basename "$(realpath "$AUTOSCALER_SIDECAR_KEY_FILE")" | tr -d '.pem')"
|
||||
fi
|
||||
|
||||
if [ -f "$AUTOSCALER_SIDECAR_KEY_FILE" ]; then
|
||||
echo "AUTOSCALER_URL found, enabling autoscaler sidecar"
|
||||
|
||||
export JIBRI_VERSION="$(dpkg -s jibri | grep Version | awk '{print $2}' | sed 's/..$//')"
|
||||
|
||||
[ -z "$AUTOSCALER_SIDECAR_PORT" ] && export AUTOSCALER_SIDECAR_PORT="6000"
|
||||
[ -z "$JIBRI_WEBHOOK_SUBSCRIBERS" ] && export JIBRI_WEBHOOK_SUBSCRIBERS="http://localhost:$AUTOSCALER_SIDECAR_PORT/hook"
|
||||
[ -z "$AUTOSCALER_SIDECAR_INSTANCE_ID" ] && export AUTOSCALER_SIDECAR_INSTANCE_ID="$JIBRI_INSTANCE_ID"
|
||||
[ -z "$AUTOSCALER_SIDECAR_REGION" ] && export AUTOSCALER_SIDECAR_REGION="docker"
|
||||
[ -z "$AUTOSCALER_SIDECAR_GROUP_NAME" ] && export AUTOSCALER_SIDECAR_GROUP_NAME="docker-jibri"
|
||||
[ -z "$LOCAL_ADDRESS" ] && export LOCAL_ADDRESS="$(ip route get 1 | grep -oP '(?<=src ).*' | awk '{ print $1 '})"
|
||||
|
||||
mkdir -p /etc/jitsi/autoscaler-sidecar
|
||||
tpl /defaults/autoscaler-sidecar.config > /etc/jitsi/autoscaler-sidecar/config
|
||||
else
|
||||
echo "No key file at $AUTOSCALER_SIDECAR_KEY_FILE, leaving autoscaler sidecar disabled"
|
||||
fi
|
||||
else
|
||||
echo "No AUTOSCALER_URL defined, leaving autoscaler sidecar disabled"
|
||||
fi
|
||||
|
||||
# maintain backward compatibility with older variable
|
||||
[ -z "${XMPP_HIDDEN_DOMAIN}" ] && export XMPP_HIDDEN_DOMAIN="$XMPP_RECORDER_DOMAIN"
|
||||
|
||||
# always recreate configs
|
||||
tpl /defaults/jibri.conf > /etc/jitsi/jibri/jibri.conf
|
||||
tpl /defaults/xmpp.conf > /etc/jitsi/jibri/xmpp.conf
|
||||
tpl /defaults/logging.properties > /etc/jitsi/jibri/logging.properties
|
||||
tpl /defaults/xorg-video-dummy.conf > /etc/jitsi/jibri/xorg-video-dummy.conf
|
||||
|
||||
# make recording dir
|
||||
[ -z "${JIBRI_RECORDING_DIR}" ] && export JIBRI_RECORDING_DIR=/config/recordings
|
||||
mkdir -p ${JIBRI_RECORDING_DIR}
|
||||
chown -R jibri ${JIBRI_RECORDING_DIR}
|
||||
|
||||
# make logs dir
|
||||
JIBRI_LOGS_DIR=/config/logs
|
||||
mkdir -p ${JIBRI_LOGS_DIR}
|
||||
chown -R jibri ${JIBRI_LOGS_DIR}
|
||||
2
jitsi/jibri/rootfs/etc/fix-attrs.d/10-jibri
Normal file
2
jitsi/jibri/rootfs/etc/fix-attrs.d/10-jibri
Normal file
@@ -0,0 +1,2 @@
|
||||
/home/jibri/.config true jibri 0640 0750
|
||||
/home/jibri false jibri 0640 0750
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"CommandLineFlagSecurityWarningsEnabled": false
|
||||
}
|
||||
65
jitsi/jibri/rootfs/etc/pulse/default.pa
Normal file
65
jitsi/jibri/rootfs/etc/pulse/default.pa
Normal file
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/pulseaudio -nF
|
||||
#
|
||||
# This file is part of PulseAudio.
|
||||
#
|
||||
# PulseAudio is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# PulseAudio is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# This startup script is used only if PulseAudio is started per-user
|
||||
# (i.e. not in system mode)
|
||||
|
||||
# Customized for Jibri
|
||||
|
||||
.fail
|
||||
|
||||
### Automatically restore the volume of streams and devices
|
||||
load-module module-device-restore
|
||||
load-module module-stream-restore
|
||||
load-module module-card-restore
|
||||
|
||||
### Automatically augment property information from .desktop files
|
||||
### stored in /usr/share/application
|
||||
load-module module-augment-properties
|
||||
|
||||
### Should be after module-*-restore but before module-*-detect
|
||||
load-module module-switch-on-port-available
|
||||
|
||||
### Load several protocols
|
||||
load-module module-native-protocol-unix
|
||||
|
||||
### Automatically restore the default sink/source when changed by the user
|
||||
### during runtime
|
||||
### NOTE: This should be loaded as early as possible so that subsequent modules
|
||||
### that look up the default sink/source get the right value
|
||||
load-module module-default-device-restore
|
||||
|
||||
### Make sure we always have a sink around, even if it is a null sink.
|
||||
load-module module-always-sink
|
||||
|
||||
### Honour intended role device property
|
||||
load-module module-intended-roles
|
||||
|
||||
### Automatically suspend sinks/sources that become idle for too long
|
||||
load-module module-suspend-on-idle
|
||||
|
||||
### If autoexit on idle is enabled we want to make sure we only quit
|
||||
### when no local session needs us anymore.
|
||||
#.ifexists module-console-kit.so
|
||||
#load-module module-console-kit
|
||||
#.endif
|
||||
#.ifexists module-systemd-login.so
|
||||
#load-module module-systemd-login
|
||||
#.endif
|
||||
|
||||
### Enable positioned event sounds
|
||||
load-module module-position-event-sounds
|
||||
5
jitsi/jibri/rootfs/etc/services.d/10-xorg/run
Normal file
5
jitsi/jibri/rootfs/etc/services.d/10-xorg/run
Normal file
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
DAEMON="/usr/bin/Xorg -nocursor -noreset +extension RANDR +extension RENDER -logfile /tmp/xorg.log -config /etc/jitsi/jibri/xorg-video-dummy.conf ${DISPLAY}"
|
||||
exec s6-setuidgid jibri /bin/bash -c "exec $DAEMON"
|
||||
|
||||
5
jitsi/jibri/rootfs/etc/services.d/20-icewm/run
Normal file
5
jitsi/jibri/rootfs/etc/services.d/20-icewm/run
Normal file
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
DAEMON="/usr/bin/icewm-session"
|
||||
exec s6-setuidgid jibri /bin/bash -c "exec $DAEMON"
|
||||
|
||||
4
jitsi/jibri/rootfs/etc/services.d/30-pulse/run
Normal file
4
jitsi/jibri/rootfs/etc/services.d/30-pulse/run
Normal file
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
HOME=/home/jibri
|
||||
exec s6-setuidgid jibri /bin/bash -c "exec /usr/bin/pulseaudio"
|
||||
9
jitsi/jibri/rootfs/etc/services.d/40-jibri/finish
Executable file
9
jitsi/jibri/rootfs/etc/services.d/40-jibri/finish
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
# When jibri is shutdown (or gracefully shutdown), it exits with code 255.
|
||||
# In this case, we don't want S6 to restart the service. We want to stop all
|
||||
# services and shutdown the container.
|
||||
|
||||
if [[ $1 -eq 255 ]]; then
|
||||
s6-svscanctl -t /var/run/s6/services
|
||||
fi
|
||||
12
jitsi/jibri/rootfs/etc/services.d/40-jibri/run
Normal file
12
jitsi/jibri/rootfs/etc/services.d/40-jibri/run
Normal file
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
# we have to set it, otherwise chrome won't find ~/.asoundrc file
|
||||
HOME=/home/jibri
|
||||
|
||||
DAEMON=/opt/jitsi/jibri/launch.sh
|
||||
CHROME_BIN_PATH="$(which google-chrome)"
|
||||
[ $? -ne 0 ] && CHROME_BIN_PATH="$(which chromium)"
|
||||
# pre-warm google chrome before jibri launches to ensure fast chrome launch during recordings
|
||||
[ -n "$CHROME_BIN_PATH" ] && s6-setuidgid jibri $CHROME_BIN_PATH --timeout=1000 --headless about:blank
|
||||
exec s6-setuidgid jibri /bin/bash -c "exec $DAEMON"
|
||||
|
||||
10
jitsi/jibri/rootfs/etc/services.d/50-autoscaler-sidecar/run
Normal file
10
jitsi/jibri/rootfs/etc/services.d/50-autoscaler-sidecar/run
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
if [[ -n "$AUTOSCALER_URL" ]] && [[ -f "/etc/jitsi/autoscaler-sidecar/config" ]]; then
|
||||
DAEMON="/usr/bin/node /usr/share/jitsi-autoscaler-sidecar/app.js"
|
||||
exec s6-setuidgid autoscaler-sidecar /bin/bash -c ". /etc/jitsi/autoscaler-sidecar/config && exec $DAEMON"
|
||||
else
|
||||
# if autoscaler-sidecar should not be started,
|
||||
# prevent s6 from restarting this script again and again
|
||||
s6-svc -O /var/run/s6/services/50-autoscaler-sidecar
|
||||
fi
|
||||
1
jitsi/jibri/rootfs/home/jibri/.config/pulse/client.conf
Normal file
1
jitsi/jibri/rootfs/home/jibri/.config/pulse/client.conf
Normal file
@@ -0,0 +1 @@
|
||||
autospawn = no
|
||||
9
jitsi/jibri/rootfs/home/jibri/.config/pulse/daemon.conf
Normal file
9
jitsi/jibri/rootfs/home/jibri/.config/pulse/daemon.conf
Normal file
@@ -0,0 +1,9 @@
|
||||
daemonize = no
|
||||
high-priority = no
|
||||
realtime-scheduling = yes
|
||||
realtime-priority = 5
|
||||
exit-idle-time = -1
|
||||
flat-volumes = no
|
||||
deferred-volume-safety-margin-usec = 1
|
||||
log-level = info
|
||||
log-target = file:/config/logs/pulse.log
|
||||
8
jitsi/jibri/rootfs/home/jibri/.config/pulse/default.pa
Normal file
8
jitsi/jibri/rootfs/home/jibri/.config/pulse/default.pa
Normal file
@@ -0,0 +1,8 @@
|
||||
.include /etc/pulse/default.pa
|
||||
|
||||
# Load the virtual sink and set it as default
|
||||
load-module module-virtual-sink sink_name=jibri-loop
|
||||
set-default-sink jibri-loop
|
||||
|
||||
# set the monitor of the jibri-loop sink to be the default source
|
||||
set-default-source jibri-loop.monitor
|
||||
11
jitsi/jibri/rootfs/opt/jitsi/shutdown.sh
Executable file
11
jitsi/jibri/rootfs/opt/jitsi/shutdown.sh
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
# notify the sidecar of imminent shutdown
|
||||
PORT=${AUTOSCALER_SIDECAR_PORT:-6000}
|
||||
curl -d '{}' -v 0:$PORT/hook/v1/shutdown
|
||||
sleep 10
|
||||
|
||||
# signal jibri to shutdown via rest api
|
||||
/opt/jitsi/jibri/shutdown.sh
|
||||
|
||||
# shutdown everything else
|
||||
s6-svscanctl -t /var/run/s6/services
|
||||
43
jitsi/jibri/rootfs/usr/bin/install-chrome.sh
Executable file
43
jitsi/jibri/rootfs/usr/bin/install-chrome.sh
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -o pipefail -xeu
|
||||
|
||||
dpkgArch="$(dpkg --print-architecture)"
|
||||
|
||||
if [ "${USE_CHROMIUM}" = 1 -o "${dpkgArch##*-}" = "arm64" ]; then
|
||||
echo "Using Debian's Chromium"
|
||||
apt-dpkg-wrap apt-get install -y chromium chromium-driver chromium-sandbox
|
||||
chromium --version
|
||||
else
|
||||
if [ "${CHROME_RELEASE}" = "latest" ]; then
|
||||
wget -qO - https://dl-ssl.google.com/linux/linux_signing_key.pub | gpg --dearmour > /etc/apt/trusted.gpg.d/google.gpg
|
||||
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
|
||||
apt-dpkg-wrap apt-get update
|
||||
apt-dpkg-wrap apt-get install -y google-chrome-stable
|
||||
else
|
||||
CHROME_DEB="/tmp/google-chrome-stable_${CHROME_RELEASE}-1_amd64.deb"
|
||||
curl -4so ${CHROME_DEB} "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_RELEASE}-1_amd64.deb"
|
||||
apt-dpkg-wrap apt-get install -y ${CHROME_DEB}
|
||||
rm -f ${CHROME_DEB}
|
||||
fi
|
||||
|
||||
google-chrome --version
|
||||
|
||||
BASE_URL=https://googlechromelabs.github.io/chrome-for-testing
|
||||
|
||||
if [ "${CHROME_RELEASE}" = "latest" ]; then
|
||||
CHROMEDRIVER_RELEASE="$(curl -4Ls ${BASE_URL}/LATEST_RELEASE_STABLE)"
|
||||
else
|
||||
CHROMEDRIVER_MAJOR_RELEASE=$(echo $CHROME_RELEASE | cut -d. -f1)
|
||||
CHROMEDRIVER_RELEASE="$(curl -4Ls ${BASE_URL}/LATEST_RELEASE_${CHROMEDRIVER_MAJOR_RELEASE})"
|
||||
fi
|
||||
|
||||
CHROMEDRIVER_ZIP="/tmp/chromedriver_linux64.zip"
|
||||
curl -4Lso ${CHROMEDRIVER_ZIP} "https://storage.googleapis.com/chrome-for-testing-public/${CHROMEDRIVER_RELEASE}/linux64/chromedriver-linux64.zip"
|
||||
unzip ${CHROMEDRIVER_ZIP} -d /tmp/
|
||||
mv /tmp/chromedriver-linux64/chromedriver /usr/bin/
|
||||
chmod +x /usr/bin/chromedriver
|
||||
rm -rf /tmp/chromedriver*
|
||||
fi
|
||||
|
||||
chromedriver --version
|
||||
Reference in New Issue
Block a user