环境搭建
本文使用Oracle日本东京提供的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/streaming_code/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 "请输入YouTube网址:"
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非公开直播流
这东西真的难倒我了。看来推送公开直播流确实简单,但Streamlink由于保护机制无法推送非公开直播流,因此使用了一个变通方法。
此推送的前提是需要知道流地址,例如https://youtu.be/abcdefg
安装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 live
推送YouTube非公开直播流
这东西真的难倒我了...
clear
echo "请输入YouTube网址:"
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的作者。没有他们,本教程就不会存在。
评论