搭建環境#
本文使用甲骨文日本東京的 AMD 免費伺服器(Debian 11)進行搭建
本文使用寶塔面板作為前端搭建方案
正式搭建#
安裝環境#
安裝寶塔#
curl -sSO https://raw.githubusercontent.com/8838/btpanel-v7.7.0/main/install/install_panel.sh && bash install_panel.sh
#1,屏蔽手機號
sed -i "s|bind_user == 'True'|bind_user == 'XXXX'|" /www/server/panel/BTPanel/static/js/index.js
#2,刪除強制綁定手機js文件
rm -f /www/server/panel/data/bind.pl
安裝 nginx#
需要注意:安裝 nginx 時需要選擇【編譯安裝】並添加自定義模塊:
- 模塊名稱:
nginx_rtmp_module
- 描述:
nginx_rtmp_module
- 參數:
--add-module=/www/server/nginx/src/nginx-rtmp-module
- 前置腳本:
git clone https://github.com/arut/nginx-rtmp-module.git
安裝 ffmpeg#
apt-get -y install ffmpeg
修改 Nginx 配置#
進入 軟件商店——Nginx 1.22.1——設置——配置修改
,在http
字段前添加如下內容(請記得刪除 #與後面的內容):
rtmp {
server {
listen 1935; ##這是RTMP協議默認端口
chunk_size 4096; ##數據分塊大小
application live { ##名為live的項目
live on; ##這是一個直播項目
hls on; ##開啟HLS錄制
wait_key on; ##讓視頻流從一個關鍵幀開始
hls_path /www/wwwroot/site.com/hls; ##HLS錄制文件保存的目錄,修改/www/wwwroot/site.com/hls為你網站的目錄
hls_fragment 5s; ##HLS生成的每個ts文件的時長
hls_playlist_length 30s; ##每個ts文件的保留時間
hls_continuous on; ##讓HLS標號從上個結束的位置開始
hls_cleanup on; ##自動清理過時的ts文件
hls_nested on; ##為每一個HLS推流項目建立一個新的子目錄
}
}
}
並按ctrl+s
保存,然後在 軟件商店——Nginx 1.22.1——設置——服務
點擊 重載配置
。
創建網站並修改相關設置#
創建網頁#
填寫域名等相關設置,可選擇是否開啟 SSL(建議海外伺服器開啟 SSL 並打開 Cloudflare 小雲朵)
修改配置#
在 access_log
字段前一行加入以下內容:
location /live {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /www/wwwroot/site.com/hls; # 與剛才設置的hls目錄一致
add_header Cache-Control no-cache;
}
搭建 Dplayer 播放器#
直接修改默認的index.html
為以下內容:
<!DOCTYPE HTML>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>你的直播間名稱</title>
<link rel="icon" type="image/x-icon" href="https://smms.app/image/7vZXEYRjOiW1Ftb">
<link class="dplayer-css" rel="stylesheet" href="https://cdn.jsdelivr.net/npm/dplayer/dist/DPlayer.min.css">
<script src="https://cdn.jsdelivr.net/npm/hls.js/dist/hls.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dplayer/dist/DPlayer.min.js"></script>
<style>
html,body{margin:0px;padding:0px;width:100%;height:100%;}#dplayer{position:absolute;width:100%;height:100%;}
</style>
</head>
<body>
<div id="dplayer" class="dplayer dplayer-no-danmaku dplayer-live dplayer-playing dplayer-loading"></div>
<script>
const dp = new DPlayer({
container: document.getElementById('dplayer'),
live: true,
danmaku: false,
autoplay: true,
video: {
url: 'hls/推流碼/index.m3u8',
type: 'hls'
}
});
</script>
</body>
使用 OBS 等軟件開啟直播#
設置如下:
- 伺服器:
rtmp://你的伺服器地址:1935/live/
- 串流密鑰:
隨意設置,但應與HTML代碼中的推流碼一致
使用 ffmpeg 拉流轉推#
大致命令如下:
ffmpeg -i 拉流地址 -c:v copy -c:a aac -b:a 192k -strict -2 -f flv rtmp://127.0.0.1:1935/live/推流碼
如果需要後台運行
nohup ffmpeg -i 拉流地址 -c:v copy -c:a aac -b:a 192k -strict -2 -f flv rtmp://127.0.0.1:1935/live/推流碼 &
使用 Streamlink 拉流轉推#
安裝 Streamlink 與 Screen#
apt-get install python3-pip screen
pip3 install streamlink
轉推流媒體(以 YouTube 直播為例)#
echo "Please input the youtube url:"
read URL
streamlink $URL best -O | ffmpeg -re -i pipe:0 -c copy -bsf:a aac_adtstoasc -f flv rtmp://localhost:1935/live/youtube
轉推 YouTube 非公開 (Unlisted) 直播流【淦】#
這個玩意真的折騰死我了,公開直播的轉推似乎真的非常簡單,而 Unlisted 直播由於受到保護,Streamlink 無法轉推,因此進行了一波取巧操作。
這種轉推的前提是你要知道直播流的地址,如https://youtu.be/abcdefg
安裝 Screen#
apt -y install screen
我對於後台運行只會 screen…… 我菜雞我……
下載並部署 yt-dlp#
wget -O /usr/local/bin/yt-dlp https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp
利用 Screen 開啟後台運行#
screen -S youtube
轉推 YouTube 非公開直播#
為了這個東西折騰死我了……
clear
echo "Please input the YouTube url:"
read URL
ffmpeg -re -i $(yt-dlp -f best -g $URL) -c copy -bsf:a aac_adtstoasc -f flv -buffer_size 256M rtmp://localhost/live/youtube
這裡是利用 yt-dlp 將 YouTube 直播鏈接解析為 m3u8 鏈接並傳遞給 ffmpeg 讀取,且buffer_size
設置較小似乎會報錯(我也不知道為什麼,反正調大就對了)。
鳴謝#
感謝 yt-dlp、Streamlink、ffmpeg 作者,沒有他們就沒有此篇教程。