ansible-role-openstreamingp.../templates/osp-rtmp.conf

155 lines
7.4 KiB
Plaintext

rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp {
server {
#listen 1935;
listen [::]:1935;
chunk_size 4096;
ping 30s;
ping_timeout 15s;
drop_idle_publisher 15s;
application stream {
live on;
record off;
allow publish all;
#deny publish all;
allow play ::1;
allow play 127.0.0.1;
deny play all;
on_publish http://127.0.0.1:{{ osp_worker_rtmp_port }}/auth-key;
on_publish_done http://127.0.0.1:{{ osp_worker_rtmp_port }}/deauth-user;
}
application stream-data {
live on;
allow publish all;
#deny publish all;
allow play ::1;
allow play 127.0.0.1;
deny play all;
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/record/;
hls on;
hls_path {{ osp_http_path }}/live;
hls_fragment 1;
#hls_playlist_length 30s;
hls_playlist_length 30m;
hls_nested on;
hls_fragment_naming sequential;
recorder thumbnail {
record video;
record_max_frames 600;
record_path {{ osp_http_path }}/stream-thumb;
record_interval 120s;
exec_record_done ffmpeg -ss 00:00:01 -i $path -vcodec png -vframes 1 -an -f rawvideo -s 384x216 -y {{ osp_http_path }}/stream-thumb/$name.png;
exec_record_done ffmpeg -ss 00:00:00 -t 3 -i $path -filter_complex "[0:v] fps=30,scale=w=384:h=-1,split [a][b];[a] palettegen=stats_mode=single [p];[b][p] paletteuse=new=1" -y {{ osp_http_path }}/stream-thumb/$name.gif;
}
}
application stream-data-adapt {
live on;
allow publish all;
#deny publish all;
allow play ::1;
allow play 127.0.0.1;
deny play all;
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/record/;
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 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 copy -f flv rtmp://127.0.0.1:1935/show/$name_src;
recorder thumbnail {
record video;
record_max_frames 600;
record_path {{ osp_http_path }}/stream-thumb;
record_interval 120s;
exec_record_done ffmpeg -ss 00:00:01 -i $path -vcodec png -vframes 1 -an -f rawvideo -s 384x216 -y {{ osp_http_path }}/stream-thumb/$name.png;
exec_record_done ffmpeg -ss 00:00:00 -t 3 -i $path -filter_complex "[0:v] fps=30,scale=w=384:h=-1,split [a][b];[a] palettegen=stats_mode=single [p];[b][p] paletteuse=new=1" -y {{ osp_http_path }}/stream-thumb/$name.gif;
}
}
application show {
live on;
allow publish ::1;
allow publish 127.0.0.1;
deny publish all;
allow play ::1;
allow play 127.0.0.1;
deny play all;
hls on;
hls_path {{ osp_http_path }}/live-adapt;
hls_nested on;
hls_fragment 1;
#hls_playlist_length 30s;
hls_playlist_length 30m;
hls_fragment_naming sequential;
record off;
# Instruct clients to adjust resolution according to bandwidth
hls_variant _480 BANDWIDTH=1200000; # Medium bitrate, SD resolution
hls_variant _720 BANDWIDTH=2048000; # High bitrate, HD 720p resolution
hls_variant _1080 BANDWIDTH=4096000; # FHB 1080p
#hls_variant _src BANDWIDTH=4096000; # Source bitrate, source resolution
}
application record {
live on;
allow publish ::1;
allow publish 127.0.0.1;
deny publish all;
allow play ::1;
allow play 127.0.0.1;
deny play all;
on_publish http://127.0.0.1:{{ osp_worker_rtmp_port }}/auth-record;
exec_push mkdir -m 764 {{ osp_http_path }}/videos/$name;
recorder all {
record all;
record_path /tmp;
record_unique on;
record_suffix _%Y%m%d_%H%M%S.flv;
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.gif {{ osp_http_path }}/videos/$name/$basename.gif;
on_record_done http://127.0.0.1:{{ osp_worker_rtmp_port }}/deauth-record;
}
}
application live {
live on;
allow publish ::1;
allow publish 127.0.0.1;
deny publish all;
allow play all;
on_play http://127.0.0.1:{{ osp_worker_rtmp_port }}/playbackAuth;
}
}
}