前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >搭建流媒体服务器 PingOS 平台搭建

搭建流媒体服务器 PingOS 平台搭建

作者头像
Meng小羽
发布2020-04-08 16:15:25
4.6K0
发布2020-04-08 16:15:25
举报
文章被收录于专栏:Debug客栈Debug客栈

近期由于工作原因需要更换公司原有 RTMP 协议推流,由于 Flash 插件今年年底就淘汰使用,并且一直在寻找一种并发好、延时低、同时便于回放功能的应用,在网上找到了基于Nginx + FFmpeg 推流的解决方案,可以实现 HLS 协议推流,看项目介绍可以实现 HLS+ 协议,这个工具安装比较便捷。

首先介绍一下这个开源的项目,欢迎给他们 star,谢谢。

官网地址:https://pingos.io/

安装

项目文档:https://pingos.io/docs/zh/quick-start

在官方网站的项目文档中讲解的不是很清晰,特别是针对新手来说是有一定的难度,我这里使用的是 Linux CentOS 7.4 64位环境,需要提前安装 Git 应用,这个就不详细讲解了,接下来讲一下如何安装:

1、下载源码

代码语言:javascript
复制
git clone https://github.com/pingostack/pingos.git

2、快速安装

代码语言:javascript
复制
cd pingos
./release.sh -i

3、启动服务

代码语言:javascript
复制
cd /usr/local/pingos/
./sbin/nginx

配置

一般情况下,安装完毕 PingOS 后就可以使用了,通过配置文件可以看到 nginx 占用端口为80,rtmp 端口占用为1935 。

但是在实际情况下,80 端口一般是使用于 HTTP 等服务,所以说尽量将服务端口设置为非 80 端口,由于使用了阿里云,可以关闭防火墙,同时配置安全组策略将 8080 入端口设置为允许状态。

下面是修改好的配置文件,位置为:/usr/local/pingos/conf/nginx.conf

代码语言:javascript
复制
user  root;
daemon on;
master_process on;
worker_processes  1;
#worker_rlimit 4g;

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

worker_rlimit_nofile 102400;
worker_rlimit_core   2G;
working_directory    /tmp;

#pid        logs/nginx.pid;

events {
#    use epoll;
    worker_connections  1024;
    multi_listen unix:/tmp/http 8080;
    multi_listen unix:/tmp/rtmp 1935;
}

stream_zone buckets=1024 streams=4096;

rtmp {
    log_format log_bandwidth '{"app":"$app","name":"$name","bitrate":$bitrate,"args":"$args","timestamp":$ntp,"ts":"$time_local","type":"$command","remote_addr":"$remote_addr","domain":"$domain"}';
    access_log logs/bandwidth.log log_bandwidth trunc=60s;

    server {
        listen 1935;
        serverid 000;
        out_queue 2048;
        server_name localhost;
   
        application live {
            rtmp_auto_pull on;
            rtmp_auto_pull_port unix:/tmp/rtmp;

#            live_record on;
#            live_record_path /tmp/record;

#            recorder r1{
#                record all;
#                record_path /tmp/record;
#            }

#            exec_publish bash -c "ffmepg -i rtmp://127.0.0.1/live/$name -c copy /tmp/mp4/$name-$starttime.mp4";

            live on;
            hls on;
            hls_path /tmp/hls;
            hls_fragment 4000ms;
#            hls_max_fragment 6000ms;
            hls_playlist_length 12000ms;

            hls2memory on;
            mpegts_cache_time 20s;

            hls2_fragment 1300ms;
            hls2_max_fragment 1600ms;
            hls2_playlist_length 3900ms;

            wait_key on;
            wait_video on;
            cache_time 3s;
            low_latency off;
            fix_timestamp 2s;
# h265 codecid, default 12
            hevc_codecid  12;
        }
    }
}

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

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_X-Forwarded-For" "$http_X-Real-IP" "$host"';


    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #reset_server_name www.test1.com www.test2.com;
    #gzip  on;
    server {
         listen 8080;
        location /rtmp_stat {
            rtmp_stat all;
            rtmp_stat_stylesheet /stat.xsl;
        }

        location /xstat {
            rtmp_stat all;
        }

        location /sys_stat {
            sys_stat;
        }

        location /control {
            rtmp_control all;
        }

        location /live {
            flv_live 1935;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header Cache-Control no-cache;
        }

        location /ts {
            ts_live 1935 app=live;
        }

        location /hls {
            # Serve HLS fragments
             types {
                 application/vnd.apple.mpegurl m3u8;
                 video/mp2t ts;
             }
             root /tmp;
             add_header Cache-Control no-cache;
             add_header 'Access-Control-Allow-Origin' '*';
        }

        location /hls2 {
            hls2_live 1935 app=live;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header Cache-Control no-cache;
        }

        location / {
             chunked_transfer_encoding on;
             root html/;
        }
    }
}

修改完配置之后需要进行 nginx 服务重新载入等操作。

命令

代码语言:javascript
复制
# 进入到 PingOS 应用目录,下面所有操作皆以此目录下进行
cd /usr/local/pingos/

# 开启 nginx 服务器
./sbin/nginx
# 检查 nginx 配置语法是否正确
./sbin/nginx -t
# 重新加载 nginx 配置
./sbin/nginx -s reload
# 停止 nginx 服务器
./sbin/nginx -s stop

推流

配置好服务器,可以看一下流媒体服务器推流效果,这里我是用的是 OBS 推流应用,推流端使用的是 RTMP 协议,在播放端使用的是 hls+ 协议。

这里给大家提供两个官方推荐查看推流效果的地址,也是应用提供的 Web 页面:

  • http://ip地址:端口/h5player/flv 无插件播放http-flv直播流
  • http://ip地址:端口/rtmp_stat 查看当前服务器推流统计数据

OBS配置

播放地址:http://ip地址:端口/hls2/流名.m3u8

参考

最后,这是一个系列的文章,后续还有针对 PingOS 流媒体服务还有对应优化,敬请关注。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
    • 1、下载源码
      • 2、快速安装
        • 3、启动服务
        • 配置
        • 命令
        • 推流
        • 参考
        相关产品与服务
        云直播
        云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档