Mac上搭建直播服务器 nginx + rtmp

Mac上搭建直播服务器 nginx + rtmp

直播技术介绍

直播技术涵盖很广,现如今广泛了解的有视频网站的个人直播、手机直播、安防方面的摄像头监控等会使用到直播的技术。

绍直播流程中的各个技术环节。可以理解分为采集端、流媒体服务器以及播放端;还需要了解什么是推流,什么是拉流。
Mac上搭建直播服务器 nginx + rtmp

  • 采集端:顾名思义是视频的源头,视频的采集一般都是从真实的摄像头中得到的。例如移动端设别、PC端设备的摄像头以及一些摄像头设备
  • 流媒体服务器:流媒体服务器是整个直播技术框架的非常重要的一环,它需要接收从采集端推上来的视频流,然后将该视频流再推送到播放端
  • 播放端:播放端就是各种app,网页中的播放器,拉取流媒体服务器上的视频流,然后进行转码,最终播放出来
  • 推流:把采集阶段收集的数据封装好传输到服务器的过程
  • 拉流:服务器已有直播内容,用指定地址进行拉去的过程

既然需要推流和拉流, 就必然涉及到视频流的传输,所以接下来介绍常用的流媒体传输协议 常用的流媒体传输协议有RTMP,RTSP,HLS,HTTP-FLV

  • RTMP:(可用于推流端和拉流端) Real Time Messaging Protocol 实时消息传输协议,RTMP协议中,视频必须是H264编码,音频必须是AAC或MP3编码,且多以flv格式封包。因为RTMP协议传输的基本是FLV格式的流文件,必须使用flash播放器才能播放.
  • RTSP:(用于推流端) Real-Time Stream Protocol,RTSP 实时效果非常好,适合视频聊天、视频监控等方向
  • HLS(用于拉流端) Http Live Streaming,由Apple公司定义的基于HTTP的流媒体实时传输协议。传输内容包括两部分:1.M3U8描述文件,2.TS媒体文件。TS媒体文件中的视频必须是H264编码,音频必须是AAC或MP3编码。数据通过HTTP协议传输。目前video.js库支持该格式文件的播放
  • HTTP-FLV(用于拉流端) 本协议就是http+flv,将音视频数据封装成FLV格式,然后通过http协议传输到客户端,这个协议大大方便了浏览器客户端播放直播视频流.目前flv.js库支持该格式的文件播放

1. 安装 Homebrow

Homebrew简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

卸载命令:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

2. 安装 Nginx 服务器

brew tap homebrew/nginx

3. 安装 Nginx 服务器和 rtmp 模块

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

查看 nginx 信息

brew info nginx-full

执行上面的命令后我们可以看到信息

Mac上搭建直播服务器 nginx + rtmp

执行命令 ,启动nginx服务

nginx

浏览器地址栏输入:http://localhost:8080

Mac上搭建直播服务器 nginx + rtmp

出现Welcome to nginx , 代表nginx安装成功了。

4. 配置 rtmp

编辑 nginx.conf 文件
Mac上搭建直播服务器 nginx + rtmp

cd /opt/homebrew/etc/nginx/
vim nginx.conf

配置下面两个字段

server {
        listen       8080;
        server_name  localhost;

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

        location /hls {
            types{
               application/vnd.apple.mpegurl m3u8;
               video/mp2t ts;
            }
            root /usr/local/var/www;
            add_header Cache-Control no-cache;
        }
}        
rtmp{
    server {
      listen 1935;
      chunk_size 4000;
  
      application rtmplive {
         live on;
         max_connections 1024;
        }
      application zbcs {
         live on;
         record off;
        }
  
      application hls{
         live on;
         hls on;
            hls_path/usr/local/var/www/hls;
         hls_fragment 5s;
        }
    }
}

rtmp是协议名称

server 说明内部中是服务器相关配置

listen 监听的端口号, rtmp协议的默认端口号是1935

application 访问的应用路径是 zbcs``

live on; 开启实时

record off; 不记录数据

5. 保存文件后,重新加载nginx的配置文件

nginx -s reload

6. 安装ffmepg工具

brew install ffmpeg

7. 安装 VLC

直接在浏览器上搜索 VLC,下载安装即可

8. 安装 node-media-server

NodeMediaServer支持:以rtmp,rtsp,hls协议拉进行推流,支持http-flv,ws-flv来进行拉流,也就是支持浏览器端使用http或websocket传输flv格式的视频流进行播放。

npm install node-media-server

新建app.js

const NodeMediaServer= require('node-media-server');

const config = {
  rtmp: {
    port: 1935,
    chunk_size: 60000,
    gop_cache: true,
    ping: 60,
    ping_timeout: 30
  },
  http: {
    port: 8000,
    allow_origin: '*',
  }
};
 
var nms = new NodeMediaServer(config)
nms.run();

运行 app.js

访问localhost:8000/admin地址,访问node-media-server的管理端界面
Mac上搭建直播服务器 nginx + rtmp

9. 使用 FFmpeg 命令推送地址

推流摄像头

ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i  "0"  -vcodec libx264 -acodec libfaac -f flv  rtmp://localhost:1935/zbcs/room

推流桌面 - 只有桌面内容

ffmpeg -f avfoundation -pixel_format uyvy422 -i "1" -f flv rtmp://localhost:1935/zbcs/room

只推流麦克风

ffmpeg -f avfoundation -i ":0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/zbcs/room

10. 验证视频

打开vlc这个播放器软件 点击File---->Open Network 在弹出来的框中选择Network然后输入URL:

rtmp://localhost:1935/zbcs/room

Mac上搭建直播服务器 nginx + rtmp

双击播放

Mac上搭建直播服务器 nginx + rtmp

播放界面

Mac上搭建直播服务器 nginx + rtmp

参考文章:

前端如何实现整套视频直播技术流程

使用node-media-server搭建一个简易的流媒体服务器

mac下面用ffmpeg抓取桌面以及摄像头推流进行直播

上一篇:Docker部署 SRS rtmp/flv流媒体服务器


下一篇:FLV协议