DMCA Must Die!免费搭建地下直播间!
2024-07-25为什么要搭建地下直播间
YouTube、Twitch等网站的直播服务虽然方便,但是有严格的版权限制,没有办法自由播放音乐,让人很是不开心。
Telegram直播没有这些弯弯绕绕,但是局限了客户端,没有办法将电波传达到广阔的宇宙之间。
Cloudflare也提供了直播服务,名为“Cloudflare Stream”,但是要收费。
这里,我们将提供全新的方式,可以免费搭建地下直播间,VPS月租什么的通通不需要w
用到的主要组件
- S3兼容的对象存储服务:这里以一定限额内免费的Cloudlare R2为例;
- Owncast:这里用到的Owncast只做为推流终端运行在本机,不需要部署在服务器上;
- hls.js:网页前端组件,用来作为播放器。
如果有连接国际互联网相关的问题,还需要一个额外组件:
- socat:用于提供一个本机到对象存储服务的代理。
美中不足的是Owncast只在Linux和macOS上提供,如果你是Windows用户,可能需要一个运行Linux的路由器或者树莓派。
配置对象存储系统
点击“Create Bucket”。
填入bucket名称。我们把名称记为${bucket名称}
。
创建完Bucket之后进入bucket的设置界面。
点击“Setting”。
记录一下Bucket Details栏目中的S3 API。应该是这样的格式:
https://${一串哈希}.r2.cloudflarestorage.com/${bucket名称}
其中,我们把https://${一串哈希}.r2.cloudflarestorage.com
记作${Endpoint}
。
在下面的Public access中我们需要打开对对象服务。如果在Cloudflare中有自己的域名的话可以选择用自己的域名。如果没有自己的域名可以使用开发者域名。需要在“R2.dev subdomain”栏目中点击“Allow access”,然后输入“allow”并确定。可以获得如下格式的地址:
https://pub-${一串哈希}.r2.dev
无论是用自己的域名,还是直接用r2.dev
,都可以。总之,我们把这个地址记作${PublishURL}
。
在“CORS Policy”栏目中点击“Edit CORS Policy”,在“AllowedOrigins”字段中填入播放器的地址:
[
{
"AllowedOrigins": [
"https://live.mistivia.com"
]
...
这里播放器我是在netlify上部署的,并且选择了自定域名,所以填入了自己的域名。因为是静态网站,所以也可以部署在GitHub Page之类的服务器,这个时候就需要填入https://xxxx.github.io
,总之这里填入对应的域名就好。
然后打开Cloudflare R2的令牌配置。
点击“Create API Token”。
Permissions栏目中选中“Admin Read & Write”,点击右下角“Create API Token”,可以得到Access key和Secret key。这两个都是一串16进制数。我们将其记为${AccessKey}
和${SecretKey}
。
Owncast配置
Owncast可以在这里下载,下载完之后直接解压运行即可。
Owncast默认会监听8080端口,打开http://127.0.0.1:8080/admin
。
填入默认用户名admin和默认密码abc123。进入之后总之先把密码改掉,然后刷新页面重新登录。
视频设置
点击左侧栏的“Configuration”,然后点击“Video”。
在“Stream output”栏目下点击“Edit”。
点击“Advanced Settings”,打开Video Passthrough。这样可以降低CPU消耗。
服务器设置
点击左侧栏的“Configuration”,然后点击“Server Setup”。
选中“Server Config”栏目,点开“Advanced Settings”。
在Serving Point中填入${PublishURL}
。
然后点击上方“S3 Object Storage”栏目。
打开“Use S3 Storage Provider”拨钮。
在“Endpoint”后面填入${Endpoint}
。
在“Access Key”后面填入${AccessKey}
。
在“Secret key”后面填入${SecretKey}
。
在“Bucket”后面填入${bucket名称}
。
Region则填入auto
。
展开“Optional Settings”。
在“Path prefix”中填入“/owncast”。
获取推流设置
最后回到左侧栏中的“Home”,可以在首页取到Stream URL和Stream Keys,可以用在OBS中用于推流。这里和Twitch等其他平台一致。
网页播放器配置
首先在下载hls.js,在GitHub的发布页面中点击release.zip
。
解压后可以得到一个dist
目录。
在dist
同一级目录中创建index.html
,其内容见Github Gist。注意其中两处example.org
需要修改为${PublishURL}
。
然后把index.html
和dist
一起上传到可以发布静态网页的地方,例如GitHub Pages或者Netlify。
最后在浏览器中打开部署网页的地址即可,例如https://xxxx.github.io
或者https://xxxx.netlify.app
,又或者是你自己的某个域名。
如果需要代理软件才能上传到对象存储服务
这个时候就要用到socat。这个软件一般会打包在OpenSSL里面,可以起到端口转发的作用,类似于ssh -L
,不同在于socat可以用http代理而无需使用ssh链接。大部分梯子软件,不管是clash还是sing-box,都是支持http代理功能的,假如http代理端口是8888,socat命令就是这样:
socat TCP4-LISTEN:18080,bind=0.0.0.0,fork PROXY:127.0.0.1:${Endpoint}:443,proxyport=8888
注意其中的${Endpoint}
要替换成前面提到的Cloudflare R2的终端地址,但是不要加上https://
,类似于这样:xxxxxxxx.r2.cloudflarestorage.com
。
这行命令会监听127.0.0.1:18080
,并转发到${Endpoint}:443
。
然后编辑/etc/hosts
,加入如下两行:
127.0.0.1 ${bucket名称}.xxxxxxxx.r2.cloudflarestorage.com
127.0.0.1 xxxxxxxx.r2.cloudflarestorage.com
最后在Owncast的服务器设置中修改Endpoint,末尾加上端口号:18080
即可。
尾声
打开OBS开始推流,然后尝试一下效果如何吧!
Email: i (at) mistivia (dot) com