dirty support for 0.8.0 - osp-rtmp daemon

This commit is contained in:
Geno 2021-01-28 02:08:06 +01:00
parent fde33a766a
commit c6a9c1ced5
9 changed files with 67 additions and 20 deletions

View File

@ -1,7 +1,8 @@
--- ---
osp_git_root: 'https://gitlab.com/Deamos/flask-nginx-rtmp-manager.git' osp_git_root: 'https://gitlab.com/Deamos/flask-nginx-rtmp-manager.git'
osp_git_commit: '0.7.9' osp_git_commit: '0.7.9'
osp_worker_start_port: 5000 osp_worker_rtmp_port: 5999
osp_worker_start_port: 5010
osp_worker_count: "{{ ansible_processor_nproc }}" osp_worker_count: "{{ ansible_processor_nproc }}"
osp_worker_timeout: 30 osp_worker_timeout: 30
# should not be edited # should not be edited

View File

@ -22,3 +22,9 @@
name: osp.target name: osp.target
state: restarted state: restarted
daemon_reload: yes daemon_reload: yes
- name: restart osp-rtmp
systemd:
name: osp-rtmp
state: restarted
daemon_reload: yes

View File

@ -165,6 +165,13 @@
dest: "/opt/osp/conf/config.py" dest: "/opt/osp/conf/config.py"
state: link state: link
- name: Configure supply rtmp
notify: restart osp-rtmp
file:
src: "/etc/osp.conf"
dest: "/opt/osp/installs/osp-rtmp/conf/config.py"
state: link
- name: Create logging directory - name: Create logging directory
file: file:
path: /opt/osp path: /opt/osp
@ -198,9 +205,14 @@
loop: loop:
- osp-worker@.service - osp-worker@.service
- osp.target - osp.target
- osp-rtmp.service
- name: Start OSP - name: Start OSP
systemd: systemd:
name: osp.target name: "{{ item }}"
state: started state: started
enabled: yes enabled: yes
loop:
- osp.target
- osp-rtmp.service
- osp.target

View File

@ -24,6 +24,8 @@ requireEmailRegistration={{ osp_require_email_registration }}
# Enables Debug Mode # Enables Debug Mode
debugMode = False debugMode = False
ospCoreAPI = "http://127.0.0.1:{{ osp_worker_start_port }}"
# EJabberD Configuration # EJabberD Configuration
ejabberdAdmin = "admin" ejabberdAdmin = "admin"
ejabberdPass = "{{ osp_ejabberd_password }}" ejabberdPass = "{{ osp_ejabberd_password }}"

View File

@ -161,7 +161,7 @@ shaper_rules:
auth_use_cache: false auth_use_cache: false
auth_password_format: scram auth_password_format: scram
extauth_program: "/usr/bin/python3 /opt/osp/setup/ejabberd/auth_osp.py" extauth_program: "/usr/bin/python3 /opt/osp/installs/ejabberd/setup/auth_osp.py"
extauth_instances: 3 extauth_instances: 3
host_config: host_config:

View File

@ -67,9 +67,7 @@ http {
# sticky cookie srv_id expires=8h; # sticky cookie srv_id expires=8h;
hash $remote_addr consistent; hash $remote_addr consistent;
{% for n in range(osp_worker_count) %} {% for n in range(osp_worker_count) %}
{% if n != 0 or osp_worker_count == 1 %}
server 127.0.0.1:{{ osp_worker_start_port + n }}; server 127.0.0.1:{{ osp_worker_start_port + n }};
{% endif %}
{% endfor %} {% endfor %}
} }

View File

@ -106,12 +106,12 @@
location /edge { location /edge {
auth_request /ospAuth; auth_request /ospAuth;
rewrite ^/edge/(.*)$ $scheme://$ospedge_node/live/$1 redirect; rewrite ^/edge/(.*)$ $scheme://$ospedge_node/edge/$1 redirect;
} }
location /edge-adapt { location /edge-adapt {
auth_request /ospAuth; auth_request /ospAuth;
rewrite ^/edge-adapt/(.*)$ $scheme://$ospedge_node/live-adapt/$1 redirect; rewrite ^/edge-adapt/(.*)$ $scheme://$ospedge_node/edge-adapt/$1 redirect;
} }
location /http-bind/ { # BOSH XMPP-HTTP location /http-bind/ { # BOSH XMPP-HTTP

View File

@ -6,6 +6,9 @@ rtmp {
#listen 1935; #listen 1935;
listen [::]:1935; listen [::]:1935;
chunk_size 4096; chunk_size 4096;
ping 30s;
ping_timeout 15s;
drop_idle_publisher 15s;
application stream { application stream {
live on; live on;
@ -17,8 +20,8 @@ rtmp {
allow play 127.0.0.1; allow play 127.0.0.1;
deny play all; deny play all;
on_publish http://127.0.0.1:{{ osp_worker_start_port }}/auth-key; on_publish http://127.0.0.1:{{ osp_worker_rtmp_port }}/auth-key;
on_publish_done http://127.0.0.1:{{ osp_worker_start_port }}/deauth-user; on_publish_done http://127.0.0.1:{{ osp_worker_rtmp_port }}/deauth-user;
} }
application stream-data { application stream-data {
@ -30,17 +33,18 @@ rtmp {
allow play 127.0.0.1; allow play 127.0.0.1;
deny play all; deny play all;
on_publish http://127.0.0.1:{{ osp_worker_start_port }}/auth-user; on_publish http://127.0.0.1:{{ osp_worker_rtmp_port }}/auth-user;
push rtmp://127.0.0.1:1935/live/; push rtmp://127.0.0.1:1935/live/;
push rtmp://127.0.0.1:1935/record/; push rtmp://127.0.0.1:1935/record/;
hls on; hls on;
hls_path {{ osp_http_path }}/live; hls_path {{ osp_http_path }}/live;
hls_fragment 1; hls_fragment 1;
hls_playlist_length 30s; #hls_playlist_length 30s;
hls_playlist_length 30m;
hls_nested on; hls_nested on;
hls_fragment_naming system; hls_fragment_naming sequential;
recorder thumbnail { recorder thumbnail {
record video; record video;
@ -62,12 +66,12 @@ rtmp {
allow play 127.0.0.1; allow play 127.0.0.1;
deny play all; deny play all;
on_publish http://127.0.0.1:{{ osp_worker_start_port }}/auth-user; on_publish http://127.0.0.1:{{ osp_worker_rtmp_port }}/auth-user;
push rtmp://127.0.0.1:1935/live/; push rtmp://127.0.0.1:1935/live/;
push rtmp://127.0.0.1:1935/record/; push rtmp://127.0.0.1:1935/record/;
exec ffmpeg -i rtmp://127.0.0.1:1935/live/$name exec ffmpeg -i rtmp://127.0.0.1:1935/live/$name
-c:v libx264 -c:a aac -b:a 192k -vf "scale=-2:1080" -vsync 1 -copyts -start_at_zero -sws_flags lanczos -r 30 -g 30 -keyint_min 30 -force_key_frames "expr:gte(t,n_forced*1)" -tune zerolatency -preset ultrafast -crf 28 -maxrate 4192k -bufsize 8384k -threads 4 -f flv rtmp://127.0.0.1:1935/show/$name_1080 # -c:v libx264 -c:a aac -b:a 192k -vf "scale=-2:1080" -vsync 1 -copyts -start_at_zero -sws_flags lanczos -r 30 -g 30 -keyint_min 30 -force_key_frames "expr:gte(t,n_forced*1)" -tune zerolatency -preset ultrafast -crf 28 -maxrate 4192k -bufsize 8384k -threads 4 -f flv rtmp://127.0.0.1:1935/show/$name_1080
-c:v libx264 -c:a aac -b:a 128k -vf "scale=-2:720" -vsync 1 -copyts -start_at_zero -sws_flags lanczos -r 30 -g 30 -keyint_min 30 -force_key_frames "expr:gte(t,n_forced*1)" -tune zerolatency -preset ultrafast -crf 28 -maxrate 2096k -bufsize 4192k -threads 4 -f flv rtmp://127.0.0.1:1935/show/$name_720 -c:v libx264 -c:a aac -b:a 128k -vf "scale=-2:720" -vsync 1 -copyts -start_at_zero -sws_flags lanczos -r 30 -g 30 -keyint_min 30 -force_key_frames "expr:gte(t,n_forced*1)" -tune zerolatency -preset ultrafast -crf 28 -maxrate 2096k -bufsize 4192k -threads 4 -f flv rtmp://127.0.0.1:1935/show/$name_720
-c:v libx264 -c:a aac -b:a 96k -vf "scale=-2:480" -vsync 1 -copyts -start_at_zero -sws_flags lanczos -r 30 -g 30 -keyint_min 30 -force_key_frames "expr:gte(t,n_forced*1)" -tune zerolatency -preset ultrafast -crf 28 -maxrate 1200k -bufsize 2400k -threads 4 -f flv rtmp://127.0.0.1:1935/show/$name_480; -c:v libx264 -c:a aac -b:a 96k -vf "scale=-2:480" -vsync 1 -copyts -start_at_zero -sws_flags lanczos -r 30 -g 30 -keyint_min 30 -force_key_frames "expr:gte(t,n_forced*1)" -tune zerolatency -preset ultrafast -crf 28 -maxrate 1200k -bufsize 2400k -threads 4 -f flv rtmp://127.0.0.1:1935/show/$name_480;
# -c copy -f flv rtmp://127.0.0.1:1935/show/$name_src; # -c copy -f flv rtmp://127.0.0.1:1935/show/$name_src;
@ -98,9 +102,10 @@ rtmp {
hls_path {{ osp_http_path }}/live-adapt; hls_path {{ osp_http_path }}/live-adapt;
hls_nested on; hls_nested on;
hls_fragment 1; hls_fragment 1;
hls_playlist_length 30s; #hls_playlist_length 30s;
hls_playlist_length 30m;
hls_fragment_naming system; hls_fragment_naming sequential;
record off; record off;
@ -121,7 +126,7 @@ rtmp {
allow play 127.0.0.1; allow play 127.0.0.1;
deny play all; deny play all;
on_publish http://127.0.0.1:{{ osp_worker_start_port }}/auth-record; on_publish http://127.0.0.1:{{ osp_worker_rtmp_port }}/auth-record;
exec_push mkdir -m 764 {{ osp_http_path }}/videos/$name; exec_push mkdir -m 764 {{ osp_http_path }}/videos/$name;
recorder all { recorder all {
@ -132,19 +137,18 @@ rtmp {
exec_record_done bash -c "ffmpeg -y -i $path -codec copy -movflags +faststart {{ osp_http_path }}/videos/$name/$basename.mp4 && rm $path"; exec_record_done bash -c "ffmpeg -y -i $path -codec copy -movflags +faststart {{ osp_http_path }}/videos/$name/$basename.mp4 && rm $path";
exec_record_done mv {{ osp_http_path }}/stream-thumb/$name.png {{ osp_http_path }}/videos/$name/$basename.png; exec_record_done mv {{ osp_http_path }}/stream-thumb/$name.png {{ osp_http_path }}/videos/$name/$basename.png;
exec_record_done mv {{ osp_http_path }}/stream-thumb/$name.gif {{ osp_http_path }}/videos/$name/$basename.gif; exec_record_done mv {{ osp_http_path }}/stream-thumb/$name.gif {{ osp_http_path }}/videos/$name/$basename.gif;
on_record_done http://127.0.0.1:{{ osp_worker_start_port }}/deauth-record; on_record_done http://127.0.0.1:{{ osp_worker_rtmp_port }}/deauth-record;
} }
} }
application live { application live {
live on; live on;
drop_idle_publisher 30s;
allow publish ::1; allow publish ::1;
allow publish 127.0.0.1; allow publish 127.0.0.1;
deny publish all; deny publish all;
allow play all; allow play all;
on_play http://127.0.0.1:{{ osp_worker_start_port }}/playbackAuth; on_play http://127.0.0.1:{{ osp_worker_rtmp_port }}/playbackAuth;
} }
} }
} }

View File

@ -0,0 +1,24 @@
[Unit]
Description=Gunicorn instance to serve OSP-RTMP
After=network.target ejabberd.service redis.service
PartOf=osp.target
{% if osp_db_type == "postgresql" %}
After=postgresql.service
{% endif %}
{% if osp_db_type == "mysql" %}
After=mysql.service
{% endif %}
[Service]
User=http
Group=http
WorkingDirectory=/opt/osp/installs/osp-rtmp/
Environment="VIRTUAL_ENV=/opt/osp-venv"
Environment="PATH=/opt/osp-venv/bin:/usr/local/bin:/usr/bin:/bin"
ExecStart=/opt/osp-venv/bin/gunicorn app:app -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 --bind 127.0.0.1:{{ osp_worker_rtmp_port }} --reload --access-logfile /var/log/osp/access.log --error-logfile /var/log/osp/error.log
Restart=on-failure
RestartSec=5m
[Install]
WantedBy=multi-user.target