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

一、前言

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

二、基本配置

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

2.1 安装Nginx

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

在这里插入图片描述
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

在这里插入图片描述
在Http内修改server中端口号,我用的是8082,还需要补充一点,在更换端口号之后可以查看下所要设置的端口是否被占用,使用命令 lsof -i:8082 进行查看,如果是一些无关紧要的应用占用端口则使用命令kill掉:kill PID。

在这里插入图片描述

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:指定音视频的存取格式

在这里插入图片描述

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模块的直播系统。

GitHub 加速计划 / ng / nginx-rtmp-module
13.26 K
3.5 K
下载
nginx-rtmp-module: nginx-rtmp-module 是一个 Nginx 模块,用于支持 RTMP、HLS 和 MPEG-DASH 直播流媒体,提供录制、转码和HTTP回调等功能。
最近提交(Master分支:1 个月前 )
2fb11dff While rtmp module does not support SSL, starting from nginx 1.25.5 an SSL connection can be passed from nginx stream pass module. Such connections should be shut down on connection closure. An rtmps example: rtmp { server { listen 1935; # rtmp application foo { live on; } } } stream { server { listen 1936 ssl; # rtmps ssl_certificate example.com.crt; ssl_certificate_key example.com.key; pass 127.0.0.1:1935; } } 6 个月前
6f9fa49a The change repeats nginx commit cb149fa03367 and is needed for stream pass module to be able to pass connections to rtmp. 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐