尝试做直播 - nginx 推拉流

894 阅读3分钟

背景

有个同事碰到一个小活是一个摄像头公司,为了拓展在卖摄像头的同时提供视频直播的软件需求,类似视频监控。当然这个得是在合法的前提下。不过最终因为涉及到出差,就没应下来。但是视频直播这个东西很有意思,想探索一下,遂有下文。 ​

理论介绍

1、RMTP, Real Time Messaging Protocol 实时消息传输协议。

该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。RTMP与HTTP一样,都属于TCP/IP四层模型的应用层。

2、FFmpeg, 视频处理最常用的开源软件。

实现步骤

1、安装配置 FFmpeg

Mac 下装的比较简单,直接 homebrew 装即可:

brew install ffmpeg

参考该文档 www.jianshu.com/p/627b2d462… ffmpeg 安装,homebrew 真香系列

2、安装 nginx

安装 rtmp module 采用 stack overflow 该方式可以成功安装

// 因为我之前有通过 homebrew 装过nginx,所以需要先 unlink
brew unlink nginx
// 了解了一下,类似npm 切换 registry
brew tap denji/nginx
// 执行安装
brew install nginx-full --with-rtmp-module

Nginx常用命令

  1. nginx -s reload 重新加载配置文件
  2. nginx -s reopen 再次打开日志文件
  3. nginx -s stop 停止服务器
  4. nginx -s quit 退出服务器
  5. nginx 启动Nginx

Nginx目录

  • 安装位置 /usr/local/opt/nginx-full/bin/nginx
  • 配置文件所在目录 /usr/local/etc/nginx/nginx.conf
  • 服务器根目录 /usr/local/var/www

安装好 nginx 后,进行 rtmp 配置: ​

完整的配置文件可以从这里查看,可以备份下你当前的nginx.conf,然后用我提供的 nginx.conf 进行替换,然后执行 nginx -s reload,重新加载即可。

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application video {
            play /usr/local/var/www/video;
        }

        application live {
            live on;
            record off;
            hls on;
            # 这个路径是会有内容写到其中的
            hls_path /usr/local/var/www/live/hls/;
            hls_fragment 5s;
        }
    }
}

注意,其中的 /usr/local/var/www/video 目录如果不存在,可以手动创建一下。 ​

播放相关的配置

location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            # 注意,这里的路径需要和下面 rtmp 配置的路径一致,否则会报404
            alias /usr/local/var/www/live/hls/;
            expires -1;
            add_header Cache-Control no-cache;
        }

        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            # 这里的目录一定要准确,否则会报404
            root /usr/local/Cellar/rtmp-nginx-module/1.1.7.11-dev_3/share/rtmp-nginx-module/;
        }

3、FFmpeg 推流,拉流

推流脚本

ffmpeg -re -i video.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost/live/llccing

注意,执行上面命令的时候,有个video.mp4文件,所以需要在视频文件所在的目录运行该命令,或者指定绝对路径。视频资源在参考中已经提供,可以去下载。 ​

拉流脚本

ffplay rtmp://localhost:1935/live/llccing

先推流,再拉流,即可实现视频播放。

4、OBS 推流, VLC 拉流

OBS推流设置,如下图: image.png

VLC 拉流设置,如下图 image.png 如此就实现了通过 OBS 推流直播,通过 VLC 拉流观看直播。

5、成功展示

展示效果图如下 image.png

参考