Skip to content
Console

jitsi

Pull remote tracks from a Jitsi meeting using Jitsi as a Service or your own deployment.

Product links: jitsi.org · JaaS · lib-jitsi-meet API

Terminal window
curl -X POST "https://api.avflow.dev/v1/jobs" \
-H "Authorization: Bearer ${AVFLOW_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "jitsi-ingest",
"sources": [{
"name": "conf_src",
"type": "jitsi",
"config": {
"domain": "meet.jit.si",
"roomName": "MyRoomABC123",
"select": { "mediaTypes": ["video", "audio"] }
}
}],
"nodes": [],
"sinks": [{
"name": "rtmp_out",
"type": "rtmp_push",
"inputs": ["conf_src"],
"config": {
"urls": ["rtmp://live.example.com/app/key"],
"encoding": { "videoCodec": "h264", "audioCodec": "aac" }
}
}]
}'
FieldTypeRequiredDescription
domainstringYesJitsi deployment host (e.g. 8x8.vc for JaaS, meet.jit.si for public). Used for connection / MUC defaults when connectionOptions is omitted — not for loading the SDK.
roomNamestringYesConference room name.
tokenstringNoJWT for secured rooms (JaaS).
appIdstringNoJaaS application ID.
xmppIdstringNoXMPP login JID. A recorder account on the deployment’s hiddenDomain (e.g. recorder@recorder.meet.example.com) is hidden from other jitsi-meet clients. Must be set with xmppPassword.
xmppPasswordstringNoPassword for xmppId.
connectionOptionsobjectNoOverride XMPP hosts and BOSH/WebSocket URLs when they are not conference.<domain> / wss://<domain>/xmpp-websocket.
conferenceOptionsobjectNoSubscriber session settings: p2p, channelLastN, hiddenDomain, videoQuality.
selectSelectFilterNoParticipant / track filters.

Standard Jitsi deployments need only domain and roomName. Use connectionOptions when the public host differs from the XMPP virtual host (docker-jitsi, split MUC, BOSH-only).

{
"domain": "meet.example.com",
"roomName": "MyRoom",
"connectionOptions": {
"hosts": {
"domain": "meet.jitsi",
"muc": "muc.meet.jitsi",
"focus": "focus.meet.jitsi"
},
"serviceUrl": "wss://meet.example.com/xmpp-websocket?room=MyRoom",
"bosh": "https://meet.example.com/http-bind"
}
}
KeyMeaning
hosts.domainXMPP virtual host (can differ from config.domain)
hosts.mucMUC domain
hosts.focusJicofo JID
serviceUrlXMPP WebSocket URL
boshBOSH URL (https://…/http-bind). Used when serviceUrl is omitted

If you set hosts, include domain, muc, and focus together — the object replaces the defaults rather than merging field by field.

conferenceOptions configures how this subscriber receives media. Local-device flags such as startSilent / startAudioMuted have no effect: a source does not publish a microphone.

KeyTypeWhat it does
p2p.enabledbooleanDirect peer connection when the room has exactly two participants. Set false to stay on the Jitsi Videobridge.
channelLastNnumberHow many remote videos to receive (-1 = all).
hiddenDomainstringTreat occupants on this XMPP domain as hidden.
videoQuality.codecPreferenceOrderstring[]Preferred receive codecs, e.g. ["vp8", "vp9"].
{
"conferenceOptions": {
"p2p": { "enabled": false },
"channelLastN": -1
}
}

On a self-hosted Jitsi with Jibri’s hidden domain, authenticate as that recorder account so other clients do not show this source in the participant UI. The WebSocket still connects to domain; xmppId is only the XMPP login:

{
"name": "conf_src",
"type": "jitsi",
"config": {
"domain": "meet.example.com",
"roomName": "MyRoomABC123",
"xmppId": "recorder@recorder.meet.example.com",
"xmppPassword": "<recorder-password>"
}
}

This needs a Prosody virtual host matching config.hiddenDomain in jitsi-meet (the same call-login account Jibri uses). JaaS and meet.jit.si do not give customers those credentials, so JWT join stays visible. Both the Chrome and native pipelines honor xmppId / xmppPassword.

RTC video source tier. Source pricing.