首页 > 解决方案 > 为 rtmp 流设置 Nginx,Apache2 流也可以吗?

问题描述

我一直在测试我网站上的视频流。我在运行 Debian-10.3.0 (buster) 的机器上运行我家的 Web 服务器。它使用 Apache-2.4.38 来提供网页服务。因此,在设置视频流时,我使用 nginx 将所有内容分开。Apache 监听 80 和 443 端口,nginx 监听 81 并将使用 444。

$ sudo apt install nginx libnginx-mod-rtmp ffmpeg obs-studio 

nginx 配置文件位于 /usr/local/etc/nginx/nginx.conf :

load_module /usr/local/libexec/nginx/ngx_stream_module.so;
load_module /usr/local/libexec/nginx/ngx_rtmp_module.so;
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    gzip on;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

server {
    listen 81;
    server_name www.davekimble.net;
        location / {
            root /home/dk/www/davekimble.net/public_html;
            index index.html index.htm;
        }
    }

rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        application live {
            live on;
            record off;  
        }
    }
}  

这似乎工作正常,但令我惊讶的是 Apache 视频流也是如此。怎么会这样 ?

Apache 正在使用 docroot 路径:/home/dk/www/davekimble.net/public_html/。Nginx 使用相同的 docroot。我在某处看到一句话说这会改变事情,但我在 wiki 中找不到任何提及。 那里有一个文件夹 /stream 保存所有 .mp4 文件。有一个 streaming.php 链接到所有和视频文件。

要对此进行测试,请访问http://davekimble.net/streamimg.php并单击一个链接。

更新 1
以证明它是 Apache 进行流式传输,我将防火墙的端口 81 关闭到 nginx,然后执行:

# systemctl stop nginx

它仍然有效,没有运行 nginx。

我已将“stream.htm”更改为“streaming.php”,它只是列出了 /stream/ 文件夹中的文件。

更新 2
实际上 /etc/nginx/nginx.conf 中的“基本配置”是不必要的,我已将其从帖子中删除。需要 /usr/local/etc/nginx/nginx.conf 中的“替代配置”。

标签: nginxapache2rtmp

解决方案


推荐阅读