
Este repositorio ya no se mantiene. Use este repositorio https://github.com/wangsrgit119/janus-webrtc-gateway-docker para plantear problemas o PRS. Gracias.
https://www.useloom.com/share/325799006d6f4b64a6ce0662ca3f1d57
1. git clone https://github.com/atyenoria/janus-webrtc-gateway-docker.git && cd janus-webrtc-gateway-docker
2. make build
3. make run
4. star this repository after succeeding. Create the issue if you failed. We will help you as much as possible
Esta es una imagen Docker para Janus Webrtc Gateway. Janus Gateway todavía está en fase de desarrollo activo. Entonces, como dice los documentos oficiales, una modificación menor de las versiones de la biblioteca de middleware ocurre con frecuencia. Trato de lidiar con tal Cafa tanto como pueda. Si necesita alguna solicitud sobre este repositorio, gratuita para contactarme. Sobre los detalles de la configuración de esta imagen de Docker, debe leer los documentos oficiales https://janus.conf.meetecho.com/index.html cuidadosamente.
Con la última libnice, Janus Gateway parece ser una gran actuación. Este repositorio contiene este parche (ver https://gitlab.freedesktop.org/libnice/libnice/merge_requests/13) https://webrtchacks.com/sfu-load-testing/
(Lado derecho Janus Graph está disponible para esta imagen de Docker)
Creo que Janus es mejor para el seminario web (seminario web), y Jitsi es mejor para el sistema de conferencias web. La escalabilidad del puente de video Jitsi actual (20181007) es pobre debido a que no tiene un archivo de grabación local (no estoy seguro de esto ...). https://www.youtube.com/watch?v=ohhoqkkcjj0e jitsi ult-n + vp8 simulcasting tiene la muy buena actuación para la conferencia web https://jitsi.org/wp-content/uploads/2016/12/nossdaV2015lastn.pdf para el video, el videocrotor, la transmisión de jitus, es el registro de jitus, es un videocration, es un videocration, es un videocrat es para una videoconferencia mixta utilizando Chrome Headless + FFMPEG (ALSA, LibXCB). Desde estos puntos, Janus es adecuado para seminarios web, Jitsi es para la conferencia web. ¡Por supuesto, ambos WebRTC SFU son un trabajo increíble! Estoy usando ambos.
Usar iPerf, netperf
libsrtp version: 2.x
SSL/crypto library: BoringSSL
DTLS set-timeout: yes
Mutex implementation: GMutex (native futex on Linux)
DataChannels support: yes
Recordings post-processor: yes
TURN REST API client: yes
Doxygen documentation: no
Transports:
REST (HTTP/HTTPS): yes
WebSockets: yes
RabbitMQ: no
MQTT: no
Unix Sockets: no
Nanomsg: no
Plugins:
Echo Test: yes
Streaming: yes
Video Call: yes
SIP Gateway (Sofia): yes
SIP Gateway (libre): no
NoSIP (RTP Bridge): yes
Audio Bridge: yes
Video Room: yes
Voice Mail: yes
Record&Play: yes
Text Room: yes
Lua Interpreter: no
Duktape Interpreter: no
Event handlers:
Sample event handler: no
RabbitMQ event handler:no
MQTT event handler: no
JavaScript modules: no
IP=0.0.0.0
PORT=8888
/root/bin/ffmpeg -y -i "rtmp://$IP:80/rtmp_relay/$1 live=1" -c:v libx264 -profile:v main -s 640x480 -an -preset ultrafast -tune zerolatency -f rtp rtp://$IP:$PORT
Debe usar el complemento de transmisión de Janus
https://github.com/meetecho/janus-gateway/blob/8b388aebb0de3cfad3b25f940f61e48e308e604/plugins/janus_streaming.c
IP=0.0.0.0
PORT=8888
SDP_FILE=sdp.file
/root/bin/ffmpeg -analyzeduration 300M -probesize 300M -protocol_whitelist file,udp,rtp -i $SDP_FILE -c:v copy -c:a aac -ar 16k -ac 1 -preset ultrafast -tune zerolatency -f flv rtmp://$IP:$PORT/rtmp_relay/atyenoria
Para que el cuadro sea mucho más fácil, es útil establecer fir_freq = 1 en Janus conf
Debe usar Janus Video Room o AudioBridge Plugin
https://github.com/meetecho/janus-gateway/blob/8b3888ebb0de3ccfad3b25f940f61e48e308e604/plugins/janus_videoom.c
https://github.com/meetecho/janus-gateway/blob/8b3888ebb0de3ccfad3b25f940f61e48e308e604/plugins/janus_audiobridge.c
Después de publicar su feed en su habitación, debe usar RTP-Forward. El comando de muestra JavaScript es
# Input this in Google Chrome debug console. you must change publisher_id, room, video_port, host, secret for your conf.
var register = { "request" : "rtp_forward", "publisher_id": 3881836128186438, "room" : 1234, "video_port": 8050, "host" : "your ip address", "secret" : "unko" }
sfutest.send({"message": register});
`#{ffmpeg_path} -y
-ss #{member[0].ss_at_time} -t #{member[0].t_at_time} -i #{member[0].file_path} -ss #{member[1].ss_at_time} -t #{member[1].t_at_time} -i #{member[1].file_path}
-ss #{member[2].ss_at_time} -t #{member[2].t_at_time} -i #{member[2].file_path} -f lavfi -i "color=White"
-filter_complex "
nullsrc=size=640x480 [base];
[0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft];
[1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright];
[2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft];
[3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright];
[base][upperleft] overlay=shortest=1 [tmp1];
[tmp1][upperright] overlay=shortest=1:x=320 [tmp2];
[tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3];
[tmp3][lowerright] overlay=shortest=1:y=240:x=320;
[0:a][1:a][2:a] amerge=inputs=3
"
-preset ultrafast -r 30 -b:v 300k -c:v libx264 #{"/tmp/" + @conference["room_name"] + "/" + index.to_s + ".mp4"}`
server_names_hash_bucket_size 64;
server {
listen 443 ssl;
server_name temp;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED";
add_header Strict-Transport-Security "max-age=31536000";
ssl_certificate /usr/local/nginx/server.crt;
ssl_certificate_key /usr/local/nginx/server.key;
access_log /app/log/nginx_access.log ;
error_log /app/log/nginx_error.log debug;
location /janus {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_redirect off;
proxy_pass http://127.0.0.1:8188;
}
location /janus_http {
proxy_pass http://127.0.0.1:8078;
}
location /janus_admin {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:7188;
}
location /janus_admin_http {
proxy_pass http://127.0.0.1:7088;
}
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
}
}
Akinori Nakajima https://twitter.com/atyenori
Cualquiera bien recibió.