国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
如何搭建一個(gè)屬于自己的直播平臺(tái)?

正好去年過(guò)年的時(shí)候,一個(gè)朋友破解了AirPlay和Chromecast協(xié)議,然后開(kāi)發(fā)了一套技術(shù)能夠截獲和播放任何手機(jī)(iOS或是Android)屏幕上的任何內(nèi)容。想到的第一個(gè)應(yīng)用是做一個(gè)直播的直播服務(wù)(如有感興趣的投資人,可以聯(lián)系)。比如,通過(guò)屏幕直播,你可以邀請(qǐng)朋友看你正在看的直播的電影,球賽,演唱會(huì),晚會(huì),不管是免費(fèi)的還是付費(fèi)的。當(dāng)初的想法是將屏幕的內(nèi)容,通過(guò)AirPlay或Chromecast,推送到后臺(tái)服務(wù)器,然后,受邀的朋友就可以從瀏覽器或是其它視頻播放器觀看了。為此,我們搭建和開(kāi)發(fā)了一個(gè)直播平臺(tái),現(xiàn)在把我們實(shí)現(xiàn)的過(guò)程記錄下來(lái)和大家共享。

首先,視頻有它的播放協(xié)議。原則上,RTSP,RTMP,HTTP都可以做直播和點(diǎn)播,但一般做直播用RTSP和RTMP,做點(diǎn)播用HTTP。我們選用的是RTMP協(xié)議。

RTMP 協(xié)議


RTMP(Real Time Message Protocol/實(shí)時(shí)信息傳輸協(xié)議)是應(yīng)用層協(xié)議,靠底層傳輸層協(xié)議(通常是TCP)來(lái)保證信息傳輸?shù)目煽啃缘?。在TCP鏈接建立后,RTMP協(xié)議也要客戶端和服務(wù)器通過(guò)“握手”來(lái)建立RTMP Connection,然后在Connection上傳輸控制信息。RTMP協(xié)議傳輸時(shí)會(huì)對(duì)數(shù)據(jù)格式化,而實(shí)際傳輸?shù)臅r(shí)候?yàn)榱烁玫貙?shí)現(xiàn)多路復(fù)用、分包和信息的公平性,發(fā)送端會(huì)把Message劃分為帶有Message ID的Chunk,每個(gè)Chunk可能是一個(gè)單獨(dú)的Message,也可能是Message的一部分,在接受端會(huì)根據(jù)Chunk中包含的data的長(zhǎng)度,message id和message的長(zhǎng)度把chunk還原成完整的Message,從而實(shí)現(xiàn)信息的收發(fā)。

我們看看兩個(gè)常用的視頻服務(wù)。一個(gè)是由客戶端向服務(wù)器發(fā)起請(qǐng)求推流到服務(wù)器,這個(gè)就是直播的播放服務(wù),流程如下。

另一個(gè)是由客戶端向服務(wù)器發(fā)起請(qǐng)求從服務(wù)器端接受數(shù)據(jù),可以多次調(diào)用,這就是播放服務(wù)。流程如下。



RTMP是直播后面的協(xié)議,有很多的開(kāi)源軟件實(shí)現(xiàn)了,細(xì)節(jié)我們不再細(xì)說(shuō)。下面,我們看看怎么搭建后臺(tái)服務(wù)系統(tǒng)。

安裝和配置 LEMP


LEMP棧是指Linux(L), NGINX(E), MySQL(M), PHP(P),還記得LAMP嗎?LEMP既是將NGINX(E)取代了Apache(A)。

首先,用以下命令安裝和啟動(dòng)NGINX web server。

# sudo apt-get update# sudo apt-get install nginx# sudo service nginx start

接著,安裝MySQL。

# sudo apt-get install mysql-server mysql php5-mysql

接著,安裝和配置PHP。

# sudo apt-get install php5-fpm
location ~ .php$ {  try_files $uri =404;  fastcgi_pass unix:/var/run/php5-fpm.sock;  fastcgi_index index.php;  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  include fastcgi_params;}

最后,重新啟動(dòng)NGINX web server。

# sudo service nginx restart

這樣,后臺(tái)的web server設(shè)置好了,可以對(duì)外提供網(wǎng)頁(yè)和PHP服務(wù)了。但是,NGINX并不支持RTMP協(xié)議,我們需要下載,編譯,安裝和配置RTMP模塊。

安裝和配置nginx-rtmp-module


首先,下載NGINX的源代碼,確保環(huán)境下能正確的編譯。

# git clone https://github.com/nginx/nginx.git

然后,下載RTMP模塊。

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

然后,cd到NGINX的源代碼目錄,config,make和install 剛才下載的RTMP模塊。

# ./configure --add-module=/path/to/nginx-rtmp-module make make install# make# make install

最后,在NGINX的配置文件中,加上RTMP相關(guān)的配置,并且重新啟動(dòng)NGINX server。

rtmp {    server {        listen 1935;        chunk_size 4000;        # HLS        application hls {            live on;            hls on;            hls_path /tmp/hls;        }        # MPEG-DASH is similar to HLS        application dash {            live on;            dash on;            dash_path /tmp/dash;        }    }}# HTTP can be used for accessing RTMP statshttp {    server {        listen      8080;        # This URL provides RTMP statistics in XML        location /stat {            rtmp_stat all;            # Use this stylesheet to view XML as web page            # in browser            rtmp_stat_stylesheet stat.xsl;        }        location /stat.xsl {            # XML stylesheet to view RTMP stats.            # Copy stat.xsl wherever you want            # and put the full directory path here            root /path/to/stat.xsl/;        }        location /hls {            # Serve HLS fragments            types {                application/vnd.apple.mpegurl m3u8;                video/mp2t ts;            }            root /tmp;            add_header Cache-Control no-cache;        }        location /dash {            # Serve DASH fragments            root /tmp;            add_header Cache-Control no-cache;        }    }}

其中看到了服務(wù)器上視頻存儲(chǔ)的格式是HLS,下面需要介紹一下這個(gè)格式。

HLS(HTTP Live Streaming)


HLS是一個(gè)由蘋(píng)果公司提出的基于HTTP的流媒體網(wǎng)絡(luò)傳輸協(xié)議,它把整個(gè)流分成一個(gè)個(gè)小的基于HTTP的文件來(lái)下載,每次只下載一些。當(dāng)媒體流正在播放時(shí),客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源,允許流媒體會(huì)話適應(yīng)不同的數(shù)據(jù)速率。開(kāi)始播放時(shí),客戶端會(huì)下載一個(gè)包含元數(shù)據(jù)的extended M3U (m3u8)playlist文件,用于尋找可用的媒體流。工作原理如下。


m3u8 playlist的文件結(jié)構(gòu),它不是一個(gè)單獨(dú)的文件,而是由一系列文件組成。Index文件和很多的數(shù)據(jù)文件。


一個(gè)m3u8 playlist的index文件內(nèi)容。


所有的數(shù)據(jù)文件,以.ts為后綴,存放在同一目錄下面。


直播客戶端(后面我們要介紹的OBS)將實(shí)時(shí)視頻推送到NGINX的RTMP模塊。RTMP模塊會(huì)根據(jù)配置將視頻流轉(zhuǎn)換成HLS文件。這時(shí),HLS文件可以使用兩種模式播放。一是點(diǎn)播VOD模式,下載當(dāng)前時(shí)間點(diǎn)可以獲取到所有index文件和ts文件,并播放。這種模式允許客戶端訪問(wèn)全部?jī)?nèi)容,不一定是實(shí)時(shí)內(nèi)容。二是Live 模式,實(shí)時(shí)生成m3u8和ts文件。它的索引文件一直處于動(dòng)態(tài)變化的,播放的時(shí)候需要不斷下載index文件,以獲得最新生成的ts文件播放視頻。一般來(lái)說(shuō),實(shí)況直播時(shí),會(huì)有一些延時(shí)。下面,來(lái)看一個(gè)JS實(shí)現(xiàn)的HLS player,嵌入到支持HTML5的瀏覽器就可以播放HLS文件。

HLSPlayer


基于Javascript的HLS Player可以在PC瀏覽器(IE,Chrome,F(xiàn)irefox,Safari,等),iOS的Safari,Android的Chrome,等等支持HTML5的瀏覽器上播放。市面上有很多開(kāi)源的,下面圖中是其中的一種,對(duì)于不同瀏覽器的支持都很好。下載以后,按照它給的例子修改HLS的源就可以了。


除了JS的播放器,還有獨(dú)立的播放器,ffmpeg是廣泛使用的一種命令行播放器,支持Windows,Linux,Mac等。

ffmpeg


ffmpeg是一個(gè)非??斓囊曨l/音頻轉(zhuǎn)換器,也可以現(xiàn)場(chǎng)抓取音頻/視頻源,并在任意采樣率、尺寸之間調(diào)整視頻,以及提供多種高品質(zhì)的濾鏡系統(tǒng)。ffmpeg從任意數(shù)量/形式的輸入文件中進(jìn)行讀取,通過(guò)輸入文件選項(xiàng)對(duì)輸入文件進(jìn)行設(shè)定,并寫(xiě)入到任意數(shù)量/形式的輸出文件中。它不但可以對(duì)任何格式的音視頻文件相互轉(zhuǎn)化,而且可以播放任何格式的音視頻文件。它的命令行選項(xiàng)超多,具體細(xì)節(jié)需要用到時(shí)自己去網(wǎng)上搜索和閱讀。

例如,下面的命令將一個(gè)本地的視頻文件movie.avi推送到服務(wù)器上可以生成HLS格式的文件。

# ffmpeg -loglevel verbose -re -i movie.avi -vcodec libx264 -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/hls/movie

OBS


OBS(Open Broadcaster Software/開(kāi)源直播軟件),它是目前世界上最火的免費(fèi)開(kāi)源直播軟件。由于它是免費(fèi)的,而且質(zhì)量高,對(duì)比其它軟件就有天生的優(yōu)勢(shì),很多商業(yè)化的直播平臺(tái)都支持和推薦使用。下面是它的基礎(chǔ)界面。


OBS能夠講視頻流推送到支持RTMP協(xié)議的服務(wù)器上,需要進(jìn)行一些簡(jiǎn)單的設(shè)置。服務(wù)器的地址,和流的密鑰,這樣,可以區(qū)分不同的用戶,也保證了不同用戶的內(nèi)容安全。



直播平臺(tái)Demo


基于上面描述的技術(shù)和開(kāi)源系統(tǒng),我們用PHP實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的支持多用戶的直播平臺(tái)。用戶可以注冊(cè),登錄,follow/unfollow,評(píng)論,標(biāo)簽,收看,直播(每個(gè)用戶有自己的直播密鑰),等等。

源代碼文件目錄。


注冊(cè)界面。


播放和評(píng)論界面。


直播使用的是OBS,也可以使用你喜歡的直播移動(dòng)App,需要設(shè)置系統(tǒng)給每個(gè)用戶提供的密鑰。收看時(shí),直接選擇用戶和他正在播放視頻就好了。

直播的精髓都應(yīng)該討論到了,如果將系統(tǒng)sharding,分層,SOA化,負(fù)載均衡,cache,就可以搭建出一個(gè)可擴(kuò)展的大規(guī)模的直播平臺(tái)。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
H5直播起航
FFmpeg總結(jié)(十二)用ffmpeg與nginx實(shí)現(xiàn)直播多路流并發(fā)播放
nginx+nginx-rtmp-module+ffmpeg搭建流媒體服務(wù)器
srs之深入淺出看流媒體
支持轉(zhuǎn)碼[流媒體]通讀SRS后的總結(jié)文檔以及搭建直播平臺(tái)的初次嘗試
音視頻開(kāi)發(fā)——通信直播協(xié)議和視頻推流丨RTMP-RTSP
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服