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的路由器或者树莓派。

配置对象存储系统

打开Cloudflare R2控制台

点击“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.htmldist一起上传到可以发布静态网页的地方,例如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