Android中直播視頻技術探究之---視頻直播服務端環境搭建(Nginx+RTMP)

分類:IT技術 時間:2016-10-16

一、前言

前面介紹了android中視頻直播中的一個重要類ByteBuffer,不了解的同學可以 點擊查看 到這裏開始,我們開始動手開發了,因為我們後續肯定是需要直播視頻功能,然後把視頻推流到服務端,本地在進行拉流播放的流程。所以這個過程中,我們需要首先來把服務端這個中間環節的工作搞定,後續再弄推流和拉流功能。現在推流大部分都是使用RTMP/HLS協議的,關於這兩個協議的區別:


所以我們服務端搭建就需要用這兩個協議,不過本文放心了,不會去手動的編寫一套協議代碼的,誰叫這個世界屬於開源呢?


需要的工具和源碼包:

1、VLC觀看視頻流,ffmpeg工具進行推流

2、nginx源碼包,nginx-rtmp-module模塊源碼包,pcre源碼包,openssl源碼包


二、安裝nginx+rtmp

第一、下載源碼包

在github上我們偉大的戰鬥名族俄羅斯人開發了基於nginx服務器擴展功能模塊的rtmp和hls協議功能,所以說,我們的工作非常簡單,把源碼搞下來編譯即可。但是在這個過程中還是有些操作問題的,這裏就把流程梳理一遍:

1、首先你得想辦法搞一臺服務器,不管是買還是借

2、下載nginx源碼包+pcre源碼包+openssl源碼包

這三個源碼包網上都有,後續兩個包是在編譯nginx的時候需要用到。

3、下載nginx-rtmp-module源碼包

這個直接去github上去下載即可:https://github.com/arut/nginx-rtmp-module


第二、編譯安裝

到這裏就把所有的源碼包都搞齊了,下面把這些源碼包放到服務器中的指定目錄下:


然後使用tar命令直接解壓即可:tar -zxvf xxxx.tar.gz

這時候就開始編譯nginx了,首先進入到nginx解壓目錄下,然後運行命令:

./configure --prefix=/usr/local/nginx_rtmp/nginx-1.9.9

--prefix是nginx編譯安裝之後的目錄

運行報錯:./configure: error: the HTTP rewrite module requires the PCRE library


需要添加pcre模塊,修改命令,添加 --with-pcre=pcre的源碼路徑 

./configure --prefix=/usr/local/nginx_rtmp/nginx-1.9.9 --with-pcre=/usr/local/nginx_rtmp/pcre-8.34


再次運行,可以了,但是這時候說明nginx代碼沒有問題了,下面就需要把rtmp模塊加到nginx編譯中:

./configure --prefix=/usr/local/nginx_rtmp/nginx-1.9.9 --with-pcre=/usr/local/nginx_rtmp/pcre-8.34  --add-module=/usr/local/nginx_rtmp/nginx-rtmp-module

直接使用 --add-module=nginx的rtmp模塊代碼路徑

運行報錯:./configure: error: SSL modules require the OpenSSL library


需要添加openssl模塊,添加 --with-openssl=openssl的源碼路徑

./configure --prefix=/usr/local/nginx_rtmp/nginx-1.9.9 --with-pcre=/usr/local/nginx_rtmp/pcre-8.34 --with-openssl=/usr/local/nginx_rtmp/openssl-1.0.0d --add-module=/usr/local/nginx_rtmp/nginx-rtmp-module

編譯運行成功

然後運行make && make install 命令進行安裝即可。

註意:

如果想加上HLS功能的,可以使用這個命令:--add-module=/usr/local/nginx_rtmp/nginx-rtmp-module/hls,本文不介紹了HLS協議了,因為配置和RTMP差不多。


三、配置RTMP協議

這時候在編譯安裝之後的目錄中


其中conf目錄中存放nginx的配置文件,sbin目錄中是運行nginx的命令,那麽我們先來看看如何配置nginx,讓其具有rtmp功能:

rtmp {
  server {
    listen 1395;
    chunk_size 4096;
    application mylive {
        # enable live streaming
        live on;
    }
  }
}

當然還有很多其他配置,可以在使用的時候根據具體需求添加即可。


這裏配置rtmp協議信息,需要註意的是端口和應用名稱,比如這裏端口是:1395,應用名是:mylive,那麽後續推流的地址就是:

rtmp://server.xxx.com:1395/mylive/rtmpstream

其中rtmpstream是隨便定義的,但是後續拉流地址必須也是這個地址。


還有一個細節就是,nginx默認的http協議信息中的端口是80,所以在後續運行的時候會出現端口占用的問題,因為這裏現在只需用rtmp協議,所以直接把http協議的端口改成不常用的一個端口,讓nginx運行成功即可。


四、運行nginx

信息配置好了之後,下面我們就來運行nginx吧,進入sbin目錄下,運行命令:


然後查看進程信息:


因為我的機器中運行了兩個nginx程序,所以有兩個。

再看看1395端口情況:


看到,這時候端口還沒有建立,因為我們還是沒開始推流呢。


五、測試

上面就把環境搭建好了,下面就來測試一下吧,因為方便測試,直接使用PC上去推一個流做測試即可,後續會詳細介紹Android中如何進行推流,PC上推流有一個比較好用的工具:ffmpeg,這個是開源的,用C語言開發的,所以Android平臺在使用這個模塊推流的話,就需要使用native層做橋接了,github地址:https://github.com/FFmpeg/FFmpeg,不過這個工具在Windows下已經編譯好了工具,直接去官網下載即可:https://ffmpeg.org,這個工具包功能很強大的,可以做視頻編碼,加字幕,水印等效果的。


下載了Windows平臺的工具包之後,再把命令配置到環境變量中,直接在命令行中進行推流:

ffmpeg -re -i D:\tmp.mp4 -f flv rtmp://www.wjdiankong.cn:1395/mylive/rtmpstream

這裏我把本地的一個mp4文件推流到服務器中,然後這時候我們還需要拉流進行觀看,這個就需要一個很常用的流媒體工具:VLC了,可以自行下載這個工具即可,安裝之後,在打開選項中,選擇網絡流媒體:


輸入我們需要拉流的地址即可,點擊播放,這時候在運行ffmpeg命令進行推流即可:


再推的過程中,我們可以去後臺查看端口的狀態了:


看到了,這時候端口開始建立了,正在推流,而且這時候拉流也有視頻效果了:



為了有動態效果,特定做了gif,圖有點大,所以有點卡頓:



六、流程分析

到這裏,我們就完成了視頻直播的後臺環境搭建,也是我們後續要介紹推流和拉流的中間環節,下面在來看一下整個直播的推拉流的流程:


推拉流端都支持PC端和移動端的,采用的協議大部分都是RTMP或者是HLS。而且還有一個比較好的推拉流工具包:FFMpeg,

所以現在很多直播的App,一個主播先出點血花錢買一個比較牛逼的設備(推流設備),然後就可以在家坐著賺錢了,而有一些土豪就開始拉流觀看,送錢!!



其實,有時候服務器的結構可能如下:


這裏會把推流的視頻保存到一個地方,然後既可以支持視頻的點播,也可以支持視頻的直播了!


最後再來看一下現在很多大公司已經開始開發了整個視頻直播功能的SDK,這裏看一下騰訊雲推出的錄制+播放功能的SDK:


他的功能還是很全的,可以支持本地移動設備的推流(視頻采集一般就是攝像頭和桌面),然後對采集的視頻做一些處理,然後在進行拉流播放,可以支持硬件加速,視頻解碼等功,這個也是我們後續會一一介紹的功能。


因為本文只是介紹環境搭建,所以真正在開發的過程中還會遇到一些問題的,到時候就需要去配置服務端信息了!


七、總結

本文主要介紹了如何搭建視頻直播的服務端環境,這個是後續介紹推流和拉流的關鍵中間點,後續測試都需要這個環境的,我們采用了市面上常用的技術:Nginx+RTMP協議,需要弄到源碼包,然後編譯安裝即可,然後為了驗證效果,在Windows中使用了FFMpeg工具進行推流,使用VLC工具進行拉流視頻觀看,這個流程就算是通了,後續要做的就是如何把Android中的攝像頭視頻數據和桌面視頻數據進行推流,以及拉流觀看的功能。


更多內容:點擊這裏

關註微信公眾號,最新Android技術實時推送




Tags: Android 俄羅斯 服務器 服務端 技術

文章來源:


ads
ads

相關文章
ads

相關文章

ad