最近帮导师做一个多目标追踪项目的落地,现在算是有点不错的效果,特此记录一下搭建流媒体服务的过程。
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必须做到版本的对应,否则容易出问题。建议直接从我提供的链接下载!!
将以上3个源码都解压到同一文件下,让他们整齐排列,准备开整。
3.编译源码
- cd进入文件夹nginx-1.8.1,执行命令1
./configure --with-openssl=../openssl-1.0.2k --add-module=../nginx-rtmp-module-master
如果命令1执行成功,会有下图的展示(not found请直接忽略):
如果有错误,请排查当前文件夹是否为nginx-1.8.1,以及三个源码文件夹是否在同一文件夹下。如果还有错误,百度或者Google一下,都能找到解决方法的。
-
然后cd进入nginx-1.8.1文件夹下的objs文件夹,删除MakeFile文件中第三行的’-Werror’
-
删除完后,回到nginx-1.8.1文件夹,开始执行命令2
make
这个命令执行时间较长,请耐心等待…
Two thousand years later,终于执行完成了。相信只要不是特别的运气,99.9%都能成功的。成功的展示如下:
如果有错误,请排查当前文件夹是否为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**,主要需要配置的地方有两个:
-
配置rtmp服务,打开nginx.conf文件,在17行的http配置前编写rtmp配置。详细配置如下:
rtmp { server { listen 1935; # 监听端口 chunk_size 4096; application live { live on; record off; } } }
-
配置http服务,如果有需要可以修改http里的内容
-
-
配置好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替换为你设置的端口号。由于大家使用的服务器不同,可能是阿里云的或者自己的虚拟机,难免会出现一些错误。我觉得可能会出现以下的错误:
- 如果是虚拟机,可能需要先ping一下虚拟机的ip,保证虚拟机和主机是连通的。
- 防火墙没有打开80端口. 解决方法:1.直接关闭防火墙 2.开放80端口
sudo ufw allow 80
注:以上测试不是必须的。
5.测试前的预备工作及说明
-
先确认下自己的rtmp端口号,我目前的端口号为默认的
1935
-
为了快速看到效果,且考虑到一些朋友没有界面操作,就不用obs进行推流,采用ffmpeg进行推流,最后网页进行视频的展示。
6.完整测试,开整!
-
安装ffmpeg,参考这篇文章
-
上传一段视频到服务器的某个文件夹下,我将视频放在了Videos文件夹下
-
使用命令进行推流
ffmpeg -re -i ~/Videos/xinyang.mp4 -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/live/test"
注:视频路径和rtmp端口号记得替换为自己的。
-
此时已经推流成功了,作为展示的前端代码如下:
<!DOCTYPE html> <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="{}"> <!-- src中的ip需要换为真实ip,不能用127.0.0.1 --> <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
-
用WebStorm打开网页,就可以看到效果了。我用的是一个mv,效果展示如下:
非常地流畅,就像在网页看电影一样。这样一个简单的直播就做好了。
7.写在最后
如何你在搭建服务和测试的过程中有任何的问题,欢迎与我进行交流,我的邮箱是xpluo1949@163.com。接下来,我会把完整的流程录个教程发到B站,供大家交流学习。
另外,其实我在导师的项目中并不是用的ffmpeg进行推流,而是采用的Javacv进行推流。关于Javacv推流的文章,我计划下周之前把它写出来。
如有不当之处,欢迎指出!