Ps5_Irc服务
PS5用户直播只能用采集卡或者直接推送到twich或者youtube,无意中看到B站有同学用PS5直接推送到B站,但是需要一些技术门槛,按照那个同学的思路整理了自己直播到B站的方式
思路
PS5推流到nginx-rtmp,再从nginx-rtmp推流到B站,但是这样的话弹幕看到,所以搞了个IRF转发的代码段。
PS5跟twitch服务器发送相互数据如下:
1.PS5发送PASS
2.irc回复特定内容
3.PS5发送JOIN
4.irc回复特定内容(据实际观察,3、4步重复两次)
前四步已经建立了信任连接,之后就是irc单向往PS5发送消息
那么我们自己建一个irc服务器,跟PS5交互就行
步骤
使用抽取B站直播间弹幕的用的是https://github.com/xfgryujk/blivedm,也可以看我的github,里面有以下代码文件
1.simple.py中直播间号码改成自己的
TEST_ROOM_IDS = [
22509403,
]2.simple.py中添加像irf发送弹幕代码
def send(bmsg):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接:
s.connect(('10.255.1.101', 6667))
s.send(bmsg.encode('utf-8'))
s.close()3.simple.py中async def _on_danmuku下面添加代码
send(":" + message.uname +"!" + message.uname + "@" + message.uname + ".tmi.twitch.tv PRIVMSG " + "#willwillwang :"+ message.msg + "\r\n")4.Irc服务器程序
import socket
import os
from threading import Thread
import threading
clients = set()
clients_lock = threading.Lock()
def listener(client, address):
print ("Accepted connection from: ", address)
with clients_lock:
clients.add(client)
try:
while True:
data = client.recv(1024)
if not data:
break
else:
print (repr(data))
if b'PASS' in data:
msg = """:tmi.twitch.tv 001 willwillwang :Welcome, GLHF!
:tmi.twitch.tv 001 willwillwang :Welcome, GLHF!
:tmi.twitch.tv 002 willwillwang :Your host is tmi.twitch.tv
:tmi.twitch.tv 003 willwillwang :This server is rather new
:tmi.twitch.tv 004 willwillwang :-
:tmi.twitch.tv 375 willwillwang :-
:tmi.twitch.tv 372 willwillwang :You are in a maze of twisty passages, all alike.
:tmi.twitch.tv 376 willwillwang :>
"""
data = msg.encode('ascii')
if b'JOIN' in data:
msg = """:[email protected] JOIN #willwillwang
:willwillwang.tmi.twitch.tv 353 willwillwang = #willwillwang :willwillwang
"""
data = msg.encode('ascii')
with clients_lock:
for c in clients:
c.sendall(data)
print(data.decode('utf-8'))
finally:
with clients_lock:
clients.remove(client)
client.close()
host = '0.0.0.0'
port = 6667
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host,port))
s.listen(3)
th = []
while True:
print ("Server is listening for connections...")
client, address = s.accept()
th.append(Thread(target=listener, args = (client,address)).start())
s.close()注意
把上面willwillwang的部分更改为自己twitch账号