1. 程式人生 > >如何搭建視訊轉碼叢集、播放伺服器

如何搭建視訊轉碼叢集、播放伺服器

本文由作者張遠道授權網易雲社群釋出。


轉碼叢集的搭建


隨著媒體技術的發展,以及硬體裝置的普及和移動裝置的觸角延伸之社會各個角落,人們可以隨時隨地產生資訊。而這些海量資訊中,有不少多媒體資訊。多媒體信 息成為了人們資訊分享的重要方式。毫不誇張地說,現在是一個資訊爆炸的時代。傳統的電視,電影,視訊網站,及至移動的自媒體(自由人)無時無刻不在吞吐著媒體資訊。


這些海量資訊的存在給儲存和分享都帶來了挑戰。挑戰主要有兩方面,一是如何儘可能以小成本來儲存這些資訊。二是如何讓這些千差萬別的裝置產生的資訊能被千 差萬別是裝置觀看。解決問題一的方法是在儘可能地縮小這些多媒體資訊的同時不降低媒體資訊的質量。解決問題二的方法是將這些有千差萬別裝置產生的格式各異 的視訊編碼成統一的能支援各種裝置的視訊格式。


幸運地是,確實存在在實踐上已經被證明是切實可行的方案存在,即視訊編碼技術。可以構建視訊編碼叢集,將原始視訊編碼成目標格式,在再編碼的過程中,完成視訊壓縮和統一制式,從而實現儲存降低及制式統一。從視訊的角度可以將現在 裝置分割成兩個陣營,一個是蘋果陣營,另一個是非蘋果陣營。蘋果陣營的視訊只要是m3u8為封裝格式,內部編碼配以H264和AAC即可。而非蘋果陣營則 是MP4為封裝格式,內部編碼已H264和AAC即可。據初略統計H264+aac的編碼組合可以達到2:1到4:1的壓縮比,可以顯著地降低儲存空間。


下圖是一個採用gearman框架搭建的簡易轉碼叢集(當然該簡易叢集曾經有1~2人力一個月左右的時間搭建完成,並在生產環境中部署)。


   
該簡易轉碼叢集由四個模組組成:

  •   JobServer負責接收API伺服器的請求,建立轉碼Job,將Job分發給transcode-worker。

  •   API伺服器負責接收第三方產品的轉碼請求,將其轉發給JobServer。

  •   transcode-worker接收JobServer的作用請求,並且完成轉碼作業。

  •   分散式檔案系統主要用於儲存原視訊和目標視訊。之所以用分散式檔案系統是因為transcode-worker部署在不同伺服器上,transcode-worker需要能夠在分散式環境中訪問視訊檔案。  

所需技術:

  1.    gearman分散式任務排程框架。非常輕量級,支援C,Java,Python,PHP,C#,Ruby等各種語言,具有任何語言背景的人可以再一起工作。

  2.    ffmpeg,轉碼領域的瑞士軍刀。幾乎支援市面上所有商業視訊格式。實驗室格式除外。

  3.    搭建API的web伺服器技術。本人比較習慣J2EE的Spring那套。當然你可以用ruby on rails,點Net等。

  4.    基礎的音視訊知識。包括H264編碼技術,視訊解壓縮知識等。

 

到這裡,一個內容生產系統基本成型。但是還需要一個視訊內容的deliver系統,即視訊播放伺服器[叢集]。這裡將詳細地記錄視訊伺服器的搭建步驟。

 

 

如何搭建flv媒體伺服器


環境

作業系統:linux 2.6.32-5-amd64。Linux 版本即可。

伺服器:nginx 1.3.3。nginx的版本可以更高。

客戶端:jwplayer

 

搭建步驟

安裝nginx with http_module_flv

1、  下載nginx

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

2、  解壓

tar –xzvf nginx-1.3.3.tar.gz

3、  安裝

cd nginx-1.3.3

./configure  --prefix=/home/user/nginx_flv  --with-http_flv_module

4、  配置

#user  nobody;

worker_processes  1;

 

#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  'remoteaddrremote_user [timelocal]"request" '

                      'statusbody_bytes_sent "$http_referer" '

                      '"httpuseragent""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       8088;

        server_name  localhost;

 

        #charset koi8-r;

 

        access_log  logs/host.access.log  main;

 

        location / {

            root  /home/fs/video;

            index  index.html index.htm;

           autoindex on;

           location ~ \.flv{

              flv;

           }

        }

 

        #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;

        }

 

       

        # deny access to .htaccess files, if Apache's document root

        # concurs with nginx's one

        #

        #location ~ /\.ht {

        #    deny  all;

        #}

    }

}

 

說明:綠色部分為配置flv的部分。/home/fs/video目錄為資源存放路徑,包括jwplayer以及測試用的視訊檔案都存放於該目錄。

5、  配置jwplayer伺服器。

下載開源的jwplayer,比如mediaplayer-5.10。解壓之後將player.swf以及jwplayer.js置於/home/fs/video。並將測試視訊 zyd.flv 也置於/home/fs/video。

6、  測試

在瀏覽器中輸入 http://hostip:8080/player.swf?type=http&file=zyd.flv

可以隨意拖動進度條,可以看到視訊正常播放。

 

 

如何搭建MP4媒體伺服器

 

環境

作業系統:linux 2.6.32-5-amd64。Linux 版本即可。

伺服器:nginx 1.3.3。nginx的版本可以更高。

客戶端:jwplayer。或者任何播放器即可。

搭建步驟

安裝nginx with nginx_mod_h264_streaming

1、  下載nginx 和nginx_mod_h264_streaming

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

git clone https://github.com/vivus-ignis/nginx_mod_h264_streaming.git

2、  解壓

tar –xzvf nginx-1.3.3.tar.gz

3、  安裝

cd nginx-1.3.3

#nginx_mod_h264_streaming為第三方模組。

./configure  --prefix=/home/user/nginx_flv  --add_module=nginx_mod_h264_streaming_2.2.7

4、  配置

#user  nobody;

worker_processes  1;

 

#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  'remoteaddrremote_user [timelocal]"相關文章:
【推薦】 分散式儲存系統Kudu與HBase的簡要分析與對比
【推薦】 因為喜歡“對抗”,這位安全首席架構師一年為網易雲節省上千萬

posted @ 2018-12-14 14:11 網易雲 閱讀( ...) 評論( ...) 編輯 收藏 重新整理評論 重新整理頁面 返回頂部 關注網易雲 微信公眾號 推薦產品 雲安全 為網際網路各行業提供反垃圾、驗證碼、註冊保護、登入保護、活動反作弊、應用加固、DDoS防護等整體安全解決方案。 網易有料 將定製化資訊流和精準廣告快速對接到您的產品中,向終端使用者提供個性化內容分發服務。 通訊與視訊 打造真正穩定易用的多媒體通訊雲平臺,為您提供 IM 、音視訊、直播、點播、簡訊等多種通訊能力。 雲基礎服務 深度整合了 IaaS 、Pass 及容器技術,提供了彈性計算,DevOps 工具鏈及微服務基礎設施等服務。 大資料 一站式大資料管理和應用開發平臺,企業級大資料視覺化分析平臺。
【推薦】怎樣有效杜絕“羊毛黨“?
【推薦】網站被黑客掃描撞庫該怎麼應對防範?