项目简介:视频直播网站由三个部分构成:1.推流端 2.服务器 3.拉流端。在该项目中,推流端用ffmpeg完成,服务器由NGINX+RTMP模块完成,拉流端使用VLC或者网页完成。
一、开发环境简介:
推流端:系统:Debian9/或者任意安装了ffpmeg的局域网主机 工具:ffmpeg
服务器:系统: Debian9 工具:NGINX+RTMP
拉流端:系统:WINDOWS 10 工具:VLC播放器,WEB
二、构建服务器
服务器由NGINX+RTMP构成。NGINX是HTTP服务器,RTMP是附加模块。
其中NGINX我选择的是用源码编译方式进行安装,因为这种方式可以自定义安装指定的模块以及最新版本。
首先配置各项依赖库。
1.安装gcc g++依赖库
sudo apt-get install build-essential sudo apt-get install libtool
2.安装pcre依赖库
sudo apt-get update sudo apt-get install libpcre3 libpcre3-dev
3.安装zlib依赖库
sudo apt-get install zlib1g-dev
4.安装SSL依赖库
sudo apt-get install openssl libssl-dev
5.安装NGINX
#下载NGINX(到HOME目录)
wget http://nginx.org/download/nginx-1.13.10.tar.gz
#解压
tar -zxvf nginx-1.13.10.tar.gz
#下载RTMP(到HOME目录)
git clone https://github.com/arut/nginx-rtmp-module.git
#进入NGINX解压目录
cd nginx-1.13.10
#配置
./configure --prefix=/usr/local/nginx --add-module=/root/nginx-rtmp-module --with-http_ssl_module
#编译
make
#安装
sudo make install
#打开nginx配置文件
cd /usr/local/nginx/conf/
sudo nano nginx.conf
#user nobody; worker_processes auto; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root /usr/local/nginx/nginx-rtmp-module/; } #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} } rtmp { server { listen 1935; #服务端口,默认1935,避开重要端口即可 application live { live on; } application hls_alic{ live on; hls on; hls_path /tmp/hls; } } }
#开启nginx服务
cd /usr/local/nginx/sbin
sudo ./nginx
#创建软链接,便于启动
sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#如要查看NGINX服务是否开启,请打开浏览器并输入localhost,如果看到nginx页面即为成功,或使用以下代码
ps -ef|grep nginx netstat -antup | grep 1935
三、配置推流端
简易的推流端使用ffmpeg即可完成。
1. 安装ffmpeg
sudoapt-get update
sudo apt-get install ffmpeg
2.启用ffmpeg进行推流
该命令适用于局域网内或者其他所有可以与服务器通讯的主机,也就是说可以在其他机器上推流,也可以在本机上推流。
ffmpeg -re -i 1.mp4 -c copy -f flv "rtmp://localhost/live"
四、配置拉流端
1.使用软件播放:
如果你想直接测试能否拉流,推荐使用VLC(www.videolan.org/),这是一个兼容各平台的工具。
1.1.下载并安装完成后,打开VLC,左上角媒体-打开网络流
1.2.在URL栏内输入服务器所在地址,rtmp://10.10.10.4/live (此处也可以填网址,只要你做了DNS解析就可以,例如rtmp://zhibo.com/live)
2.如果你想要在网页中播放该视频,请新建一个html5文档。
2.1 新建一个工程并新建一个html5文件。
cd /usr/local/nginx/html
先删除原来的index.html,再新建一个新的
nano index.html
2.2 复制以下代码并用浏览器浏览,注意开启flashplayer
<html> <head> <title>Live</title> <meta charset="utf-8"> <link href="http://vjs.zencdn.net/5.5.3/video-js.css" rel="stylesheet"> <!-- If you'd like to support IE8 --> <script src="http://vjs.zencdn.net/ie8/1.1.1/videojs-ie8.min.js"></script> <script src="http://vjs.zencdn.net/5.5.3/video.js"></script> </head> <body> <video id="my-video" class="video-js" controls preload="auto" width="640" height="300" poster="http://ppt.downhot.com/d/file/p/2014/08/12/9d92575b4962a981bd9af247ef142449.jpg" data-setup="{}"> <source src="rtmp://你的IP/live/" type="rtmp/flv"> </p> </video> </body> </html>
2.3测试
打开浏览器,输入你的RTMP服务器IP,效果应该如下
就成功了。
发表评论