不用采集卡搭建PS4直播环境&CentOS 7网络设置


嗯,这么两个话题参杂在一起确实有点怪。最近买了台式机,为了不浪费我16G的内存,果断搞了个Linux的虚拟机作为开发机。选择系统时没有用常用的debian/ubuntu,选择了自己比较熟悉的CentOS系列,然后正好顺便试试最新的CentOS 7。然后发现坑了,7里很多系统管理规则都和6.x不一样了,特别是网络有关的部分。
为了实现直播写码月入百万的梦想,必须得开搞直播啊,作为一个屌丝码农,自然买不起采集卡。之前在网上看到过劫持PS4自带的twitch转播的帖子,于是果断操练一把。

原理

最早ps4劫持twitch流量到斗鱼其实非常简单,只需要搭建带ngx-rmtp模块的nginx,并且在路由器把live.twitch.tv解析到nginx上即可。但后来系统更新之后这个方法就不能用了,看了这两篇帖子之后也不是说的特别详细,而且比较详细的how to do还是基于windows的,对于我这种windows只用于打游戏的人来说还是linux熟悉些。目前来说,要劫持twitch流量必须对相关的ip做劫持。

实现步骤

获取ip,并绑定到网卡上

# 得到ip列表
nslookup live.twitch.tv | perl -ne 'if(m/^Address:\s+(\d+\.\d+\.\d+\.\d+)$/) { print $1, "\n" }' > ip.txt

然后根据ip生成全部的网卡配置文件,这里用一个perl脚本来实现,我在虚拟机里的网卡是enp0s3,大家可以根据自己实际的网卡设备名来改。

#!/usr/bin/env perl

use strict;
use warnings;

my $i = 0;
while (defined (my $line = <STDIN>)) {
    open OUT, '>', "/etc/sysconfig/network-scripts/ifcfg-enp0s3:$i";
    chomp $line;
	print OUT "TYPE=Ethernet\n";
	print OUT "BOOTPROTO=static\n";
	print OUT "IPV4_FAILURE_FATAL=no\n";
	print OUT "IPV6INIT=yes\n";
	print OUT "IPV6_AUTOCONF=yes\n";
	print OUT "IPV6_DEFROUTE=yes\n";
	print OUT "IPV6_PEERDNS=yes\n";
	print OUT "IPV6_PEERROUTES=yes\n";
	print OUT "IPV6_FAILURE_FATAL=no\n";
	# 这里需要改的是两个设备名,改成自己实际的设备名,还有上面的网卡配置文件名
	print OUT "DEVICE=enp0s3:$i\n";
	print OUT "NAME=enp0s3:$i\n";
	print OUT "ONBOOT=yes\n";
	print OUT "IPADDR=$line\n";
	print OUT "NETMASK=255.255.255.255\n";
	print OUT "DNS1=192.168.199.1\n";
    close OUT;
    $i++;
}

重启网络之后,应该就已经用上了这几个ip了,6.x年代重启网络一般是service network restart,但是到了7.x年代引入了一个叫做systemctl的命令,虽然老命令也兼容,但实际执行的是systemctl restart network,不过我还是比较习惯用service相关的命令。之后就是开启Linux的路由功能,编辑/etc/sysctl.conf文件,在末尾添加:

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
kernel.sysrq = 0

然后执行sysctl -p /etc/sysctl.conf应用配置,再给iptables添加转发功能,并开启80/1935端口,以便等下nginx连接。

iptables -A FORWARD -j ACCEPT
# 改成自己的网卡名
iptables -t nat -A POSTROUTING -j MASQUERADE -o enp0s3

编译安装nginx

wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar zxvf nginx-1.6.2.tar.gz
git clone https://github.com/arut/nginx-rtmp-module.git
cd nginx-1.6.2
./configure --add-module=../nginx-rtmp-module --with-http_ssl_module --prefix=/opt/nginx
make && make install

编译安装好nginx之后开始配置nginx,打开/opt/nginx/conf/nginx.conf,首先在最外层(和http同级)添加

rtmp {
    server {
        listen 1935;
        chunk_size 131072;
        max_message 256M;

        application app {
            live on;
            record off;
            meta copy;
            # 下面改成自己的stream key,除了斗鱼其他直播网站也一样能用,改下url就行
            push rtmp://send1.douyutv.com/live/[stream key]];
        }
    }
}

之后为了看到统计状态,还要配置一下rtmp模块的统计,先将/path/to/nginx-rtmp-module/stat.xsl拷贝到/opt/nginx/html/下,然后在http下的server下添加两个handler:

#This URL provides RTMP statistics in XML
location /stat {
    rtmp_stat all;

    # Use this stylesheet to view XML as web page
    # in browser
    rtmp_stat_stylesheet stat.xsl;
}

location /stat.xsl {
    # XML stylesheet to view RTMP stats.
    # Copy stat.xsl wherever you want
    # and put the full directory path here
    root /opt/nginx/html/;
}

启动nginx如果1935端口已经监听,那么服务端的工作就已经配置好了

配置ps4

配置一下ps4的网络,网关设置为linux机器的ip地址,然后dns设置一个设置路由器的ip就行了。接下来打开游戏,按下share键,选择twitch分享就可以将画面分享到斗鱼上了。试了一下,我这里上传应该是1m的,画质选中就不卡,但就是好模糊,还是采集卡靠谱一些,不过用这个方法省钱啊!

碎碎念

CentOS 7的系统管理改了好多,虽然老的配置方式还是兼容的,但还是感觉有点陌生。不过好处是gcc是4.8.2的,kernel是3.10.0的,相对公司用的6.4还是更新不少。不过安装界面也改了不少,选minimal安装好像不能自定义需要哪些包了,但也还能接受吧。

广告

之前斗鱼直播室n久没播被关了,然后客服打不开,因为绑定过身份证又不能注册新的,就死锁了。后来某Jim勾搭上了一个斗鱼的rd,然后终于把房间解锁了!http://www.douyutv.com/ushuaia,不定期播出,玩一些主机游戏或者用pc玩一些单机游戏。最近可能会播cod 11日常被吊打、风暴英雄打电脑做金币赚日常(对,你没看错)、恶灵附身、龙腾传说3审判等等,当然最重要的是偶尔插播写代码,不过主播是哑巴,从来不会说话的!

参考文档

  1. 无需HDMI采集卡,PS4直播功能破解,支持录制
  2. 手把手教你搭建Windows环境PS4直播服务器
  3. nginx-rtmp-module
  4. 斗鱼直播室

文章作者: Odin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Odin !
  目录