Ubuntu16.04搭建nginx-rmtp流媒体服务(完整流程附网页展示)

最近帮导师做一个多目标追踪项目的落地,现在算是有点不错的效果,特此记录一下搭建流媒体服务的过程。


0.准备工作

为了保证安装过程顺利进行,请尽量保证操作系统为ubuntu且版本>=16.04,并更换软件源为阿里源或者清华源

请下载本文源码,下载地址在这里:https://pan.baidu.com/s/1X_KWu1RAz_387oN6O9PH9w
提取码:7szp

1.安装nginx依赖软件

sudo apt-get install libpcre3 libpcre3-dev libssl-dev zlib1g-dev

2.下载nginx,openssl,nginx-rtmp-module源码

需要注意的是,nginx和openssl必须做到版本的对应,否则容易出问题。建议直接从我提供的链接下载!!

  • 下载nginx源码,版本号为1.8.1,下载地址在这里
  • 下载openssl源码,版本号为1.0.2k,下载地址在这里
  • 下载nginx-rtmp-module源码,下载地址在这里

将以上3个源码都解压到同一文件下,让他们整齐排列,准备开整。
Ubuntu16.04搭建nginx-rmtp流媒体服务(完整流程附网页展示)_第1张图片

3.编译源码

  • cd进入文件夹nginx-1.8.1,执行命令1
./configure  --with-openssl=../openssl-1.0.2k --add-module=../nginx-rtmp-module-master

如果命令1执行成功,会有下图的展示(not found请直接忽略):

Ubuntu16.04搭建nginx-rmtp流媒体服务(完整流程附网页展示)_第2张图片
如果有错误,请排查当前文件夹是否为nginx-1.8.1,以及三个源码文件夹是否在同一文件夹下。如果还有错误,百度或者Google一下,都能找到解决方法的。

  • 然后cd进入nginx-1.8.1文件夹下的objs文件夹,删除MakeFile文件中第三行的’-Werror’

    在这里插入图片描述

  • 删除完后,回到nginx-1.8.1文件夹,开始执行命令2

    make
    

    这个命令执行时间较长,请耐心等待…

Ubuntu16.04搭建nginx-rmtp流媒体服务(完整流程附网页展示)_第3张图片

Two thousand years later,终于执行完成了。相信只要不是特别的运气,99.9%都能成功的。成功的展示如下:

Ubuntu16.04搭建nginx-rmtp流媒体服务(完整流程附网页展示)_第4张图片
如果有错误,请排查当前文件夹是否为nginx-1.8.1,以及三个源码文件夹是否在同一文件夹下。如果还有错误,百度或者Google一下,都能找到解决方法的。

  • 最后执行命令3

    sudo make install
    

    在这里插入图片描述

  • 现在来测试一下nginx-rtmp是否安装成功,执行命令4(启动nginx服务)

    sudo /usr/local/nginx/sbin/nginx
    

    只要没有报错,那就是安装成功了!

4.配置Nginx服务

  • nginx的配置文件在**/usr/local/nginx/conf/nginx.conf**,主要需要配置的地方有两个:

    1. 配置rtmp服务,打开nginx.conf文件,在17行的http配置前编写rtmp配置。详细配置如下:

      rtmp {
      		server {
      				listen 1935; # 监听端口
          		chunk_size 4096;
              application live {
                  live on;
                  record off;
              }
      		}
      }
      

      Ubuntu16.04搭建nginx-rmtp流媒体服务(完整流程附网页展示)_第5张图片

    2. 配置http服务,如果有需要可以修改http里的内容

      Ubuntu16.04搭建nginx-rmtp流媒体服务(完整流程附网页展示)_第6张图片

  • 配置好nginx.conf,需要重新加载才能生效,命令如下:

    sudo /usr/local/nginx/sbin/nginx -s reload
    

    重启之后,我尝试从window来访问虚拟机中的nginx服务,假设你的虚拟机ip是192.168.208.130,直接在浏览器输入192.168.208.130:80,由于我没有改过http的端口,所以端口号就是默认的80。如果你改过请把80替换为你设置的端口号。

    Ubuntu16.04搭建nginx-rmtp流媒体服务(完整流程附网页展示)_第7张图片

    由于大家使用的服务器不同,可能是阿里云的或者自己的虚拟机,难免会出现一些错误。我觉得可能会出现以下的错误:

    • 如果是虚拟机,可能需要先ping一下虚拟机的ip,保证虚拟机和主机是连通的。
    • 防火墙没有打开80端口. 解决方法:1.直接关闭防火墙 2.开放80端口 sudo ufw allow 80

注:以上测试不是必须的。

5.测试前的预备工作及说明

  1. 先确认下自己的rtmp端口号,我目前的端口号为默认的1935

  2. 为了快速看到效果,且考虑到一些朋友没有界面操作,就不用obs进行推流,采用ffmpeg进行推流,最后网页进行视频的展示。

6.完整测试,开整!

  1. 安装ffmpeg,参考这篇文章

  2. 上传一段视频到服务器的某个文件夹下,我将视频放在了Videos文件夹下

  3. 使用命令进行推流

    ffmpeg -re -i ~/Videos/xinyang.mp4 -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/live/test"
    

    注:视频路径和rtmp端口号记得替换为自己的。
    Ubuntu16.04搭建nginx-rmtp流媒体服务(完整流程附网页展示)_第8张图片

  4. 此时已经推流成功了,作为展示的前端代码如下:

    
    <html>
    
    <head>
        <meta charset="utf-8">
        <title>title>
        <link href="css/video-js.css" rel="stylesheet">
        <script src="js/videojs-ie8.min.js">script>
    head>
    
    <body>
        <video id="my-video" class="video-js" controls preload="auto" width="960" height="400" autoplay data-setup="{}">
          	
            <source src="rtmp://192.168.208.130:1935/live/test" type="rtmp/flv">
        video>
    
        <script src='js/video.js'>script>
        <script src="js/videojs-flash.min.js">script>
        <script src="js/videojs-contrib-hls.js">script>
    
        <script language="JavaScript">
            videojs("my-video").ready(function () {
                var myPlayer = this;
                myPlayer.play();
            });
        script>
    body>
    
    html>
    

    注:src就是ffmpeg推流的地址,且ip需要换成真实ip,不能用127.0.0.1

  5. 用WebStorm打开网页,就可以看到效果了。我用的是一个mv,效果展示如下:

    Ubuntu16.04搭建nginx-rmtp流媒体服务(完整流程附网页展示)_第9张图片
    Ubuntu16.04搭建nginx-rmtp流媒体服务(完整流程附网页展示)_第10张图片

    非常地流畅,就像在网页看电影一样。这样一个简单的直播就做好了。

7.写在最后

如何你在搭建服务和测试的过程中有任何的问题,欢迎与我进行交流,我的邮箱是[email protected]。接下来,我会把完整的流程录个教程发到B站,供大家交流学习。

另外,其实我在导师的项目中并不是用的ffmpeg进行推流,而是采用的Javacv进行推流。关于Javacv推流的文章,我计划下周之前把它写出来。


如有不当之处,欢迎指出!

你可能感兴趣的:(ML,&,DL,rtmp,计算机视觉,ffmpeg,推流,nginx-rtmp)