nginx視頻直播/點播服務干貨分享


一、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.此類產品網絡上也比較多,例如阿里雲基礎服務中就有視頻直播點播的功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM