Skip to content

Latest commit

 

History

History
133 lines (116 loc) · 18.1 KB

README.md

File metadata and controls

133 lines (116 loc) · 18.1 KB

AcfunDanmu AcFun直播弹幕工具

Source

Im.proto为主站WebSocket,主要负责私信、推送之类的。

此项目已切换至TCP连接方式,如需参考WebSocket连接方式,请查看2.2.3版本

AcFun直播WebSocket/TCP数据结构

起始位置,偏移量 结构 说明
0, 12 ABCD 0001 FFFF FFFF FFFF FFFF ABCD 0001为Magic Number, 第一组FFFF FFFF为头数据长度,第二组FFFF FFFF为AES IV长度(固定为16)+ AES加密后的数据长度
12, 头数据长度 PacketHeader 具体数据结构请查看PacketHeader
12 + 头数据长度, 16 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF AES IV,加解密用
28 + 头数据长度, 具体数据长度 - 16 AES加密的UpstreamPayloadDownstreamPayload 密钥为SecurityKey或SessionKey(由PacketHeader中的encryptionMode指定)

AcFun直播WebSocket/TCP流程

前置流程
  1. 请求https://live.acfun.cn获取_didCookies(可用随机字符串如UUID替代)

  2. 获取userIdacSecurityacfun.api.visitor_st

    • 未登录/匿名用户发送 POST application/x-www-form-urlencoded请求https://id.app.acfun.cn/rest/app/visitor/login,表单数据为sid=acfun.api.visitor
    • 已登录用户发送 POST application/x-www-form-urlencoded请求https://id.app.acfun.cn/rest/web/token/get,表单数据为sid=acfun.midground.api
  3. 获取availableTicketsliveIdenterRoomAttach

    发送POST application/x-www-form-urlencoded请求https://api.kuaishouzt.com/rest/zt/live/web/startPlay?subBiz=mainApp&kpn=ACFUN_APP&kpf=PC_WEB&userId=[userId]&did=[_did]&acfun.api.visitor_st=[acfun.api.visitor_st/acfun.midground.api_st],表单数据为authorId=[主播Id]

其他请求
  • 获取礼物列表

    发送POST application/x-www-form-urlencoded请求https://api.kuaishouzt.com/rest/zt/live/web/gift/list?subBiz=mainApp&kpn=ACFUN_APP&kpf=PC_WEB&userId=[userId]&did=[_did]&acfun.midground.api_st=[acfun.api.visitor_st/acfun.midground.api_st],表单数据为visitorId=[userId]&liveId=[liveId]

  • 获取在线观众

    发送POST application/x-www-form-urlencoded请求https://api.kuaishouzt.com/rest/zt/live/web/watchingList?subBiz=mainApp&kpn=ACFUN_APP&kpf=PC_WEB&userId=[userId]&did=[_did]&acfun.midground.api_st=[acfun.api.visitor_st/acfun.midground.api_st],表单数据为visitorId=[userId]&liveId=[liveId]

正式流程

  1. 建立连接
    • WebSocket[wss://klink-newproduct-ws1.kwaizt.com, wss://klink-newproduct-ws2.kwaizt.com, wss://klink-newproduct-ws3.kwaizt.com]
    • TCPslink.gifshow.com:14000
  2. (仅限TCP连接)发送HandshakeRequest,接收HandshakeResponse
  3. 发送RegisterRequest(SeqId加1),encryptionModeKEncryptionServiceToken,加密密钥为acSecurity
  4. 接收DownStreamPayload,根据Command进行对应的处理

有问题?

  1. 提交Issue
  2. 搜索QQ频道“AcFun开源⑨课”