1. 程式人生 > >linux下使用nginx+nginx-rtmp-module搭建流媒體伺服器,傳送即時影像

linux下使用nginx+nginx-rtmp-module搭建流媒體伺服器,傳送即時影像

1:前言

公司最近想做利用網路來傳輸視訊流的影響系統,然後我又開始鼓搗不太熟悉的linux系統,好在網上關於這方面的資源挺多,按照相關的設定以及方法能大部分完成,其他附上我搭建時遇到的一些小問題的解決辦法。

2:搭建的環境:

(1):linux系統:Ubuntu 16.04    (2):VM box虛擬機器  (3):電腦自帶的攝像頭或者USB攝像頭

3:搭建nginx+nginx-rtmp-module伺服器

(1):選用nginx和nginx-rtmp-module作為對外的伺服器,下面是安裝的命令:

sudo apt-get update

sudo apt-get -y install nginx

sudo apt-get -y remove nginx

sudo apt-get clean 

注:自動安裝nginx的相關套件,並設定好系統的環境,移除nginx套件之後,清空/etc/nginx/下面的設定檔:sudo rm -rf /etc/nginx/*

(2):安裝編譯的套件:

sudo apt-get install -y curl build-essential libpcre3-dev libpcre++-dev zlib1g-dev libcurl4-openssl-dev libssl-dev 

(3):建立網頁目錄:

sudo mkdir -p /var/wwx

(4):建立編譯用的目錄:

sudo mkdir -p ~/nginx_src

cd ~/nginx_src

(5):下載nginx-rtmp-module的原始包:

git clone http://github.com/arut/nginx-rtmp-module.git

(6):下載nginx的原始包(建議直接從官網下載):

注:nginx官網:http://nginx.org/en/download.html

wget http://nginx.org/download/nginx-1.13.6.tar.gz

tar -zxvf  nginx-1.13.6.tar.gz

(7):進入解壓縮之後的目錄,設定編譯引數:

cd nginx-1.13.6

./configure --prefix=/var/wwx --sbin-path=/usr/sbin/nginx --conf-psth=/etc/nginx/nginx.conf --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log 

--http-log-path=/var/log/nginx/access.log --with-http_ssl_module --without-http_proxy_module --add-module=/home/cqz123/nginx_src/nginx-rtmp-module

(8):編譯並安裝nginx:

make

sudo make install

(9):測試nginx是否安裝完成:

nginx -v

注:正常的話會顯示nginx的版本

(10):編輯/etc/nginx/nginx.conf設定檔,新增相關設定:

rtmp{
         server{
               listen 1935;
               ping 30s;
               notify_method  get;
               application rtmp{
                 live on;
            }
        }
     }
注意:此部分程式碼要新增在http{}外部,不然傳送串流
(11):啟動nginx系統服務,沒錯誤就代表成功了:

開啟nginx:sudo service nginx start

關閉nginx:sudo service nginx stop

4:安裝Strobe Media Playback

(1):下載Strobe Media Playback

mkdir -p ~/strobe_src

cd ~/strobe_src

wget http://downloads.sourceforge.net/project/smp.adobe/Strobe%20Media%20Playback%201.6%20Release%20%28source%20and%20binaries%29/StrobeMediaPlayback_1.6.328-full.zip

(2):解壓縮後,將最新版複製到/var/wwx/html/strobe目錄下:

unzip StrobeMediaPlayback_1.6.328-full.zip

sudo cp -r for\ Flash\10.1 /var/wwx/html/strobe

(3):建立indel.html,編輯/var/wwx/html/index.html,將內容改為:

<!DOCTYPE html>
<html>
<head>
<title>Live Streaming</title>

<!-- strobe -->
<script type="text/javascript" src="strobe/lib/swfobject.js"></script>
<script type="text/javascript">
  var parameters = {  
    src: "rtmp://ip地址/rtmp/live",  
     autoPlay: false,  
     controlBarAutoHide: false,  
     playButtonOverlay: true,  
     showVideoInfoOverlayOnStartUp: true,  
     optimizeBuffering : false,  
     initialBufferTime : 0.1,  
     expandedBufferTime : 0.1,  
     minContinuousPlayback : 0.1,  
     poster: "images/poster.png"  
  };  
  swfobject.embedSWF(
    "strobe/StrobeMediaPlayback.swf"
    , "StrobeMediaPlayback"
    , 1024
    , 768
    , "10.1.0"
    , "strobe/expressInstall.swf"
    , parameters
    , {
    allowFullScreen: "true"
    }
    , {
      name: "StrobeMediaPlayback"
    } );
</script>

</head>
<body>
<div id="StrobeMediaPlayback"></div>
</body>
</html>

注:其中ip地址代表你虛擬機器中ip的地址

5:使用avconv製作影像串流

(1):安裝libav-tools套件:

sudo apt-get install libav-tools

(2):在虛擬機器中使用主機攝像頭:

a:在命令列輸入:cd /dev/ 目錄下,然後ls後出現有video0或者video1等資料夾,說明你可以直接進行(3)步驟。

b:若不行,則可能是相應的USB驅動沒有裝好,要使用USB,就需要安裝擴充套件Oracle_VM_VirtualBox_Extension_Pack:

步驟:

1:下載Oracle_VM_VirtualBox_Extension_Pack,網址:http://download.virtualbox.org/virtualbox/

  選擇和你虛擬機器相對應的版本,如Oracle_VM_VirtualBox_Extension_Pack-5.0.20-106931.vbox-extpack

2:安裝到virtualbox, 在virtualbox管理器->管理->全域性設定->擴充套件,並在右上角的新增擴充套件,並勾選上。

請輸入圖片描述

3:新增usbcam, 在virtualbox管理器->設定->USB裝置->新增usbcam

請輸入圖片描述

4:重啟虛擬機器和virtualbox:

sudo reboot

5:啟動虛擬機器,點裝置,下拉列表就會增加攝像頭一欄,選擇對應的攝像頭就可以。

請輸入圖片描述

6:測試攝像頭,安裝cheese:

sudo apt-get install cheese

7:開啟cheese,若能看見影像則說明成功。

(3):連線上USB攝像頭之後,執行:

avconv -f video4linux2 -r 24 -i  /dev/video0 -f flv rtmp://localhost:1935/rtmp/live

(4):在虛擬機器的瀏覽器中攝入http://localhost或者http://ip地址  就能看到影像串流了,這是我的測試畫面:

因為USB攝像頭比較爛,出來的畫面不清楚,且我使用的是VLC播放器,有興趣的可以百度下vlc安裝方法,在開啟網路串流裡輸入

6:結束語:

因為不熟悉linux系統,架設好nginx到能出現畫面用了3天的時間,其中出現了好多奇怪的問題,有些問題按照網上的辦法也沒有解決,但是按照我這套流程走下來應該是不會再有問題了。另一個,使用avconf是使用的軟解的方式來解析視訊流,有一定的延遲,另一種方式是利用晶片本身硬解,其中涉及到H264解碼的問題,不知道是否因為電腦是雙顯示卡的緣故,這一塊老是報錯誤管道的問題,也找了很多方法也沒能解決。感興趣的可以找下。

參考連結:https://blog.gtwang.org/iot/raspberry-pi-nginx-rtmp-server-live-streaming/

            http://www.ncnynl.com/archives/201610/941.html