直播系统开发:基于Nginx与Nginx-rtmp-module实现

作者简介:
小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD
如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。
座右铭:不想当开发的测试,不是一个好测试✌️。
如果感觉博主的文章还不错的话,还请点赞、收藏哦!

文章目录

  • 一、前言
  • 二、基本配置
    • 2.1 安装Nginx
    • 2.2 安装 Nginx-rtmp-module模块
    • 2.3 修改配置文件
      • 2.3.1 修改Nginx默认端口号
      • 2.3.2 添加rtmp协议
    • 2.4 生效配置文件
  • 三、推拉流实现
    • 3.1 推流
      • 3.1.1 指定文件推流
      • 3.1.2 屏幕推流
      • 3.1.3 摄像头+麦克风推流
    • 3.2 拉流

一、前言

最近测试直播相关的业务比较多,所以就想着,了解下直播相关的开发,是不是对后续的音视频测试更有帮助。每次推流都是使用公司提供的推流地址,那么是不是可以自己搭建一台,果然,Nginx-rtmp-module模块可以实现一个简易的直播系统。当然在搭建的过程中,也遇到了一些 Nginx 相关的问题,所以把这块内容整理下,加深下印象。

二、基本配置

以下内容均在Mac电脑中实现

2.1 安装Nginx

brew tap denji/homebrew-nginx
或者
brew tap denji/nginx

直播系统开发:基于Nginx与Nginx-rtmp-module实现_第1张图片
brew tap 的作用:当在核心仓库中没有找到相应软件时,可以通过tap命令从第三方仓库中安装所需软件。 注意:

1)如果直接使用命令 brew install nginx安装,则后续安装Nginx-rtmp-module模块则会失败。

2)如果使用命令brew tap homebrew/nginx安装,会提示该命令已经废弃。

2.2 安装 Nginx-rtmp-module模块

brew install nginx-full --with-rtmp-module


这行命令大概会执行十几分钟。 上述两个步骤就安装好了Nginx和 Nginx-rtmp-module模块。

2.3 修改配置文件

2.3.1 修改Nginx默认端口号

Nginx默认的端口号是80,但是我本地80端口被占用,所以需更换 Nginx 端口。

cd /usr/local/etc/nginx
open -e nginx.conf

直播系统开发:基于Nginx与Nginx-rtmp-module实现_第2张图片
在Http内修改server中端口号,我用的是8082,还需要补充一点,在更换端口号之后可以查看下所要设置的端口是否被占用,使用命令 lsof -i:8082 进行查看,如果是一些无关紧要的应用占用端口则使用命令kill掉:kill PID。

直播系统开发:基于Nginx与Nginx-rtmp-module实现_第3张图片

2.3.2 添加rtmp协议

继续上述操作,在nginx.conf文件中,输入一下rtmp配置,因为rtmp和http是同级,所以直接将rtmp配置放在http协议下面,千万别放在 http 内部。

rtmp {
    server {
        listen 1919;
         publish_time_fix on;
         application live {
                live on; #表示直播模式
                allow publish all; # 允许所有地址发布/播放
                allow play all;
                record off; #录制关闭
                }
     }
}

application后面跟应用名,那么对应的推拉流地址为:rtmp://localhost:1919/live/test 其中,test为媒体流名称,可以随意定义。

2.4 生效配置文件

上述配置完成之后,使用以下命令,使配置生效

nginx -s reload 

如果回车之后,出现

nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)  

这表示run目录下没有nginx.pid文件,原因可能是停止Nginx时,Nginx将nginx.pid文件删除,所以只需要在命令窗口输入nginx即可生成nginx.pid文件 。这块内容,需要对Nginx有一定的了解,这样才会得心应手。

三、推拉流实现

3.1 推流

3.1.1 指定文件推流

在命令行输入推流地址命令:

ffmpeg -re -i /Users/zeng/SVID_20221115_145951_1.mp4 -vcodec copy -f flv rtmp://localhost:1919/live/test

-re:表示按照本机帧率发送,当ffmpeg作为推流工具时,一定要加上该参数
-i:表示input,在推流中,也是必不可少的参数。
-vcodec copy:拷贝源数据的视频流,-vcodec表示制定视频编码器,对应的音频解码器为:-acodec copy
-f:指定音视频的存取格式

直播系统开发:基于Nginx与Nginx-rtmp-module实现_第4张图片

3.1.2 屏幕推流

ffmpeg -f avfoundation -pixel_format uyvy422 -i "1" -f flv rtmp://localhost:1919/live/test

3.1.3 摄像头+麦克风推流

ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i "0:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1919/live/test

3.2 拉流

在命令行输入如下命令,即可实现拉流

ffplay rtmp://localhost:1919/live/test

以上内容就实现一个基于Nginx-rtmp模块的直播系统。

你可能感兴趣的:(音视频,直播系统开发,Nginx基础,RTMP推拉流,Nginx-rtmp,实时音视频)