yjqiang / danmu

哔哩哔哩、斗鱼和虎牙直播弹幕,使用websocket协议和tcp协议两种均可
MIT License
98 stars 23 forks source link

请问虎牙的 tars 对象 是怎么转换成 python的 #15

Open xiaoweigege opened 3 years ago

xiaoweigege commented 3 years ago

请问虎牙的 tars 对象 是怎么转换成 python的

yjqiang commented 3 years ago

https://github.com/yjqiang/danmu/blob/master/examples/huya/utils.py 这个应该是通用的,原版有 js 的,我是手动翻译过来的。核心是调用了 https://github.com/yjqiang/danmu/tree/master/examples/huya/tars ,这个是我找到 tar 项目,复制的

hldh214 commented 3 years ago

@yjqiang 请问下, 我在翻译 getLivingInfo 检测开播状态的结构发现一个叫做 Taf.Wup 的对象, 好像在 https://github.com/TarsCloud/TarsTup 这里没找到, 大概长这样

var s = new p.Wup;
s.setServant(t),
s.setFunc(e),
s.setRequestId(r),
s.writeStruct("tReq", i);  
var a = new l.WebSocketCommand;
a.iCmdType = l.EWebSocketCommandType.EWSCmd_WupReq,
a.vData = s.encode();
var u = c.report.getTraceId(r);
u && (a.traceId = u + "-" + u);
var h = new p.JceOutputStream;
a.writeTo(h),
c.report.setField(r, "unipacket_encode_end")

有点没搞懂这里的 writeStruct 跟后面的 encode 如何翻译成 python 代码

我目前的做法是通过 node 调用翻译不了的 js 代码, 把结果解析后回传给 python https://github.com/hldh214/recorder/blob/598b17f69714d3d277ed7b6e8f9c1e50ce232ff6/recorder/source/taf.js#L6001-L6032 不知道有没有啥好方法可以把 js 翻译过来

yjqiang commented 3 years ago

我建议别折腾,转 js。 这东西估计只能像我这样,你发现有需要的 pattern,就去 js 里面找到匹配代码段,翻译一部分转成 py。

hldh214 commented 3 years ago

刚刚研究了一下, 发现 tarscore.TarsUniPacket() 好像跟 Taf.Wup() 类似, 都有 servant, func, requestid 这些, 组装消息发给虎牙终于能收到响应了, 但是是提示 type mismatch, 也不知道具体是啥地方没对上... 这东西硬翻译感觉太难了. 找不到其他方法估计我还是只能先用 js 顶着了.