前段时间想尝试下直播推流到 Twitch,找了半天 OBS Studio 能在哪里设置代理,结果发现不支持,也不会走系统代理,稍微找了一下教程,所以顺便总结了一下。本文以使用 Twitch 和设置自定义推流服务器为例,需要的话可以参考一下。

前言

OBS是一個用於錄製和進行網路直播的自由開源軟體套件。OBS使用C和C++語言編寫,提供即時源和裝置擷取、場景組成、編碼、錄製和廣播。資料傳輸主要通過即時訊息協定RTMP)完成,可以傳送到任何支援RTMP的軟體,包括YouTubeTwitch.tvInstagramFacebook等串串流媒體網站。

——摘自 《Wikipedia

网上的办法基本都是使用 Proxifier 让 OBS 走代理,应该用起来没啥问题,但是 Proxifier 是商业收费版软件的啊,同类型的倒是一下子想到了 SocksCap64SSTap,但是这两东西作者都不更新了,还不如用 Netch,所以接下来先说使用 Netch 的办法。

使用 Netch 代理 OBS

Netch 其实和 Proxifier 差不多,也是可以让指定的软件走代理,一般来说直接选“Bypass LAN and China”(不代理局域网和中国大陆)即可:

image-20220310011840843

但是这样的话会让其它许多软件也走代理过,特别是你的游戏,或者是开了游戏加速器的时候,可能就会产生冲突导致奇奇怪怪的问题出现,所以我们设置一下单独给 OBS 走代理就好:

  1. 创建进程模式

    image-20220310012747076

  2. 选择处理规则,打开 OBS 所在文件夹,然后选择文件夹

    image-20220310013051826

  3. 输入备注然后保存就行啦,其他的不用动

    image-20220310013344111

  4. 在模式选择的地方选择刚刚添加的 OBS 模式,然后启动就好了

    image-20220310013543917

  5. OBS 这边需要设置自定义服务器,我也不知道为什么自带的那个不能用(至少 Twitch 不行,其它平台我暂时不知道),串流密钥在 Twitch 网站上看(反正这里就讲通用的办法,通过自定义 RTMP 服务器地址推流)

    image-20220310014320673

关于 Twitch 推流服务器的地址这里顺便提一下吧

我用的是 hkg01.contribute.live-video.net/app/

其余的在这里可以找到:https://stream.twitch.tv/ingests/

现在 OBS 可以通过代理正常推流了,当正在使用各种网游加速器或者直连玩一些外服游戏时,也不会产生冲突。

但如果你用的不是专门的游戏加速器,平时也是用的 Netch 这种软件来加速游戏的,虽然仍然可以用一开始就提到的办法(即选择“Bypass LAN and China”),但是一般来说游戏线路的流量都比较贵(你要是不心疼的话就算了),所以这个时候就有了另一种办法,通过 GOST 代理链来转发 RTMP 流量。

使用 GOST 转发 RTMP

GOST 是一个 GO 语言实现的安全隧道

网址:https://github.com/ginuerzh/gost

其实我倒更喜欢这种办法,毕竟 Netch 我也是拿来专门加速游戏用的,又不想再下个 SocksCap64 之类的软件,然后就想到了从 RTMP 下手,毕竟 RTMP 只是单纯的 TCP 流量,我们把它转发一下就好了。

*虽然拿 GOST 过来也有点大材小用的样子,其它同类型的软件应该也有很多。然后这个方法还很有局限性,不能转发 RTMPS 之类的(主要是因为要验证 SSL 证书,我暂时也不知道怎么解决,后面有解决方案)。

RTMP 的默认端口是 1935,如果你的推流服务器没有设置成其它端口或者做特别的说明的话。所以下面通过 GOST 代理链来转发 1935 端口就行了,拿 Twitch 的服务器举例:

gost -L=tcp://:1935/hkg01.contribute.live-video.net:1935 -F=socks5://127.0.0.1:7890

本地监听协议和端口:tcp://:1935

*如果需要转发 UDP (大概可以支持 SRT 协议,没有测试过)

# GOST V2 可以合并转发
gost -L=tcp+udp://:1935/hkg01.contribute.live-video.net:1935 -F=socks5://127.0.0.1:7890

# GOST V3 需要分开转发
gost -L=tcp://:1935/hkg01.contribute.live-video.net:1935 -F=socks5://127.0.0.1:7890
gost -L=udp://:1935/hkg01.contribute.live-video.net:1935 -F=socks5://127.0.0.1:7890

要转发到的服务器地址和端口:hkg01.contribute.live-video.net:1935

你的代理服务器(代理链):socks5://127.0.0.1:7890

然后 OBS 的推流设置里面,把服务器设置成 rtmp://127.0.0.1:1935/app/ 就行啦,路径注意一下,Twitch 的话是 /app,虽然不加也能推,其它平台看平台的说明吧。

把上面的命令写在 bat 文件里面,每次需要推流的时候双击运行就行了,很方便是不是,代理那边选你平时能跑大流量的服务就好行了,关于 GOST 代理链的其它使用方法这里不做其它说明了,文档很详细:设置多级转发代理

这样的话 Netch 可以继续只用来加速你的游戏,OBS 推流的流量则走 GOST 转发到你的其它服务器或者代理工具上面,用起来也挺轻便(虽然缺点上面也说了,好像除了麻烦一点点也没什么问题了)。

使用 GOST 转发 RTMPS

本方案根据评论区而来,还没测试过哦,建议先阅读上一部分

首先使用远程服务器查寻到没被污染的域名源 IP。

比如访问 https://ping.sx/dig?t=hkg01.contribute.live-video.net 可以查到(将 hkg01.contribute.live-video.net 改为你的推流域名),这里我们得到源 IP 为 99.181.91.33

然后使用 GOST 代理链转发流量到这个 IP(关于端口看平台说明):

gost -L=tcp://:1935/99.181.91.33:1935 -F=socks5://127.0.0.1:7890

*要转发 UDP 的话请参考上一部分

最后修改系统的 hosts 文件,这里以 Windows 为例

记事本打开 C:\Windows\System32\drivers\etc\hosts 文件,在最后增加一行:

127.0.0.1 hkg01.contribute.live-video.net

hkg01.contribute.live-video.net 改为你的推流域名。如果权限不足不能保存的话,可以先保存在桌面,然后复制过去覆盖源文件。

然后按照上一部分的步骤设置 OBS 推流就行啦。

总结

上面说的两种办法已经基本够用了,除了 Facebook 这种只支持 RTMPS 推流的平台。看了下要把 RTMPS 转成 RTMP 的话好像要转推平台,目前知道的 SRS 在做这方面的东西:https://github.com/ossrs/srs/issues/2676,根据本文的方法应该基本都能支持了。

但是那样的话就有点小题大做了,还不如直接再装一个 SocksCap64 方便,或者去考虑 Netch 能不能多开的问题,再不济也能 Proxifier 试用(配合 RunAsDate 这种修改软件运行时间的程序,虽然很不厚道吧噗噗)。

RunAsDate

官网地址:https://www.nirsoft.net/utils/run_as_date.html

旧版源码:https://github.com/malaohu/RunAsDate

而刚刚提及的转推平台的话倒是有其它的用处,比如在本地另一台电脑搭建一个,就可以实现多平台同步开播及录制,还同时解决了本文所提到的问题。