前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 Nginx-RTMP 搭建简单的流媒体服务器

使用 Nginx-RTMP 搭建简单的流媒体服务器

原创
作者头像
青橙.
修改2023-02-02 18:45:37
7.2K0
修改2023-02-02 18:45:37
举报
文章被收录于专栏:橙、

安装

有的时候会遇到类似的场景:

  • 需要分享屏幕(仅仅是屏幕分享)给小伙伴,也许希望分析的是工作软件、视频甚至游戏,在尝试了 市面上能找到的几乎全部的屏幕分享、在线会议工具后发现流畅和清晰不可兼得,而且往往既不流畅也不清晰;
  • 需要转发其他来源的流媒体,例如有选择低转发不具有外网访问能力的摄像头的流数据,或者部分设 备不支持需要的流媒体格式,需要进行转码;

这时候就会思考,有没有能既清晰又流畅的进行屏幕、视频流的分享呢?很显然直播满足了这一系列条件。所以这里有这么些解决方案:

  1. 使用第三方直播平台进行直播
  2. 选择现有的直播服务(如腾讯云的 标准直播 LVB )
  3. 如果手上有闲置的服务器,可以使用自己的服务器进行推流

前两种方案都很简单,三方直播平台开播也很容易,现有的直播服务价格相比按量计费的服务器来说并不贵。

本文讨论最后一种情况,有自己的服务器,希望利用它实现简单的直播推流。

环境

部署的环境选择往往会决定最终的使用体验,本次使用了 Lighthouse 轻量应用服务器中国大陆数据中心的服务器进行,目前在售的最低配置提供了 2 虚拟 CPU, 2 GB 内存和 4 MB 下行带宽。

通常来说,该配置的 CPU 和内存是足够了,带宽取决于希望分享的内容和同时拉流的人数。

如果使用 4000 KBps 码率的直播推流,不进行码率转换和压缩,则可以供另外一个小伙伴进行观看,若使用 2000 KBps 码率进行直播推流,

需要多高的码率和内容、编码方式有较大关联,举个例子顺带吐槽一下 该视频 提供的 “1080P 高码率” 的码率仅仅只有 1000 KBps,其中视频码率只有 825 KBps,大家看的不也很开心吗(

总之,本文使用下配置环境进行配置:

  1. 腾讯云 Lighthouse 广州 bundle2022_gen_01(2 核 2 G 内存 4 M 带宽 300 G 流量 )
  2. 操作系统:Ubuntu 22.04

快速安装

通过网络搜索 Nginx-RTMP,可以获得大量的编译安装的说明,不过其实目前来说并不需要在这么麻烦,直接利用 apt 包管理器就可以了,通过 search 找到需要安装的软件包:

apt search nginx rtmp 结果
apt search nginx rtmp 结果

安装 Nginx 和 Nginx-RTMP,为了方便转码,再额外安装 ffmpeg

代码语言:shell
复制
# 更新软件源
apt update
# apt upgrade -y

# 安装
apt install nginx libnginx-mod-rtmp -y

# ffmpeg (如需转码)
apt install ffmpeg -y

配置

在 GitHub 上查看项目

配置文件

Nginx-RTMP 的配置需写在 nginx.conf 文件中,当前环境下位于 /etc/nginx/nginx.conf

大部分配置在该配置文件中新建 rtmp 模块并写入,少部分配置需要写入该配置文件的 http 模块中。

完整配置参考:https://github.com/arut/nginx-rtmp-module/wiki/Directives

配置示例

视频点播服务

代码语言:json
复制
rtmp {
    server {
        listen 1935;
        application vod {
            play /var/document/vedios;
        }
    }
}

直播

代码语言:json
复制
rtmp {
    server {
        listen 1935;
        application live {
            live on;
        }
    }
}

该配置下,推流地址为 rtmp://IP_ OR_DOMAIN/live/,当使用 live 为推流码进行推流时,播放地址为 rtmp://IP_ OR_DOMAIN/live/live

转发流

代码语言:json
复制
rtmp {
 server{
     listen 1935;
     chunk_size 4096;
     application live {
           live on;
           record off;
           push rtmp://target;
          }
    }
} 

设置不同码率限制或转码

利用 ffmpeg 可进行转码操作

代码语言:json
复制
rtmp {
    server {
        listen 1935;
    
        application src {
            live on;

            exec ffmpeg -i rtmp://localhost/src/$name
              -c:a aac -b:a 32k  -c:v libx264 -b:v 128K -f flv rtmp://localhost/hls/$name_low
              -c:a aac -b:a 64k  -c:v libx264 -b:v 256k -f flv rtmp://localhost/hls/$name_mid
              -c:a aac -b:a 128k -c:v libx264 -b:v 512K -f flv rtmp://localhost/hls/$name_hi;
        }

        application hls {
            live on;

            hls on;
            hls_path /tmp/hls;
            hls_nested on;

            hls_variant _low BANDWIDTH=160000;
            hls_variant _mid BANDWIDTH=320000;
            hls_variant _hi  BANDWIDTH=640000;
        }
    }
}

推流、播放

推流

推流可以使用 OBS、ffmpeg 等工具进行

注:x11grab 在新版的 ffmpeg 中已被移除,给出ffmpeg推流示例:

代码语言:shell
复制
./ffmpeg -f gdigrab -framerate 30 -i desktop -c:v h264\_nvenc -qp 0 -acodec aac -f flv rtmp://IP_OR_DOMAIN:1935/live/live

播放

播放可以采用多种方式,如 ffplay、网页、第三方客户端(如 PotPlayer)等

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

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