簡介
直播技術 :直播技術可以分為基於傳統的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 {
width: 1024px;
height: 600px;
}
</ 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證書加密傳輸、配置負載均衡等。