當前位置: 妍妍網 > 碼農

如何搭建自己的串流媒體直播帶貨系統

2024-02-28碼農

簡介

  • 直播技術 :直播技術可以分為基於傳統的RTMP協定和基於HTTP的HLS協定。RTMP協定延遲較低,適合即時性要求較高的場景,而HLS協定相容性更好,適合各種終端裝置。根據需求選擇適合的技術。

  • 搭建伺服器環境 :選擇一台效能較好的伺服器,可以使用雲伺服器來搭建直播平台。根據直播技術的選擇,配置相應的伺服器環境,如安裝Nginx、FFmpeg等工具。

  • 視訊采集與編碼 :選擇合適的視訊采集裝置,如網路攝影機、視訊采集卡等,並使用合適的編碼器將視訊流進行編碼,如H.264編碼。

  • 串流媒體伺服器搭建 :搭建串流媒體伺服器用於接收和分發視訊流。可以使用開源的串流媒體伺服器軟體,如Nginx-rtmp-module、FFmpeg等。

  • 視訊分發與播放 :選擇合適的內容分發網路(CDN)服務商,將視訊流分發到全球各地的使用者。同時,選擇合適的播放器進行視訊播放,如HLS協定可以使用HLS.js、video.js等播放器。

  • 直播平台功能開發 :根據需求開發直播平台的功能,如使用者註冊登入、直播間管理、禮物打賞、彈幕功能等。可以使用前端開發技術(如HTML、CSS、JavaScript)和後端開發技術(如PHP、Java、Python)進行開發。

  • 安全性保障 :確保直播平台的安全性,如使用者資訊加密、防止惡意攻擊、防止盜播等。可以使用網路安全產品和服務進行保障。

  • 直播即時編碼流

    伺服器

    首先,你需要選擇一台高效能的伺服器來承載你的串流媒體直播系統。伺服器的配置應該能夠滿足你預計的使用者量和頻寬需求。

    安裝串流媒體服務

    串流媒體伺服器軟體是構建直播系統的核心元件。常見的串流媒體伺服器軟體包括Nginx-rtmp、Wowza Streaming Engine、Adobe Media Server等。根據你的需求選擇一個適合的串流媒體伺服器軟體,並按照其官方文件進行安裝和配置。

    服務與模組

    Openresty下載

    wget https://openresty.org/download/openresty-1.21.4.3.tar.gz

    nginx-ts-module下載

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

    ffmpeg 下載安裝

    相關教程請看這裏

    動態編譯安裝

    Openresty環境配置

    apt-get install libreadline-dev libncurses5-dev libpcre3-dev \
    libssl-dev perl make build-essential

    動態編譯安裝

    ./configure --prefix=/opt/openresty --with-luajit --without-http_redis2_module \
    --with-http_iconv_module --add-dynamic-module=/root/nginx-ts-module
    ...
    make -j4
    ...
    sudo make install

    配置檔

    nginx.conf

    # vim /opt/openresty/nginx/conf/nginx.conf
    error_log logs/error.log;
    pid logs/nginx.pid;
    load_module "/opt/openresty/nginx/modules/ngx_http_ts_module.so"; # 載入模組
    events {
    }
    http {
    server {
    listen 8777;
    location / {
    root html;
    }
    location /publish/ {
    ts;
    ts_hls path=/var/media/hls segment=10s;
    ts_dash path=/var/media/dash segment=10s;
    client_max_body_size 0;
    }
    location /play/ {
    add_header Cache-Control no-cache;
    add_header 'Access-Control-Allow-Origin''*' always;
    add_header 'Access-Control-Expose-Headers''Content-Length,Content-Range';
    add_header 'Access-Control-Allow-Headers''Range';
    types {
    application/x-mpegURL m3u8;
    application/dash+xml mpd;
    video/MP2T ts;
    video/mp4 mp4;
    }
    alias /var/media/;
    }
    }
    }







    串流媒體存放資料夾建立

    cd /var & mkdir media
    cd media & mkdir hls & mkdir dash

    FFmpeg推流

    推流是將視訊數據從采集裝置(如網路攝影機)發送到串流媒體伺服器的過程。你可以使用專業的推流軟體(如OBS Studio、FFmpeg等)或者編寫自己的推流指令碼來實作推流功能。

    ffmpeg -re -i rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid -bsf:v h264_mp4toannexb \
    -c copy -f mpegts http://127.0.0.1:8777/publish/sintel

    我這裏由於埠被占用,使用的是: 8777

    公網 rtmp 測試地址

    鄧紫棋 多美麗mv (非常流暢秒開級別,強烈推薦)
    地址:rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid (可用)
    伊拉克 Al Sharqiya 電視台 (有卡頓延遲)
    地址:rtmp://ns8.indexforce.com/home/mystream (可用)
    南韓GOOD TV (不推薦太卡,很慢)
    地址:rtmp://mobliestream.c3tv.com:554/live/goodtv.sdp (可用)

    客戶端播放

    <!DOCTYPE html>
    <htmllang="en">
    <head>
    <metacharset="UTF-8">
    <title>開源技術小棧串流媒體直播系統</title>
    </head>
    <body>
    <h1>開源技術小棧 | 串流媒體直播系統</h1>
    <scriptsrc="http://cdn.dashjs.org/latest/dash.all.min.js"></script>
    < style>
    video {
    width1024px;
    height600px;
    }
    </ style>
    <div>
    <videodata-dashjs-playerautoplaysrc="http://127.0.0.1:8777/play/dash/sintel/index.mpd"controls></video>
    </div>
    </body>
    </html>

    播放效果

    OBS 推流

    如果不使用 ffmpeg 直接拉流到 http://127.0.0.1:8777/publish/sintel 服務的解決方案是什麽?答案是:OBS

    OBS Studio 是 Windows 系統端開源的推流軟體,編碼使用H264(X264)和AAC ,它一款非常好用的開源直播推流軟體,為使用者提供了視訊、文本、影像等的捕獲錄制功能。基於GPU的高效能遊戲串流媒體遊戲捕獲。支持DirectShow的捕獲裝置(網路攝影機,采集卡,等),雙線性或lanczos3重采樣。當然選擇它主要是開源,免費。

    解決方案

    nginx-rtmp-module下載

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

    安裝 nginx-ts-module 模組一樣動態編譯安裝既可以,最後別忘記了的在配置檔 load nginx-rtmp-module.so

    # vim /opt/openresty/nginx/conf/nginx.conf
    error_log logs/error.log;
    pid logs/nginx.pid;
    load_module "/opt/openresty/nginx/modules/ngx_rtmp_module.so"# 載入rtmp模組
    ...

    推流順序

    OBS => nginx-rtmp => nginx-ts

    透過以上我們可以不直接使用ffmpeg 去推流了,而是在Windows埠可以透過OBS很簡單的去推流了

    安全性和穩定性最佳化

    為了保證直播系統的安全性和穩定性,你可以采取一些措施,如設定存取許可權、使用SSL證書加密傳輸、配置負載均衡等。