搭建环境#
本文使用甲骨文日本东京的 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 作者,没有他们就没有此篇教程。