1
0
Fork 0
mirror of https://github.com/DanielnetoDotCom/YouPHPTube synced 2025-10-03 01:39:24 +02:00
Oinktube/plugin/Live/install/nginx.conf
2024-11-27 13:25:05 -03:00

177 lines
8.3 KiB
Nginx Configuration File

user www-data;
worker_processes 1;
error_log logs/error.log debug;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
ping 5m;
ping_timeout 4m;
### Use case option (max_streams; default is 32 )
#max_streams 10;
allow play all;
#creates our "live" full-resolution HLS videostream from our incoming encoder stream and tells where to put the HLS video manifest and video fragments
application live {
allow play all;
live on;
hls on;
hls_nested on;
hls_path /HLS/live;
hls_playlist_length 60m;
hls_fragment 4s;
drop_idle_publisher 30s;
sync 500ms;
hls_keys on;
hls_fragments_per_key 20;
#Experimental. Force dropped stream, or ended stream from being watched. (idle_streams)
#idle_streams off;
on_publish http://localhost/AVideo/plugin/Live/on_publish.php;
on_publish_done http://localhost/AVideo/plugin/Live/on_publish_done.php;
on_play http://localhost/AVideo/plugin/Live/on_play.php;
on_record_done http://localhost/AVideo/plugin/Live/on_record_done.php;
#exec ffmpeg -re -i rtmp://localhost/live/$name
# -c:v libx264 -preset veryfast -vf scale=-2:240 -r 20 -g 40 -keyint_min 40 -sc_threshold 0 -bf 2 -b_strategy 1 -b:v 400k -maxrate 500k -bufsize 1000k -c:a aac -b:a 96k -ac 2 -ar 44100 -f flv rtmp://localhost/adaptive/$name_low
# -c:v libx264 -preset veryfast -vf scale=-2:480 -r 30 -g 60 -keyint_min 60 -sc_threshold 0 -bf 2 -b_strategy 1 -b:v 1200k -maxrate 1500k -bufsize 3000k -c:a aac -b:a 128k -ac 2 -ar 44100 -f flv rtmp://localhost/adaptive/$name_mid
# -c:v libx264 -preset veryfast -vf scale=-2:720 -r 30 -g 60 -keyint_min 60 -sc_threshold 0 -bf 2 -b_strategy 1 -b:v 2400k -maxrate 2800k -bufsize 5600k -c:a aac -b:a 128k -ac 2 -ar 44100 -f flv rtmp://localhost/adaptive/$name_hi;
#recorder video {
# record all manual;
# record_path /var/www/tmp;
# record_notify on;
# record_max_size 20480M;
# record_suffix -%d-%b-%y-%T.flv;
#}
### Record Audio Separately ( For podcast )
#recorder audio {
# record audio;
# record_path /var/www/tmp;
# record_max_size 1024M;
# record_suffix -%d-%b-%y-%T.mp3;
#}
}
#application adaptive {
# live on;
# hls on;
# hls_path /HLS/live;
# hls_nested on;
# hls_playlist_length 60m;
# hls_fragment 4s;
# allow play all;
# allow publish 127.0.0.1;
# deny publish all;
# hls_keys on;
# hls_fragments_per_key 20;
# hls_variant _low BANDWIDTH=900000;
# hls_variant _mid BANDWIDTH=1000000;
# hls_variant _hi BANDWIDTH=2500000;
#}
}
}
http {
include mime.types;
default_type application/octet-stream;
server {
#listen 8443 ssl;
#listen [::]:8443 ssl;
#include /usr/local/nginx/snippets/self-signed.conf;
#include /usr/local/nginx/snippets/ssl-params.conf;
listen 8080;
server_name localhost;
#creates the http-location for our full-resolution (desktop) HLS stream - "http://my-ip/live/my-stream-key/index.m3u8"
location /live {
expires 60;
add_header 'Cache-Control' 'public';
root /HLS; # Use root instead of alias
location ~ \.m3u8$ {
expires -1;
# Disable cache
add_header 'Cache-Control' 'no-cache';
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
}
location ~ \.key$ {
# Call an external authorization service
auth_request /auth_key_check;
# Only serve the key if the authorization service returns 200
add_header 'Content-Type' 'application/octet-stream';
# Disable cache
add_header 'Cache-Control' 'no-cache';
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
}
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
types {
application/vnd.apple.mpegurl m3u8;
}
}
# Authorization endpoint
location = /auth_key_check {
internal; # Make this location internal so it cannot be accessed directly
proxy_pass http://localhost/AVideo/plugin/Live/authorizeKeyAccess.php;
proxy_pass_request_body off; # Do not send the client request body to the auth service
proxy_set_header Content-Length "";
# Set headers to pass information to the PHP script
proxy_set_header X-Original-URI $request_uri; # Pass the original request URI
proxy_set_header X-Forwarded-For $remote_addr; # Pass the client IP address
proxy_set_header User-Agent $http_user_agent; # Pass the client User-Agent
}
#allows us to see how stats on viewers on our Nginx site using a URL like: "http://my-ip/stats"
#location /stats {
# stub_status;
#}
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root html;
}
location /control {
# replace this with the IP of your AVideo site
allow 127.0.0.1;
deny all;
rtmp_control all;
}
#allows us to host some webpages which can show our videos: "http://my-ip/my-page.html"
location / {
root html;
index index.html index.htm;
}
#location ~ \.php$ {
# include /etc/nginx/snippets/fastcgi-php.conf;
# fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
#}
}
}