直播電商原始碼,簡述直播的實現原理

雲豹科技阿星發表於2021-07-13

現在直播非常火爆,可以從PC或手機直播,然後從PC或是手機或是 支援HTML5的瀏覽器 收看。但是,你知道直播電商原始碼後面的技術和實現原理碼?

首先,影片有它的播放協議。原則上,RTSP,RTMP,HTTP都可以做直播和點播,但一般做直播用RTSP和RTMP,做點播用HTTP。我們選用的是RTMP協議。

RTMP 協議

RTMP(Real Time Message Protocol/實時資訊傳輸協議)是應用層協議,靠底層傳輸層協議(通常是TCP)來保證資訊傳輸的可靠性的。在TCP連結建立後,RTMP協議也要客戶端和伺服器透過“握手”來建立RTMP Connection,然後在Connection上傳輸控制資訊。RTMP協議傳輸時會對資料格式化,而實際傳輸的時候為了更好地實現多路複用、分包和資訊的公平性,傳送端會把Message劃分為帶有Message ID的Chunk,每個Chunk可能是一個單獨的Message,也可能是Message的一部分,在接受端會根據Chunk中包含的data的長度,message id和message的長度把chunk還原成完整的Message,從而實現資訊的收發。

我們看看兩個常用的影片服務。一個是由直播電商原始碼向伺服器發起請求推流到伺服器,這個就是直播的播放服務,流程如下。

另一個是由直播電商原始碼向伺服器發起請求從伺服器端接受資料,可以多次呼叫,這就是播放服務。流程如下。

RTMP是直播後面的協議,有很多的開源軟體實現了,細節我們不再細說。下面,我們看看怎麼搭建直播電商原始碼後臺服務系統。

安裝和配置 LEMP

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

首先,用以下命令安裝和啟動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;
}

最後,重新啟動NGINX web server。

# sudo service nginx restart

這樣,後臺的web server設定好了,可以對外提供網頁和PHP服務了。但是,NGINX並不支援RTMP協議,我們需要下載,編譯,安裝和配置RTMP模組。

安裝和配置nginx-rtmp-module

首先,下載NGINX的原始碼,確保環境下能正確的編譯。

# git clone 

然後,下載RTMP模組。

# git clone 

然後,cd到NGINX的原始碼目錄,config,make和install 剛才下載的RTMP模組。

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

最後,在NGINX的配置檔案中,加上RTMP相關的配置,並且重新啟動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 stats
http {
    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;
        }
    }
}

宣告:本文由雲豹科技轉發自 找個毛線部落格,如有侵權請聯絡作者刪除

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69982461/viewspace-2781126/,如需轉載,請註明出處,否則將追究法律責任。

相關文章