前段时间想尝试下直播推流到 Twitch,找了半天 OBS Studio 能在哪里设置代理,结果发现不支持,也不会走系统代理,稍微找了一下教程,所以顺便总结了一下。本文以使用 Twitch 和设置自定义推流服务器为例,需要的话可以参考一下。
前言
OBS是一個用於錄製和進行網路直播的自由開源軟體套件。OBS使用C和C++語言編寫,提供即時源和裝置擷取、場景組成、編碼、錄製和廣播。資料傳輸主要通過即時訊息協定(RTMP)完成,可以傳送到任何支援RTMP的軟體,包括YouTube、Twitch.tv、Instagram和Facebook等串串流媒體網站。
——摘自 《Wikipedia》
网上的办法基本都是使用 Proxifier 让 OBS 走代理,应该用起来没啥问题,但是 Proxifier 是商业收费版软件的啊,同类型的倒是一下子想到了 SocksCap64 和 SSTap,但是这两东西作者都不更新了,还不如用 Netch,所以接下来先说使用 Netch 的办法。
使用 Netch 代理 OBS
Netch 其实和 Proxifier 差不多,也是可以让指定的软件走代理,一般来说直接选“Bypass LAN and China”(不代理局域网和中国大陆)即可:
但是这样的话会让其它许多软件也走代理过,特别是你的游戏,或者是开了游戏加速器的时候,可能就会产生冲突导致奇奇怪怪的问题出现,所以我们设置一下单独给 OBS 走代理就好:
创建进程模式
选择处理规则,打开 OBS 所在文件夹,然后选择文件夹
输入备注然后保存就行啦,其他的不用动
在模式选择的地方选择刚刚添加的 OBS 模式,然后启动就好了
OBS 这边需要设置自定义服务器,我也不知道为什么自带的那个不能用(至少 Twitch 不行,其它平台我暂时不知道),串流密钥在 Twitch 网站上看(反正这里就讲通用的办法,通过自定义 RTMP 服务器地址推流)
关于 Twitch 推流服务器的地址这里顺便提一下吧
我用的是
hkg01.contribute.live-video.net/app/
其余的在这里可以找到:https://ingest.twitch.tv/ingests
现在 OBS 可以通过代理正常推流了,当正在使用各种网游加速器或者直连玩一些外服游戏时,也不会产生冲突。
但如果你用的不是专门的游戏加速器,平时也是用的 Netch 这种软件来加速游戏的,虽然仍然可以用一开始就提到的办法(即选择“Bypass LAN and China”),但是一般来说游戏线路的流量都比较贵(你要是不心疼的话就算了),所以这个时候就有了另一种办法,通过 GOST 代理链来转发 RTMP 流量。
使用 GOST 转发 RTMP
GOST 是一个 GO 语言实现的安全隧道
其实我倒更喜欢这种办法,毕竟 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
而刚刚提及的转推平台的话倒是有其它的用处,比如在本地另一台电脑搭建一个,就可以实现多平台同步开播及录制,还同时解决了本文所提到的问题。