Closed gitldg closed 1 month ago
虎牙直播间WebSocket指令类型:
public enum EWebSocketCommandType { EWSCmd_NULL = 0, EWSCmd_RegisterReq = 1, EWSCmd_RegisterRsp = 2, EWSCmd_WupReq = 3, EWSCmd_WupRsp = 4, EWSCmdC2S_HeartBeat = 5, EWSCmdS2C_HeartBeatAck = 6, EWSCmdS2C_MsgPushReq = 7, EWSCmdC2S_DeregisterReq = 8, EWSCmdS2C_DeRegisterRsp = 9, EWSCmdC2S_VerifyCookieReq = 10, EWSCmdS2C_VerifyCookieRsp = 11, EWSCmdC2S_VerifyHuyaTokenReq = 12, EWSCmdS2C_VerifyHuyaTokenRsp = 13, EWSCmdC2S_UNVerifyReq = 14, EWSCmdS2C_UNVerifyRsp = 15, EWSCmdC2S_RegisterGroupReq = 16, EWSCmdS2C_RegisterGroupRsp = 17, EWSCmdC2S_UnRegisterGroupReq = 18, EWSCmdS2C_UnRegisterGroupRsp = 19, EWSCmdC2S_HeartBeatReq = 20, EWSCmdS2C_HeartBeatRsp = 21, EWSCmdS2C_MsgPushReq_V2 = 22 }
目前,在源码位置:*\AllLive-master\AllLive.Core\Danmaku\HuyaDanmaku.cs,仅解析了type = 7的弹幕,未解析type = 22的弹幕数据,后者所占弹幕量比重量更多一些。
private void Ws_OnMessage(object sender, MessageEventArgs e) { try { var stream = new TarsInputStream(e.RawData); var type = stream.Read(0, 0, false); if (type == 7) { stream = new TarsInputStream(stream.Read(new byte[0], 1, false)); HYPushMessage wSPushMessage = new HYPushMessage(); wSPushMessage.ReadFrom(stream); if (wSPushMessage.Uri == 1400) { //HYMessage弹幕数据解析 } if (wSPushMessage.Uri == 8006) { //Online相关 } } //目前现在很多弹幕是type = 22,未处理此类型弹幕数据 } catch (Exception) { } }
没有爬到type=22的弹幕,需要特定直播间?
@xiaoyaocz 不好意思,没能及时回复。测试发现type=22数据未解析,但一直有数据在跑。目前确实可以忽略type=22的数据,因基本都是AI弹幕(系统通知弹幕,非用户手敲弹幕),可以不用处理,其内部都是MsgItem.Uri = 1100003(AiBarrageDetectNotify) 类型的数据。参考资料:虎牙弹幕指令类型
虎牙直播间WebSocket指令类型:
目前,在源码位置:*\AllLive-master\AllLive.Core\Danmaku\HuyaDanmaku.cs,仅解析了type = 7的弹幕,未解析type = 22的弹幕数据,后者所占弹幕量比重量更多一些。