forked from extern/docker
separate bbb-webrtc-sfu
This commit is contained in:
parent
0d388be4ff
commit
c66e89fa14
13
Dockerfile
13
Dockerfile
@ -18,7 +18,7 @@ RUN apt-get update \
|
|||||||
|
|
||||||
# -- Install Dependencies
|
# -- Install Dependencies
|
||||||
RUN apt-get install -y wget apt-transport-https curl mlocate strace iputils-ping telnet tcpdump vim htop \
|
RUN apt-get install -y wget apt-transport-https curl mlocate strace iputils-ping telnet tcpdump vim htop \
|
||||||
tidy libreoffice sudo netcat-openbsd net-tools penjdk-8-jre perl build-essential \
|
tidy libreoffice sudo netcat-openbsd net-tools openjdk-8-jre perl build-essential \
|
||||||
ruby rake unzip xmlstarlet rsync tomcat7 yq equivs
|
ruby rake unzip xmlstarlet rsync tomcat7 yq equivs
|
||||||
|
|
||||||
|
|
||||||
@ -47,6 +47,9 @@ RUN equivs-control redis-server.control \
|
|||||||
&& equivs-control kurento-media-server.control \
|
&& equivs-control kurento-media-server.control \
|
||||||
&& sed -i 's/<package name; defaults to equivs-dummy>/kurento-media-server/g' kurento-media-server.control \
|
&& sed -i 's/<package name; defaults to equivs-dummy>/kurento-media-server/g' kurento-media-server.control \
|
||||||
&& equivs-build kurento-media-server.control \
|
&& equivs-build kurento-media-server.control \
|
||||||
|
&& equivs-control bbb-webrtc-sfu.control \
|
||||||
|
&& sed -i 's/<package name; defaults to equivs-dummy>/bbb-webrtc-sfu/g' bbb-webrtc-sfu.control \
|
||||||
|
&& equivs-build bbb-webrtc-sfu.control \
|
||||||
&& dpkg -i /*.deb \
|
&& dpkg -i /*.deb \
|
||||||
&& rm /*.deb
|
&& rm /*.deb
|
||||||
|
|
||||||
@ -56,6 +59,7 @@ COPY dummy/dummy.service /etc/systemd/system/nginx.service
|
|||||||
COPY dummy/dummy.service /etc/systemd/system/redis.service
|
COPY dummy/dummy.service /etc/systemd/system/redis.service
|
||||||
COPY dummy/dummy.service /etc/systemd/system/redis-server.service
|
COPY dummy/dummy.service /etc/systemd/system/redis-server.service
|
||||||
COPY dummy/dummy.service /etc/systemd/system/kurento-media-server.service
|
COPY dummy/dummy.service /etc/systemd/system/kurento-media-server.service
|
||||||
|
COPY dummy/dummy.service /etc/systemd/system/bbb-webrtc-sfu.service
|
||||||
|
|
||||||
RUN apt-get install -y nodejs
|
RUN apt-get install -y nodejs
|
||||||
|
|
||||||
@ -68,10 +72,11 @@ RUN apt-get install -y bbb-web bbb-record-core bbb-playback-presentation bbb-fre
|
|||||||
bbb-fsesl-akka bbb-apps-akka bbb-transcode-akka bbb-apps bbb-apps-sip \
|
bbb-fsesl-akka bbb-apps-akka bbb-transcode-akka bbb-apps bbb-apps-sip \
|
||||||
bbb-apps-video bbb-apps-screenshare bbb-apps-video-broadcast
|
bbb-apps-video bbb-apps-screenshare bbb-apps-video-broadcast
|
||||||
|
|
||||||
RUN mkdir -p /etc/nginx/sites-enabled
|
RUN mkdir -p /etc/nginx/sites-enabled /var/kurento
|
||||||
RUN apt-get install -y bbb-html5 bbb-config bbb-client bbb-webrtc-sfu
|
|
||||||
|
RUN apt-get install -y bbb-html5 bbb-config
|
||||||
RUN apt-get install -y mongodb-org
|
RUN apt-get install -y mongodb-org
|
||||||
RUN apt-get install -y bbb-demo
|
# RUN apt-get install -y bbb-demo
|
||||||
|
|
||||||
|
|
||||||
# -- Disable unneeded services
|
# -- Disable unneeded services
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
version: '3.6'
|
version: '3.6'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
bbb:
|
base:
|
||||||
image: bbb
|
image: bbb
|
||||||
hostname: meet.livingutopia.org
|
hostname: meet.livingutopia.org
|
||||||
cap_add:
|
cap_add:
|
||||||
@ -27,6 +27,9 @@ services:
|
|||||||
|
|
||||||
nginx:
|
nginx:
|
||||||
image: nginx:1.17
|
image: nginx:1.17
|
||||||
|
depends_on:
|
||||||
|
- etherpad
|
||||||
|
- webrtc-sfu
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
volumes:
|
volumes:
|
||||||
@ -39,6 +42,8 @@ services:
|
|||||||
|
|
||||||
etherpad:
|
etherpad:
|
||||||
image: etherpad/etherpad:1.8.0
|
image: etherpad/etherpad:1.8.0
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
environment:
|
environment:
|
||||||
ETHERPAD_API_KEY: ${ETHERPAD_API_KEY}
|
ETHERPAD_API_KEY: ${ETHERPAD_API_KEY}
|
||||||
volumes:
|
volumes:
|
||||||
@ -59,8 +64,6 @@ services:
|
|||||||
|
|
||||||
kurento:
|
kurento:
|
||||||
image: kurento/kurento-media-server:6.13
|
image: kurento/kurento-media-server:6.13
|
||||||
# ports:
|
|
||||||
# # - "127.0.0.1:8889:8888"
|
|
||||||
environment:
|
environment:
|
||||||
KMS_STUN_IP: 64.233.177.127 # google stun server
|
KMS_STUN_IP: 64.233.177.127 # google stun server
|
||||||
KMS_STUN_PORT: 19302
|
KMS_STUN_PORT: 19302
|
||||||
@ -68,10 +71,31 @@ services:
|
|||||||
KMS_MAX_PORT: 32768
|
KMS_MAX_PORT: 32768
|
||||||
KMS_EXTERNAL_ADDRESS:
|
KMS_EXTERNAL_ADDRESS:
|
||||||
KMS_TURN_URL:
|
KMS_TURN_URL:
|
||||||
networks:
|
network_mode: host
|
||||||
bluenet:
|
|
||||||
ipv4_address: 10.7.7.6
|
|
||||||
|
|
||||||
|
webrtc-sfu:
|
||||||
|
build: ./bbb-webrtc-sfu
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
- kurento
|
||||||
|
- base
|
||||||
|
environment:
|
||||||
|
CLIENT_HOST: 0.0.0.0
|
||||||
|
KURENTO_NAME: kurento
|
||||||
|
REDIS_HOST: redis
|
||||||
|
FREESWITCH_IP: host.docker.internal
|
||||||
|
FREESWITCH_SIP_IP: 144.76.97.34
|
||||||
|
ESL_IP: host.docker.internal
|
||||||
|
LOG_LEVEL: debug
|
||||||
|
NODE_CONFIG: '{"kurento":[{"ip":"144.76.97.34","url":"ws://kurento:8888/kurento"}]}'
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:3008:3008"
|
||||||
|
extra_hosts:
|
||||||
|
- host.docker.internal:10.7.7.1
|
||||||
|
- kurento:10.7.7.1
|
||||||
|
networks:
|
||||||
|
- bluenet
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
bluenet:
|
bluenet:
|
||||||
ipam:
|
ipam:
|
||||||
|
@ -1,218 +0,0 @@
|
|||||||
kurento:
|
|
||||||
- ip: 144.76.97.34
|
|
||||||
url: ws://10.7.7.6:8888/kurento
|
|
||||||
# mediaType: (main|audio|content)
|
|
||||||
ipClassMappings:
|
|
||||||
local:
|
|
||||||
private:
|
|
||||||
public:
|
|
||||||
options:
|
|
||||||
failAfter: 5
|
|
||||||
request_timeout: 30000
|
|
||||||
response_timeout: 30000
|
|
||||||
# Number of attemps of connecting to the configured kurento instances the first
|
|
||||||
# time. Infinity means it tries forever until it's able to connect. Default is 10.
|
|
||||||
kurentoStartupRetries: 10
|
|
||||||
# balancing-strategy: can be either ROUND_ROBIN or MEDIA_TYPE. The MEDIA_TYPE only
|
|
||||||
# works properly if you annotated the configured kurento instances in the
|
|
||||||
# 'kurento' config parameter with a mediaType field (main|audio|content) which
|
|
||||||
# will specify what will each server handle. Default is ROUND_ROBIN
|
|
||||||
balancing-strategy: ROUND_ROBIN
|
|
||||||
video-transposing-ceiling: 50
|
|
||||||
audio-transposing-ceiling: 100
|
|
||||||
localIpAddress: 172.17.0.2
|
|
||||||
acceptSelfSignedCertificate: false
|
|
||||||
redisHost: 10.7.7.5
|
|
||||||
redisPort: "6379"
|
|
||||||
# Uncomment to set a password if Redis requires auth.
|
|
||||||
# redisPassword: foobared
|
|
||||||
clientPort: "3008"
|
|
||||||
minVideoPort: 30000
|
|
||||||
maxVideoPort: 33000
|
|
||||||
mediaFlowTimeoutDuration: 15000
|
|
||||||
mediaStateTimeoutDuration: 30000
|
|
||||||
from-screenshare: from-screenshare-sfu
|
|
||||||
to-screenshare: to-screenshare-sfu
|
|
||||||
from-video: from-video-sfu
|
|
||||||
to-video: to-video-sfu
|
|
||||||
from-audio: from-audio-sfu
|
|
||||||
to-audio: to-audio-sfu
|
|
||||||
to-akka: to-akka-apps-redis-channel
|
|
||||||
from-akka: from-akka-apps-redis-channel
|
|
||||||
to-stream: to-sfu-redis-channel
|
|
||||||
from-stream: from-stream-sfu
|
|
||||||
to-html5: to-html5-redis-channel
|
|
||||||
common-message-version: 2.x
|
|
||||||
screenshareKeyframeInterval: 0
|
|
||||||
screenshareEnableFlashRTPBridge: false
|
|
||||||
screenshareSubscriberSpecSlave: false
|
|
||||||
videoSubscriberSpecSlave: false
|
|
||||||
recordScreenSharing: true
|
|
||||||
recordWebcams: true
|
|
||||||
recordingBasePath: file:///var/kurento
|
|
||||||
recordingMediaProfile: WEBM_VIDEO_ONLY
|
|
||||||
recordingFormat: webm
|
|
||||||
redisExpireTime: 1209600 # 14 days as per the akka keys
|
|
||||||
# mcs-core entrypoint configured on nginx
|
|
||||||
mcs-path: /mcs
|
|
||||||
mcs-port: 3010
|
|
||||||
mcs-address: localhost
|
|
||||||
mcs-ws-timeout: 30000
|
|
||||||
freeswitch:
|
|
||||||
ip: 172.17.0.2
|
|
||||||
sip_ip: 144.76.97.34
|
|
||||||
port: 5066
|
|
||||||
esl_ip: 127.0.0.1
|
|
||||||
esl_port: 8021
|
|
||||||
handleExternalConnections: false
|
|
||||||
ipClassMappings:
|
|
||||||
local:
|
|
||||||
private:
|
|
||||||
public:
|
|
||||||
log:
|
|
||||||
filename: /var/log/bbb-webrtc-sfu/bbb-webrtc-sfu.log
|
|
||||||
level: verbose
|
|
||||||
bbb-stream:
|
|
||||||
image_name: bbb-stream
|
|
||||||
container_type: docker
|
|
||||||
bigbluebutton_url: BBBHOST
|
|
||||||
bigbluebutton_secret: BBBSECRET
|
|
||||||
bot_name: BBBBOTNAME
|
|
||||||
bot_join_options:
|
|
||||||
userdata-html5autoswaplayout: false
|
|
||||||
userdata-html5hidepresentation: false
|
|
||||||
bot: true
|
|
||||||
joinViaHtml5: true
|
|
||||||
gop:
|
|
||||||
rnp: 5
|
|
||||||
youtube: 12
|
|
||||||
rtmp: 12
|
|
||||||
k8s:
|
|
||||||
namespace: default
|
|
||||||
template:
|
|
||||||
apiVersion: batch/v1
|
|
||||||
kind: Job
|
|
||||||
metadata:
|
|
||||||
name: bbb-stream-
|
|
||||||
spec:
|
|
||||||
template:
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: bbb-stream-firefox
|
|
||||||
image: gcr.io/PROJECT-ID/bbb-stream
|
|
||||||
env:
|
|
||||||
- name: LINK
|
|
||||||
value: ""
|
|
||||||
- name: OUTPUT
|
|
||||||
value: ""
|
|
||||||
- name: "RTMP"
|
|
||||||
value: "rtmp"
|
|
||||||
- name: "GOP"
|
|
||||||
value: ""
|
|
||||||
restartPolicy: OnFailure
|
|
||||||
backoffLimit: 0
|
|
||||||
rnp:
|
|
||||||
oauth2:
|
|
||||||
client_id: client_id
|
|
||||||
client_secret: client_secret
|
|
||||||
redirect_uri: redirect_uri
|
|
||||||
host_ip: 0.0.0.0
|
|
||||||
base_url: videornpurl
|
|
||||||
processes:
|
|
||||||
- path: ./lib/mcs-core/process.js
|
|
||||||
- path: ./lib/screenshare/ScreenshareProcess
|
|
||||||
- path: ./lib/video/VideoProcess.js
|
|
||||||
- path: ./lib/audio/AudioProcess.js
|
|
||||||
# media-server-adapters: path could refer to a npm module
|
|
||||||
media-server-adapters:
|
|
||||||
- path: kurento/kurento.js
|
|
||||||
name: Kurento
|
|
||||||
- path: freeswitch/freeswitch.js
|
|
||||||
name: Freeswitch
|
|
||||||
# strategies: path could refer to a npm module
|
|
||||||
strategies:
|
|
||||||
#- path: ./voice-switching-handler.js
|
|
||||||
# name: VOICE_SWITCHING
|
|
||||||
|
|
||||||
# Codec values (codec_video_main, codec_video_content, codec_audio):
|
|
||||||
# it'll force the specified codec.
|
|
||||||
# Put the 'ANY' value to prevent forcing a specific codec without the _priority options.
|
|
||||||
# For the 'ANY' option, there's a trio of optional configuration where you are
|
|
||||||
# able to specify the priority codec to force in a lenient way (codec_*_priority).
|
|
||||||
# If codec_*_priority is undefined or not found in the media description,
|
|
||||||
# no specific codec will be forced (base ANY behaviour).
|
|
||||||
# If the priority codec is found in the media description, any codec
|
|
||||||
# that doesn't match it will be filtered out (ie it will act as if the priority
|
|
||||||
# codec was forced).
|
|
||||||
# If you wanna add other codecs (e.g.: VP9)
|
|
||||||
# add it to the list with its specifiers. If the codec isn't in the list,
|
|
||||||
# it'll default to the specifier values in codec_*_priority OR VP8,
|
|
||||||
# but still force the entered codec option.
|
|
||||||
# P.S.: _video_main refers to webcam/main video content, _video_content refers to
|
|
||||||
# screenshare/content:slides streams.
|
|
||||||
conference-media-specs:
|
|
||||||
codec_video_main: VP8
|
|
||||||
codec_video_main_priority: VP8
|
|
||||||
codec_video_content: VP8
|
|
||||||
codec_video_content_priority: VP8
|
|
||||||
codec_audio: ANY
|
|
||||||
codec_audio_priority: OPUS
|
|
||||||
H264:
|
|
||||||
profile_level_id: "42e01f"
|
|
||||||
packetization_mode: "1"
|
|
||||||
level_asymmetry_allowed: "1"
|
|
||||||
tias_main: "300000"
|
|
||||||
as_main: "300"
|
|
||||||
tias_content: "1500000"
|
|
||||||
as_content: "1500"
|
|
||||||
max_mbps_main: "0"
|
|
||||||
max_fs_main: "0"
|
|
||||||
max_br_main: "0"
|
|
||||||
max_mbps_content: "0"
|
|
||||||
max_fs_content: "12288"
|
|
||||||
max_br_content: "0"
|
|
||||||
VP8:
|
|
||||||
tias_main: "300000"
|
|
||||||
as_main: "300"
|
|
||||||
tias_content: "1500000"
|
|
||||||
as_content: "1500"
|
|
||||||
OPUS:
|
|
||||||
useinbandfec: "1"
|
|
||||||
maxaveragebitrate: "30000"
|
|
||||||
maxplaybackrate: "48000"
|
|
||||||
ptime: "20"
|
|
||||||
minptime: "10"
|
|
||||||
maxptime: "40"
|
|
||||||
kurentoRembParams:
|
|
||||||
rembOnConnect: 300
|
|
||||||
upLosses: 12
|
|
||||||
decrementFactor: 0.5
|
|
||||||
thresholdFactor: 0.8
|
|
||||||
# kurentoAllowedCandidateIps: optional configuration. List of VALID IPs to be used
|
|
||||||
# to define valid outbound ICE candidates.
|
|
||||||
# This is a short-term optimization to reduce the number of candidates sent to
|
|
||||||
# the client by filtering out anything that isn't in this list
|
|
||||||
kurentoAllowedCandidateIps:
|
|
||||||
#- <ipv4|ipv6>
|
|
||||||
# mediaThresholds: mandatory configuration. Establishes type-agnostic media thresholds
|
|
||||||
# that when hit will make the server refuse to negotiate new medias.
|
|
||||||
# Any attemps to inject medias past the thresholds will return an error with code
|
|
||||||
# 2002 and message MEDIA_SERVER_NO_RESOURCES.
|
|
||||||
# The threshold priority order is global -> perRoom -> perUser. Value 0 means unlimited
|
|
||||||
# (default). An optional API parameter may be sent on pub/sub calls (ignoreThresholds)
|
|
||||||
# to make the media ignore the configured thresholds. This is used here for recording
|
|
||||||
# and audio medias.
|
|
||||||
mediaThresholds:
|
|
||||||
global: 0
|
|
||||||
perRoom: 0
|
|
||||||
perUser: 0
|
|
||||||
# Whether to append a timestamp to akka-app's message envelopes
|
|
||||||
addTimestampToAkkaMessages: true
|
|
||||||
# Whether to allow duplicate externalUserId's on join. If allowed, join requests with
|
|
||||||
# a externalUserId specified in the optional parameters will associate the new connection
|
|
||||||
# with a pre-existing user (if it exists), or create a new one.
|
|
||||||
# This will create a new virtual link between the request
|
|
||||||
# and the pre-existing user with a unique internal user ID. The user will be
|
|
||||||
# cleared from the system when a leave call for it is sent OR it has the autoLeave
|
|
||||||
# optional parameter set to true and all of its medias were cleared
|
|
||||||
allowDuplicateExtUserId: true
|
|
@ -1,5 +1,5 @@
|
|||||||
location /bbb-webrtc-sfu {
|
location /bbb-webrtc-sfu {
|
||||||
proxy_pass http://host.docker.internal:3008;
|
proxy_pass http://webrtc-sfu:3008;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
proxy_set_header Connection "Upgrade";
|
proxy_set_header Connection "Upgrade";
|
||||||
|
Loading…
Reference in New Issue
Block a user