
이 repo는 더 이상 유지 관리되지 않습니다. 이 저장소 https://github.com/wangsrgit119/janus-webrtc-gateway-docker를 사용하여 문제 나 PR을 제기하십시오. 감사해요.
https://www.useloom.com/share/32579006d6f4b64a6ce0662ca3f1d57
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
Janus Webrtc 게이트웨이의 Docker 이미지입니다. 야누스 게이트웨이는 여전히 활발한 개발 단계에 있습니다. 따라서 공식 문서에서 말했듯이 미들웨어 라이브러리 버전의 약간의 수정이 자주 발생합니다. 나는 가능한 한 많이 그런 차를 다루려고 노력합니다. 이 저장소에 대한 요청이 필요한 경우 저에게 연락하십시오. 이 Docker 이미지에 대한 설정 세부 사항에 대해 공식 문서 https://janus.conf.meetecho.com/index.html을주의 깊게 읽어야합니다.
최신 Libnice를 사용하면 Janus Gateway는 훌륭한 성능으로 보입니다. 이 repo는이 패치가 포함되어 있습니다 (https://gitlab.freedesktop.org/libnice/libnice/merge_requests/13) https://webrtchacks.com/sfu-load-testing/ 참조.
(오른쪽 야누스 그래프는이 도커 이미지에 사용할 수 있습니다)
Janus는 Webinar (웹 세미나)에 더 좋으며 Jitsi는 웹 컨퍼런스 시스템에 더 좋습니다. 현재 Jitsi Video Bridge (20181007)의 확장 성은 로컬 녹음 파일이 없기 때문에 열악합니다 (이는 확실하지 않습니다.). https://www.youtube.com/watch?v=OHHOQKCJJ0E JITSI LAST-N + VP8 SIMULCASTING은 웹 컨퍼런스 https://jitsi.org/wp-content/uploads/12/nossdav2015lastn.pdf 비디오 형식, jits it is the vidue streeting is the video street is the videogne Chrome Headlesss + FFMPEG (ALSA, LIBXCB)를 사용하여 혼합 화상 회의. 이러한 시점에서 Janus는 웨비나에 적합하며 Jitsi는 웹 컨퍼런스에 적합합니다. 물론 Webrtc SFU는 놀라운 작업입니다 !! 나는 둘 다 사용하고 있습니다.
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
Janus 스트리밍 플러그인을 사용해야합니다
https://github.com/meetecho/janus-gateway/blob/8b388aebb0de3ccfad3b25f940f61e48e308e604/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
키 프레임을 훨씬 쉽게하기 위해 Janus conf에서 fir_freq = 1을 설정하는 것이 유용합니다.
Janus Video Room 또는 AudioBridge 플러그인을 사용해야합니다
https://github.com/meetecho/janus-gateway/blob/8b388aebb0de3ccfad3b25f940f61e48e308e604/janus_videoroom.c
https://github.com/meetecho/janus-gateway/blob/8b388aebb0de3ccfad3b25f940f61e48e308e604/janus_audiobridge.c
방에 피드를 게시 한 후 RTP-Forward를 사용해야합니다. 샘플 JavaScript 명령은입니다
# 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
누구든지 환영합니다.