【秒懂音視頻開發】26_RTMP服務器搭建


從本節開始,正式開啟流媒體相關的內容。

流媒體

基本概念

流媒體(Streaming media),也叫做:流式媒體。

  • 是指將一連串的多媒體數據壓縮后,經過互聯網分段發送數據,在互聯網上即時傳輸影音以供觀賞的一種技術與過程
  • 此技術使得數據包可以像流水一樣發送,如果不使用此技術,就必須得先下載整個媒體文件才能進行觀看

流媒體的一個非常典型、火爆的應用場景:直播。近幾年,直播行業是蒸蒸日上。

直播架構

下面放幾張圖片,簡單了解一下直播技術的基本架構。

簡單

詳細

你可能會有個疑問:信令服務器是干嘛用的?用來處理分享端和觀看端的一些信令指令,比如創建房間、加入房間等。

京東雲

百度智能雲

用文字總結一下基本流程是:

  • 分享端(比如主播) -> 產生音視頻 -> 編碼壓縮音視頻 -> 推流到服務器
  • 觀看端(比如觀眾) -> 從服務器拉流 -> 解碼解壓縮音視頻 -> 播放音視頻

推拉流

  • 推流:通過流媒體協議,將音視頻數據發送到流媒體服務器
  • 拉流:通過流媒體協議,從流媒體服務器上拉取獲得音視頻數據

流媒體協議

常見的流媒體協議有:RTMP、HLS等。

  • RTMP(Real-Time Messaging Protocol)
    • 譯為:實時消息傳輸協議,由Adobe公司出品
    • 默認基於TCP的1935端口
  • HLS(HTTP Live Streaming)
    • 基於HTTP的流媒體網絡傳輸協議,蘋果公司出品
    • 參考:RFC 8216

本文主要介紹RTMP協議相關知識。

服務器環境

首先,要搭建好RTMP服務器環境,主要步驟如下:

  • 安裝虛擬機VMWareParallels Desktop
    • 我這里安裝的是VMWare
  • 在虛擬機上安裝CentOS系統
    • CentOS是Linux系統的一種,這里用7.6版本,建議跟我的版本保持一致
  • 在CentOS系統中安裝nginxnginx-rtmp-module
    • nginx:一款高性能的開源web服務器
    • nginx-rtmp-module:讓nginx支持rtmp
  • 配置nginx
  • 啟動nginx

安裝CentOS

下載CentOS

推薦網站:centoschina,上面有CentOS的各種版本,這里下載CentOS-7-x86_64-DVD-1810.iso,大小是4G多。

安裝nginx

nginx官網下載目前最新的穩定版:nginx-1.20.1.tar.gz

安裝nginx-rtmp-module

nginx-rtmp-module的github下載目前最新的穩定版:v1.2.2.tar.gz

配置nginx

啟動nginx

一些步驟和命令整理

  • 安裝依賴
yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
  • 設置共享文件夾
    • 查看共享成功與否
      • vmware-hgfsclient
    • 掛載到對應目錄(這里放mnt)
      • vmhgfs-fuse .host:/共享目錄名稱 /mnt/目錄名稱
  • 解壓ngnix相關內容
    • cp 源 目標
    • tar -zxvf 解壓文件
  • 進入nginx目錄,執行configure進行配置
./configure --prefix=/usr/local/nginx --add-module=ngnix的rtmp模塊目錄 --with-http_ssl_module
  • 修改nginx配置
    • vim conf/nginx.conf
rtmp {      
    server {    
        listen 1935; # 端口
        chunk_size 4000;     
        application live { # 請求路徑
            live on;     
        }   
    }   
}
  • 配置PATH
    • export PATH=$PATH:/usr/local/nginx/sbin
  • 啟動nginx
    • nginx
  • 查看
    • 端口占用:lsof -i:1935
    • 殺死進程:kill -9 pid
  • 如果遠程連接不上rtmp服務器,有可能是因為防火牆把1935端口關掉了
# 查看端口情況(返回no代表被關閉了)
firewall-cmd --query-port=1935/tcp

# 拿到zone名稱(一般是public)
firewall-cmd --get-active-zones

# 打開端口
firewall-cmd --zone=public --add-port=1935/tcp --permanent

# 重啟防火牆(再次查看端口情況,應該會返回yes了)
firewall-cmd --reload
  • ffmpeg推流
ffmpeg -i xx.mp4 -f flv rtmp://ip地址:1935/live/xx
  • ffmpeg拉流
ffplay rtmp://ip地址:1935/live/xx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM