gpt4 book ai didi

Nginx RTMP Module 接收 x.264 ,输出 HLS 直播流

转载 作者:行者123 更新时间:2023-12-01 13:42:33 27 4
gpt4 key购买 nike

目标 : 使用 OBS 从 PC 流式传输, 使用 Nginx RTMP 模块接收流并输出给查看者,以便他们查看 直播在 PC 和移动设备上。为此,Nginx 必须使用 HLS 输出实时流。

我的伙伴设置了以下 Nginx 文件,但没有任何 react (它是在 stackoverflow 的这个答案之后完成的 --> answer )

#user  nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;


events {
worker_connections 1024;
}


http {
include mime.types;
default_type application/octet-stream;


sendfile on;
keepalive_timeout 65;

server {
listen 8080;
server_name localhost;

location / {
root html;
index index.html index.htm;
}

location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}

location /stat.xsl {
# you can move stat.xsl to a different location
root /usr/build/nginx-rtmp-module;
}

# rtmp control
location /control {
rtmp_control all;
}

# Client (VLC etc.) can access HLS here.
location /hls {
# Serve HLS fragments
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

}

}

rtmp {
server {
listen 1935;
chunk_size 4096;

application live {
live on;
record off;
}

application directo {
live on;
record off;
}

# You should send x.264/aac RTMP Stream via ffmpeg to this application
application hls {
allow play all;
live on;
hls on;
hls_path /tmp/hls;
}
}
}

这是 OBS 流配置的捕获:

enter image description here

PC可以正常观看直播,但手机不能。

感谢任何人可能有的任何输入。

最佳答案

我确实在 ubuntu 16.04 LTS 上进行了测试,它适用于以下说明:

cd $HOME
git clone https://github.com/arut/nginx-ts-module.git
wget https://nginx.org/download/nginx-1.13.8.tar.gz
git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
tar -xf nginx-1.13.8.tar.gz
cd nginx-1.13.8/
sudo apt update
sudo apt install autoconf automake build-essential libpcre3 libpcre3-dev libssl-dev
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module --with-http_stub_status_module --add-module=../nginx-ts-module
make
sudo make install

然后你需要更新 .conf 文件:
cd /usr/local/nginx/conf/
sudo nano nginx.conf

配置文件:
worker_processes  auto;
events {
worker_connections 1024;
}

# RTMP configuration
rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4000;

application show {
live on;
# Turn on HLS
hls on;
hls_path /mnt/hls/;
hls_fragment 3;
hls_playlist_length 60;
# disable consuming the stream from nginx as rtmp
deny play all;
# Instruct clients to adjust resolution according to bandwidth
hls_variant _low BANDWIDTH=512000; # Low bitrate, sub-SD resolution
hls_variant _mid BANDWIDTH=1024000; # Medium bitrate, SD resolution
hls_variant _hd720 BANDWIDTH=2048000; # High bitrate, HD 720p resolution
}

}
}

http {
sendfile off;
tcp_nopush on;
#aio on;
directio 512;
default_type application/octet-stream;

server {
listen 8080;

location / {
# 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';

# 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/dash+xml mpd;
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
location /stats {
stub_status;
}


root /mnt/;
}

启动你的 nginx 服务器(先杀死它然后启动它):
sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx

查看 nginx 服务器的统计信息:
您的服务器的公共(public)IP在哪里。
http://<ip_of_your_nginx_server>:8080/stats

从您的编码器(例如 OBS):
使用该地址流式传输到您的 nginx 服务器:
  • rtmp:///show/stream_hd720
    以 2500kbps 播放 1280x720,以 128kbps 播放 1 个立体声

  • 如果你想在 VLC 上看到你的流:
    打开网络流,然后粘贴:
    http://<ip_of_your_nginx_server>:8080/hls/stream.m3u8

    你应该看到你的流。

    如果您想托管一个 HLS 播放器,您的观众可以免费观看您的流:
    sudo apt install screen

    将您的 http 服务器置于屏幕 session 中:
    screen -dmS httpSTREAM

    访问您的屏幕:
    screen -r httpSTREAM

    然后启动你的服务器:
    python -m SimpleHTTPServer 7788

    使用 Hls 播放器创建您的 html 页面:
    touch player.html
    sudo nano player.html

    并粘贴:
    使用正确的 ip hls.loadSource('http://<ip_of_your_nginx_server>:8080/hls/stream.m3u8'); 更改该行根据您的需要
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>CHAN.1</title>

    <!-- Bootstrap -->
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

    <!-- Optional theme -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

    <!-- Latest compiled and minified JavaScript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    </head>
    <body>

    <h1>CHAN 2018 - STREAM.1</h1>

    <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
    <div class="well">
    <div class="embed-responsive embed-responsive-16by9">
    <video id="video" width=720 class="video-js vjs-default-skin" controls></video>
    </div>
    </div>
    <script>
    if(Hls.isSupported()) {
    var video = document.getElementById('video');
    var hls = new Hls();
    hls.loadSource('http://163.172.128.64:8080/hls/stream.m3u8');
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED,function() {
    video.play();
    });
    }
    </script>

    <div id="footer">
    <font size="2">&nbsp;&copy; Ekla Ingenierie - 2018 <a href="http://www.ekla.tv">www.ekla.tv</a></font>
    </div>

    </body>
    </html>
    obe@scw-eklaingenierie-c2:~$ cat player.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>CHAN.1</title>

    <!-- Bootstrap -->
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

    <!-- Optional theme -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

    <!-- Latest compiled and minified JavaScript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    </head>
    <body>

    <h1>My Stream</h1>

    <div class="well">
    <div class="embed-responsive embed-responsive-16by9">
    <video id="video" width=720 class="video-js vjs-default-skin" controls></video>
    </div>
    </div>
    <script>
    if(Hls.isSupported()) {
    var video = document.getElementById('video');
    var hls = new Hls();
    hls.loadSource('http://<ip_of_your_nginx_server>:8080/hls/stream.m3u8');
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED,function() {
    video.play();
    });
    }
    </script>

    <div id="footer">
    <font size="2">&nbsp;&copy; MyStreaming - 2018</font>
    </div>

    </body>
    </html>

    然后从 chrome 浏览器访问您的播放器并粘贴该链接:
    http://<ip_of_your_nginx_server>:7788/player.html

    现在你做了一个完整的流媒体!

    关于Nginx RTMP Module 接收 x.264 ,输出 HLS 直播流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38765115/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com