Hi Team,
I have followed @Freddie 's Tutorial: TUTORIAL - How to Install the NEW JIBRI
I have also looked briefly into: TUTORIAL: Jibri Overview, Troubleshooting Tips & Tricks - Solve your Jibri Problems, Quickly! - #316 by newDevPer
But I am still getting the below error :
Recording failed to start
Recording failed. Please try again.
Can someone please help me in resolving it?
Console output:
jibri.conf
jibri {
// A unique identifier for this Jibri
// TODO: eventually this will be required with no default
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 = false
api {
http {
external-api-port = 2222
internal-api-port = 3333
}
xmpp {
// See example_xmpp_envs.conf for an example of what is expected here
environments = [
{
name = "prod environment"
xmpp-server-hosts = ["meet.jitsi.com"]
xmpp-domain = "meet.jitsi.com"
control-muc {
domain = "internal.auth.meet.jitsi.com"
room-name = "JibriBrewery"
nickname = "jibri-nickname"
}
control-login {
domain = "auth.meet.jitsi.com"
username = "jibri"
password = "YOURSECRET3"
}
call-login {
domain = "recorder.meet.jitsi.com"
username = "recorder"
password = "YOURSECRET3"
}
strip-from-room-domain = "conference."
usage-timeout = 0
trust-all-xmpp-certs = true
}
]
}
}
recording {
recordings-directory = "/srv/recordings"
# TODO: make this an optional param and remove the default
finalize-script = "/srv/recordings2"
}
streaming {
// A list of regex patterns for allowed RTMP URLs. The RTMP URL used
// when starting a stream must match at least one of the patterns in
// this list.
rtmp-allow-list = [
// By default, all services are allowed
".*"
]
}
ffmpeg {
resolution = "1920x1080"
// The audio source that will be used to capture audio on Linux
audio-source = "alsa"
// The audio device that will be used to capture audio on Linux
audio-device = "plug:bsnoop"
}
chrome {
// The flags which will be passed to chromium when launching
flags = [
"--use-fake-ui-for-media-stream",
"--start-maximized",
"--kiosk",
"--enabled",
"--disable-infobars",
"--autoplay-policy=no-user-gesture-required"
]
}
stats {
enable-stats-d = true
}
webhook {
// A list of subscribers interested in receiving webhook events
subscribers = []
}
jwt-info {
// The path to a .pem file which will be used to sign JWT tokens used in webhook
// requests. If not set, no JWT will be added to webhook requests.
# signing-key-path = "/path/to/key.pem"
// The kid to use as part of the JWT
# kid = "key-id"
// The issuer of the JWT
# issuer = "issuer"
// The audience of the JWT
# audience = "audience"
// The TTL of each generated JWT. Can't be less than 10 minutes.
# ttl = 1 hour
}
call-status-checks {
// 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 = 30 seconds
// 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 = 10 minutes
// 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 = 30 seconds
}
}
jicofo.conf:
# Jicofo HOCON configuration. See reference.conf in /usr/share/jicofo/jicofo.jar for
#available options, syntax, and default values.
jicofo {
xmpp: {
client: {
client-proxy: "focus.meet.jitsi.com"
xmpp-domain: "meet.jitsi.com"
domain: "auth.meet.jitsi.com"
username: "focus"
password: "iF8nXLyINQ28eBBz"
}
trusted-domains: [ "recorder.meet.jitsi.com" ]
}
bridge: {
brewery-jid: "JvbBrewery@internal.auth.meet.jitsi.com"
}
}
jicofo.sctp.enabled=false
jibri: {
brewery-jid = "JibriBrewery@internal.auth.meet.jitsi.com"
pending-timeout = 90
}
/etc/prosody/conf.avail/meet.jitsi.com.cfg.lua:
plugin_paths = { "/usr/share/jitsi-meet/prosody-plugins/" }
-- domain mapper options, must at least have domain base set to use the mapper
muc_mapper_domain_base = "meet.jitsi.com";
external_service_secret = "x9Tjt4ZfHY9fDW04";
external_services = {
{ type = "stun", host = "meet.jitsi.com", port = 3478 },
{ type = "turn", host = "meet.jitsi.com", port = 3478, transport = "udp", secret = true, ttl = 86400, algorithm = "turn" },
{ type = "turns", host = "meet.jitsi.com", port = 5349, transport = "tcp", secret = true, ttl = 86400, algorithm = "turn" }
};
cross_domain_bosh = false;
consider_bosh_secure = true;
-- https_ports = { }; -- Remove this line to prevent listening on port 5284
-- by default prosody 0.12 sends cors headers, if you want to disable it uncomment the following (the config is available on 0.12.1)
--http_cors_override = {
-- bosh = {
-- enabled = false;
-- };
-- websocket = {
-- enabled = false;
-- };
--}
-- https://ssl-config.mozilla.org/#server=haproxy&version=2.1&config=intermediate&openssl=1.1.0g&guideline=5.4
ssl = {
protocol = "tlsv1_2+";
ciphers = "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"
}
unlimited_jids = {
"focus@auth.meet.jitsi.com",
"jvb@auth.meet.jitsi.com"
}
VirtualHost "meet.jitsi.com"
authentication = "jitsi-anonymous" -- do not delete me
-- Properties below are modified by jitsi-meet-tokens package config
-- and authentication above is switched to "token"
--app_id="example_app_id"
--app_secret="example_app_secret"
-- Assign this host a certificate for TLS, otherwise it would use the one
-- set in the global section (if any).
-- Note that old-style SSL on port 5223 only supports one certificate, and will always
-- use the global one.
ssl = {
key = "/etc/prosody/certs/meet.jitsi.com.key";
certificate = "/etc/prosody/certs/meet.jitsi.com.crt";
}
av_moderation_component = "avmoderation.meet.jitsi.com"
speakerstats_component = "speakerstats.meet.jitsi.com"
conference_duration_component = "conferenceduration.meet.jitsi.com"
end_conference_component = "endconference.meet.jitsi.com"
-- we need bosh
modules_enabled = {
"bosh";
"pubsub";
"ping"; -- Enable mod_ping
"speakerstats";
"external_services";
"conference_duration";
"end_conference";
"muc_lobby_rooms";
"muc_breakout_rooms";
"av_moderation";
"room_metadata";
}
c2s_require_encryption = false
lobby_muc = "lobby.meet.jitsi.com"
breakout_rooms_muc = "breakout.meet.jitsi.com"
room_metadata_component = "metadata.meet.jitsi.com"
main_muc = "conference.meet.jitsi.com"
-- muc_lobby_whitelist = { "recorder.meet.jitsi.com" } -- Here we can whitelist jibri to enter lobby enabled rooms
Component "conference.meet.jitsi.com" "muc"
restrict_room_creation = true
storage = "memory"
modules_enabled = {
"muc_meeting_id";
"muc_domain_mapper";
"polls";
--"token_verification";
"muc_rate_limit";
}
admins = { "focus@auth.meet.jitsi.com" }
muc_room_locking = false
muc_room_default_public_jids = true
Component "breakout.meet.jitsi.com" "muc"
restrict_room_creation = true
storage = "memory"
modules_enabled = {
"muc_meeting_id";
"muc_domain_mapper";
"muc_rate_limit";
"polls";
}
admins = { "focus@auth.meet.jitsi.com" }
muc_room_locking = false
muc_room_default_public_jids = true
-- internal muc component
Component "internal.auth.meet.jitsi.com" "muc"
storage = "memory"
modules_enabled = {
"ping";
}
admins = { "focus@auth.meet.jitsi.com", "jvb@auth.meet.jitsi.com" }
muc_room_locking = false
muc_room_default_public_jids = true
-- muc_room_cache_size = 1000
VirtualHost "auth.meet.jitsi.com"
ssl = {
key = "/etc/prosody/certs/auth.meet.jitsi.com.key";
certificate = "/etc/prosody/certs/auth.meet.jitsi.com.crt";
}
modules_enabled = {
"limits_exception";
}
authentication = "internal_hashed"
-- Proxy to jicofo's user JID, so that it doesn't have to register as a component.
Component "focus.meet.jitsi.com" "client_proxy"
target_address = "focus@auth.meet.jitsi.com"
Component "speakerstats.meet.jitsi.com" "speakerstats_component"
muc_component = "conference.meet.jitsi.com"
Component "conferenceduration.meet.jitsi.com" "conference_duration_component"
muc_component = "conference.meet.jitsi.com"
Component "endconference.meet.jitsi.com" "end_conference"
muc_component = "conference.meet.jitsi.com"
Component "avmoderation.meet.jitsi.com" "av_moderation_component"
muc_component = "conference.meet.jitsi.com"
Component "lobby.meet.jitsi.com" "muc"
storage = "memory"
restrict_room_creation = true
muc_room_locking = false
muc_room_default_public_jids = true
modules_enabled = {
"muc_rate_limit";
"polls";
}
Component "metadata.meet.jitsi.com" "room_metadata_component"
muc_component = "conference.meet.jitsi.com"
breakout_rooms_component = "breakout.meet.jitsi.com"
-- internal muc component, meant to enable pools of jibri and jigasi clients
Component "internal.auth.meet.jitsi.com" "muc"
modules_enabled = {
"ping";
}
storage = "memory"
muc_room_cache_size = 1000
VirtualHost "recorder.meet.jitsi.com"
modules_enabled = {
"ping";
}
authentication = "internal_plain"