当前位置: 安卓之星 -> Linux开发 -> nginx视频直播/点播服务干货分享

nginx视频直播/点播服务干货分享

作者:网络 发表于: 2017-04-21 点击: 398 次

一、ubuntu14.04安装nginx及nginx_rtmp_module扩展

nginx根据是否已安装和安装的方式不同,有一下三种方式安装及扩展安装。

1.全新安装nginx和nginx_rtmp_module扩展

#!/bin/sh
apt-get update
apt-get install -y gcc libpcre3 libpcre3-dev openssl libssl-dev make git libxml2 libxml2-dev libxslt-dev libgd2-xpm-dev geoip-database libgeoip-dev
cd /usr/local/src/
git clone https://github.com/arut/nginx-rtmp-module.git
wget -c http://mirrors.sohu.com/nginx/nginx-1.9.14.tar.gz
tar zxvf nginx-1.9.14.tar.gz
cd nginx-1.9.14/
./configure–with-http_ssl_module –add-module=/usr/local/src/nginx-rtmp-module

make
make install
cd /usr/local/nginx/
ln -s `pwd` /sbin/nginx/usr/sbin/nginx
nginx -V
wget http://www.***.com/editor/attached/file/20160322/20160322112243_43972.txt
mv 20160322112243_43972.txt
/etc/init.d/nginx
chmod +x /etc/init.d/nginx
service nginx restart

2.apt-get安装过nginx的,需重新编译安装并添加nginx_rtmp_module扩展

#!/bin/sh
apt-get -y install dpkg-dev libxml2 libxml2-dev libxslt-dev libgd2-xpm-dev geoip-database libgeoip-dev libpcre3 libpcre3-dev libssl-dev openssl
nginx -V 2>a
nginx_config=`cat a |grep configure | cut -d ‘:’-f 2`
nginx_version=`cat a|grep ‘nginx version’|cut -d ‘/’-f 2 | cut -d ‘ ‘-f 1`
rm -f a
cd /usr/local/src/
# apt-get install -y git
git clone https://github.com/arut/nginx-rtmp-module.git
#采用搜狐开源镜像下载对应的nginx版本
# apt-get source nginx
wget -c “http://mirrors.sohu.com/nginx/nginx-${nginx_version}.tar.gz”
tar zxvf “nginx-${nginx_version}.tar.gz”
cd “nginx-$nginx_version”
echo “./configure ${nginx_config} –add-module=/usr/local/src/nginx-rtmp-module”| sh
make
#强制覆盖
cp -rfp objs/nginx /usr/sbin/nginx
#检查是否错误
/usr/sbin/nginx -t
#重启nginx
service nginx restart
nginx -V

3.已经编译安装过nginx的,可以直接添加nginx_rtmp_module扩展

找到安装nginx的源码根目录,如果没有的话下载新的源码
我的安装源码根目录 /usr/local/src/nginx-1.4.6
cd /usr/local/src/
# apt-get install -y git
git clone https://github.com/arut/nginx-rtmp-module.git
nginx -V 2>a
nginx_config=`cat a |grep configure | cut -d ‘:’-f 2`
rm -f a
cd nginx-1.4.6
echo “./configure ${nginx_config} –add-module=/usr/local/src/nginx-rtmp-module” | sh
make
#强制覆盖
cp -rfp objs/nginx/usr/sbin/nginx
#检查是否错误
/usr/sbin/nginx -t
#重启nginx
service nginx restart
nginx -V

二、配置使用

编辑nginx的配置文件(/etc/nginx/nginx.conf或/usr/local/nginx/conf/nginx.conf)

1.在http节点外层添加一个rtmp节点,具体内容如下:

rtmp {
server {
listen 1935;
chunk_size 4096;
max_connections 100;
#音视频流上传和播放地址都是 rtmp://你的IP/live/streamName
#streamName自己是自定义的。
application live {
live on;
record off;
}
#这个是上传地址 rtmp://你的IP:/hls/streamName2
#直播的地址也是这个,点播播放地址在下面
application hls {
live on;
hls on;
#请先创建相应目录(mkdir -p /var/www/hls/ && chown -R www-data:www-data /var/www )
hls_path /var/www/hls/;
}
}
}

2.在下面的http节点内部添加一个server节点,具体内容如下:

#这个是点播播放地址 http://你的IP:8080/hls/streamName2.m3u8
server {
listen 8080;
index index.html;
root /var/www/hls/;
location /hls {
alias /var/www/hls/;
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
add_header Cache-Control no-cache;
}
}
说明:
这个节点是配置的一个虚拟主机,目的是为了播放上面点播服务生成的视频流。
url中streamName2是根据录制推流的名字来的。需要保持一致。
默认下,该地址有一定的时限行,需要每次都先确认一下,服务器上是否存在该m3u8文件。

3.测试使用

a.推视频流到服务器
(1).使用linux上ffmpeg工具模拟推流到服务器
安装ffmpeg工具
apt-get -y install build-essential git-core checkinstall yasm texi2html libvorbis-dev libx11-dev libvpx-dev libxfixes-dev zlib1g-dev pkg-config netcat libncurses5-dev libfaac-dev libmp3lame-dev libx264-dev
FFMPEG_VERSION=2.3.3
cd /usr/local/src
if [ ! -d “/usr/local/src/ffmpeg-${FFMPEG_VERSION}”]; then
sudo wget “http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2”
sudo tar -xjf “ffmpeg-${FFMPEG_VERSION}.tar.bz2”
fi
cd “ffmpeg-${FFMPEG_VERSION}”./configure–enable-version3 –enable-postproc –enable-libvorbis –enable-libvpx –enable-gpl –enable-nonfree –enable-pthreads –enable-libfaac –enable-libmp3lame –enable-libx264
make
checkinstall –pkgname=ffmpeg –pkgversion=”5:${FFMPEG_VERSION}”–backup=no –deldoc=yes–defaultffmpeg –version
使用ffmpeg工具把本地的视频文件模拟推送到服务器
ffmpeg -re -i /data/localFile.mp4 -c copy -f flv rtmp://你的IP/live/streamName
这个命令会把本地的localFile.mp4模拟推入live直播流,然后可以通过 rtmp://你的IP/live/streamName地址观看该直播。
ffmpeg -re -i /data/localFile.mp4 -c copy -f flv /var/www/hls/streamName
这个命令会把本地的localFile.mp4模拟推入到hls应用中,然后可以通过rtmp://你的IP/hls/streamName 地址观看该直播,也可以通过播放器打开http://你的IP:8080/hls/streamName.m3u8查看该视频的点播
(2).Windows上使用一些专业工具推流到服务器
我是使用 锐动PC录制/直播SDK(http://www.rdsdk.com/contrast/pc3.html)[非打广告]包中的demo来推流的,这个可以免费使用且免安装。
网上推荐的常见推流测试工具有 OBS, XSplit, FMLE 等。
推流的地址是 rtmp://你的IP/hls/streamName 或者 rtmp://你的IP/live/streamName
(3).自己编写手机等设备的APP,录制手机摄像头捕捉到的头像及麦克风捕捉到的声音,一起推送到服务器。
这类安卓或IOS的SDK也比较多。可自行开发。
b.使用播放器点播播放视频
Windows和linux桌面版都可以是VLC播放器打开 http://你的IP:8080/hls/streamName.m3u8这个地址观看直播(这个播放器不支持rtmp直播播放?)
c.使用Web浏览器在网页上播放直播视频
编写HTML页面index.html:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv=”content-type” content=”text/html; charset=utf-8″>
<title>HLS Player</title>
</head>
<body>
<video poster=”poster.png” height=”720″ width=”1280″ controls>
<source src=”http://你的IP/hls/streamName.m3u8″ type=”application/vnd.apple.mpegurl”/>
<p class=”warning”>Your browser does not support HTML5 video.</p>
</video>
</body>
</html>
修改IP,保存页面至/var/www/hls/index.html中。
用苹果设备访问http://你的IP:8080/index.html就可以看到该直播了。
由于H5兼容性问题,只能在苹果设备上用浏览器访问。
如果想要其他设备都能访问需做兼容处理。一般用flash嵌入网页中去播放直播(rtmp://…)或点播 (http://…xxx.m3u8)
d.使用nginx_rtmp_module扩展包内文件来同时录制和直播测试
在nginx_rtmp_module扩展包内有测试文件,复制该文件夹内的文件到站点根目录(如/var/www/html)
cp -r /usr/local/src/nginx-rtmp-module/test/www/* /var/www/html;
修改index.html文件中rtmp的地址为 rtmp://你的IP/live/streamName
修改record.html文件中flashvars的streamer为 rtmp://你的IP/live 并改flashvars的file值为streamName
保存。

使用浏览器同时打开两个页面 :
http://你的IP:8080/index.html(这个是直播观看的地址)
http://你的IP:8080/record.html(这个是直播录像的地址,采用的是flash录制电脑的摄像头[请点击允许])

三、其他

1.nginx-rtmp-module的配置请看Wiki https://github.com/arut/nginx-rtmp-module/wiki/Control-module
2.以上环境只是测试学习使用。公网上必须考虑权限安全,网络带宽,视频质量等。
3.此类产品网络上也比较多,例如阿里云基础服务中就有视频直播点播的功能。

相关文章

相关文章

赶快留言冒泡

  • 评论 (0)
  • 引用通告 (0)
目前还没有任何评论.
目前还没有任何Trackbacks和Pingbacks.
吐个泡浮上去.