用到了 https://github.com/winshining/nginx-http-flv-module
nginx 流媒体服务器,nginx tcp http负载均衡,nginx 流转发,nginx 推流,nginx rtmp
user www-data;
worker_processes auto;
pid /run/nginx.pid;
#worker_cpu_affinity auto; #1.9.10 以及之后的版本
include /etc/nginx/modules-enabled/*.conf;
load_module modules/ngx_http_flv_live_module.so;
worker_rlimit_nofile 200000;
events {
worker_connections 10240;
#multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
#aio threads;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
#access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
access_log off;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
#http balance
upstream myproject {
##后端目标服务器
server 10.10.10.1:8080;
server 10.10.10.2:8080;
server 10.10.10.3:8080;
server 10.10.10.4:8080;
}
server {
##前端接受流量入口
listen 8888;
server_name localhost;
location / {
proxy_pass http://myproject;
}
}
server {
listen 8083; #不是默认的 80 端口
location /live {
#url 重写 把 http://localhost:8083/live/3.flv 转为 http://localhost:8080/live?port=1935&app=live&stream=3
rewrite ^/live/(.*)(.flv) http://localhost:8080/live?port=1935&app=live&stream=$1 permanent;
}
}
server {
listen 8080; #不是默认的 80 端口
location /live { #http://localhost:8080/live?port=1935&app=live&stream=2
flv_live on; #打开 HTTP 播放 FLV 直播流功能
chunked_transfer_encoding on; #支持 'Transfer-Encoding: chunked' 方式回复 由于一些播放器不支持 HTTP 块传输, 这种情况下最好在指定了 flv_live on; 的 location 中指定 chunked_transfer_encoding off,否则播放会失败
add_header 'Access-Control-Allow-Origin' '*'; #添加额外的 HTTP 头
add_header 'Access-Control-Allow-Credentials' 'true'; #添加额外的 HTTP 头
}
}
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
rtmp { #apt-get install libnginx-mod-rtmp 或使用https://github.com/winshining/nginx-http-flv-module 这支持http播放
server {#接收推流
listen 1935;
application live {
live on;
gop_cache on; #打开 GOP 缓存,减少首屏等待时间
max_connections 1024;
push 192.168.2.238:1936;#推流到别的服务器,可以多台,写多行
# exec ffmpeg -re -i rtmp://localhost:1935/$app/$name -vcodec libx264 -acodec aac
-f flv rtmp://localhost:1939/$app/${name};#上面的push向ZLMediaKit推送有问题,可用这行
}
application zbcs {
live on;
record off;
}
application mypush {
live on;
# Every stream published here
# is automatically pushed to
# these two machines
# push rtmp1.example.com;
push 192.168.2.238:1936;
}
# application hls{
# live on;
# hls on;
# hls_path /usr/local/var/www/hls;
# hls_fragment 1s;
# }
}
}
#stream{
# server{#流转发
# listen 8088;
# proxy_pass 127.0.0.1:1935; #推流服务
# }
# server{
# listen 8081;
# proxy_pass 127.0.0.1:3306; #数据库
# }
#}
#nginx tcp loadbalance config
stream {
upstream MyServer{
#hash $remote_addr consistent;
server 127.0.0.1:1935;#weight=1 max_fails=3 fail_timeout=30s
server 192.168.2.238:1936;#weight=1 max_fails=3 fail_timeout=30s
}
server {
proxy_connect_timeout 1s;
#proxy_timeout 3s;
listen 8000;
proxy_pass MyServer;
tcp_nodelay on;
}
}
测试:
使用 ffmpeg 推流 ffmpeg -re -i 223.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/live/3
用flv播放器,打开地址rtmp://localhost:1935/live/3
或地址 http://localhost:8083/live/3.flv 或地址 rtmp://192.168.2.238:1936/live/3(推流到另外服务器),可以播放。
如果不想用nginx,也可以用 SRS,非常简单好用 https://ossrs.net/lts/zh-cn/
最后更新于 2022年8月24日
相关博文
nginx 流媒体服务器,nginx tcp http负载均衡,nginx 流转发,nginx 推流,nginx rtmp