Websocket获取B站直播间弹幕教程 您所在的位置:网站首页 怎么用ps5看哔哩哔哩的直播间 Websocket获取B站直播间弹幕教程

Websocket获取B站直播间弹幕教程

2024-07-07 12:54| 来源: 网络整理| 查看: 265

一、首先、获取直播开放平台 秘钥 进入 哔哩哔哩直播开放平台:https://open-live.bilibili.com/注册申请个人开发者认证,获得access_key_id 和 access_key_secred进入bilibili创作者服务中心 -> 创建项目 -> 获得项目ID( app_id )

官方文档:https://open-live.bilibili.com/document/eba8e2e1-847d-e908-2e5c-7a1ec7d9266f

二、开启/关闭你项目时 需要发送的请求

注意:Post参数需要签名加密,并且设置到请求头;设置完后才能成功获得/app/start的响应,获得直接间弹幕服务器连接地址和鉴权信息; 可以在下面找到签名方法。

1. 获取直接间弹幕服务器信息 post请求 https://open-live.bilibili.com/v2/app/start post参数:

参数名类型描述codestring主播身份码:身份码是随机生成的,会绑定自己的直播间,可以进入自己的直播中心获取app_idinteger项目ID

响应:

{ "code": 0, "message": "ok", "data": { // 场次信息 "game_info": { // 场次id,心跳key(心跳保持20s-60s)调用一次,超过60s无心跳自动关闭,长连停止推送消息 "game_id": "" }, // 长连信息 "websocket_info": { // 长连使用的请求json体 第三方无需关注内容,建立长连时使用即可 "auth_body": "", // wss 长连地址 "wss_link": [...] }, // 主播信息 "anchor_info": {...} } }

game_id: 为场次id, 未上线前这个返回值好像是空的 websocket_info: 获取弹幕服务器地址wss_link 和 用于鉴权的auth_body

2. 保持项目心跳,每隔20s发送一次 post请求: https://open-live.bilibili.com/v2/app/heartbeat post参数:

参数名类型描述game_idstring场次id

这里我发送项目心跳请求报错了,可能是没有场次ID的关系,但是并不影响连接弹幕服务器

3. 关闭项目 post请求: https://open-live.bilibili.com/v2/app/end post参数:

参数名类型描述app_idinteger项目IDgame_idstring场次id 三、POST请求头设置 - 请求签名

POST请求头

Accept: application/json Content-Type: application/json x-bili-content-md5: 0b010df38273f74f17772b286b1a8406 x-bili-timestamp: 1695448824 x-bili-signature-version: 1.0 x-bili-signature-nonce: 1b4c4604-a446-45c3-b918-8795c7419e16 x-bili-signature-method: HMAC-SHA256 x-bili-accesskeyid: xxxxxxxxxxxxxxx Authorization: xxxxxxxxxxxxxx

请求头详细说明

**Accept:** application/json **Content-Type:** 必须为application/json,后面加; charset=utf-8都不行 **x-bili-content-md5:** post参数的json字符串进行MD5后得到的32位字符串 ## 比如/v2/app/start的post参数{"code":"SSSS8SSS88S88", "app_id":123456789101},md5计算后得到0b010df38273f74f17772b286b1a8406 **x-bili-timestamp:** 十位的时间戳 **x-bili-signature-version:** 目前1.0 **x-bili-signature-nonce:** 随机数,官方用的是uuid **x-bili-signature-method:** 签名算法:目前固定HMAC-SHA256 **x-bili-accesskeyid:** 个人开发者的access_key_id **Authorization:** sha256计算后的字符串,具体计算方法在下面

Authorization计算 声明字符串,赋值以下参数

String preAuthorization = "x-bili-accesskeyid:"+ 个人开发者的access_key_id +"\n" +"x-bili-content-md5:"+ 0b010df38273f74f17772b286b1a8406 +"\n" +"x-bili-signature-method:HMAC-SHA256\n" +"x-bili-signature-nonce:"+ 1b4c4604-a446-45c3-b918-8795c7419e16 +"\n" +"x-bili-signature-version:1.0\n" +"x-bili-timestamp:"+ 1695448824

注意: 参数直接必须用 \n 隔开 然后用sha256工具类对该字符串进行计算,结果赋值到Authorization请求头。

下面以JAVA代码为例子

StringBuilder s = new StringBuilder(); s.append(x-bili-accesskeyid:).append(access_key_id).append(\n); s.append(x-bili-content-md5:).append(contentMd5).append(\n); s.append(x-bili-signature-method:HMAC-SHA256).append(\n); s.append(x-bili-signature-nonce:).append(uuid).append(\n); s.append(x-bili-signature-version:1.0).append(\n); s.append(x-bili-timestamp:).append(1695448824); //SHA256计算 String macAlgorithm = "HmacSHA256"; byte[] headerByte = s.toString().getBytes(StandardCharsets.UTF_8); byte[] secretByte = secret.accessSecret.getBytes(StandardCharsets.UTF_8); Mac mac = Mac.getInstance(macAlgorithm); mac.init(new SecretKeySpec(secretByte, macAlgorithm)); byte[] bytes = mac.doFinal(headerByte); //byte数组转字符串,大家可以找工具类转字符串 StringBuffer stringBuffer = new StringBuffer(); String temp = null; for (int i=0;i stringBuffer.append("0"); } stringBuffer.append(temp); } return stringBuffer.toString(); 四、Websocket连接弹幕服务器

如果请求签名没问题的话,那么我们发送 /v2/app/start 请求后就可以获得 wss_link 和 auth_body

在wss_link选一个服务器节点地址发送websocket请求到服务器节点地址成功连接服务后,发送认证协议包(将auth_body根据B站封包协议转成byte数组,然后发送)认证成功后,每30秒发送心跳包(根据B站封包协议转成byte数组,然后发送),保证不会自动断开连接以上操作成功后,websocket的onMessage就能监听到消息,当然消息也需要根据B站协议解包 五、B站Websocket协议包 封包 和 解包

Websocket获取B站直播间弹幕教程——第二篇、解包/拆包 假如用的是js/ts,那不用考虑这个问题,官方有现成的js。 官方文档:https://open-live.bilibili.com/document/657d8e34-f926-a133-16c0-300c1afc6e6b

六、实现代码 1、基于官方开放API实现

【flutter / dart 版本】websocket获取B站直播弹幕——基于直播开放平台 【JAVA版本】websocket获取B站直播弹幕——基于直播开放平台

2、非开放API实现

【JAVA版本】最新websocket获取B站直播弹幕——非官方开放API



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有