從本節開始,正式開啟流媒體相關的內容。
流媒體
基本概念
流媒體(Streaming media),也叫做:流式媒體。
- 是指將一連串的多媒體數據壓縮后,經過互聯網分段發送數據,在互聯網上即時傳輸影音以供觀賞的一種技術與過程
- 此技術使得數據包可以像流水一樣發送,如果不使用此技術,就必須得先下載整個媒體文件才能進行觀看
流媒體的一個非常典型、火爆的應用場景:直播。近幾年,直播行業是蒸蒸日上。
直播架構
下面放幾張圖片,簡單了解一下直播技術的基本架構。
你可能會有個疑問:信令服務器是干嘛用的?用來處理分享端和觀看端的一些信令指令,比如創建房間、加入房間等。
用文字總結一下基本流程是:
- 分享端(比如主播) -> 產生音視頻 -> 編碼壓縮音視頻 -> 推流到服務器
- 觀看端(比如觀眾) -> 從服務器拉流 -> 解碼解壓縮音視頻 -> 播放音視頻
推拉流
- 推流:通過流媒體協議,將音視頻數據發送到流媒體服務器
- 拉流:通過流媒體協議,從流媒體服務器上拉取獲得音視頻數據
流媒體協議
常見的流媒體協議有:RTMP、HLS等。
- RTMP(Real-Time Messaging Protocol)
- 譯為:實時消息傳輸協議,由Adobe公司出品
- 默認基於TCP的1935端口
- HLS(HTTP Live Streaming)
- 基於HTTP的流媒體網絡傳輸協議,蘋果公司出品
- 參考:RFC 8216
本文主要介紹RTMP協議相關知識。
服務器環境
首先,要搭建好RTMP服務器環境,主要步驟如下:
- 安裝虛擬機VMWare或Parallels Desktop
- 我這里安裝的是VMWare
- 在虛擬機上安裝CentOS系統
- CentOS是Linux系統的一種,這里用7.6版本,建議跟我的版本保持一致
- 在CentOS系統中安裝nginx、nginx-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