Skip to content

OrdinaryRoad-Project/ordinaryroad-bilibili-live

Repository files navigation

ordinaryroad-bilibili-live

license release Maven Central

使用Netty来连接B站直播间的弹幕信息流Websocket接口

⚠️⚠️⚠️ 项目已重构(API不变,v0.0.9为最后一个版本),已支持Bilibili、Douyu、Huya、Douyin、Kuaishou,传送门:ordinaryroad-live-chat-client,有问题欢迎提交issuse,觉得有用的话可以点个小星星⭐️鼓励一下,感谢

  • Feature 0: Netty
  • Feature 1: 消息中的未知属性统一放到单独的MAP中
  • Feature 2: 支持房间短id
  • Feature 3: 支持自动重连
  • Feature 4: 支持Cookie
  • Feature 5: 支持同时监听多个直播间

☑️ ✅ ToDo List: https://github.com/users/1962247851/projects/1/views/1?filterQuery=repo%3A%22OrdinaryRoad-Project%2Fordinaryroad-bilibili-live%22

1. 引入依赖

<dependency>
    <groupId>tech.ordinaryroad.bilibili.live</groupId>
    <artifactId>ordinaryroad-bilibili-live</artifactId>
    <!-- 参考github release版本,不需要前缀`v` -->
    <version>${ordinaryroad-bilibili-live.version}</version>
</dependency>

2. 开始使用

Spring Boot 3示例项目:https://github.com/OrdinaryRoad-Project/ordinaryroad-bilibili-live-example

2.1 Client模式

参考BilibiliLiveChatClientTest测试类

String cookie = System.getenv("cookie");
BilibiliLiveChatClientConfig config = BilibiliLiveChatClientConfig.builder()
    // TODO 浏览器Cookie
    .cookie(cookie)
    .roomId(7777)
    .build();

client = new BilibiliLiveChatClient(config, new IBilibiliSendSmsReplyMsgListener() {
    @Override
    public void onDanmuMsg(SendSmsReplyMsg msg) {
        JsonNode info = msg.getInfo();
        JsonNode jsonNode1 = info.get(1);
        String danmuText = jsonNode1.asText();
        JsonNode jsonNode2 = info.get(2);
        Long uid = jsonNode2.get(0).asLong();
        String uname = jsonNode2.get(1).asText();
        log.info("收到弹幕 {}({}):{}", uname, uid, danmuText);
    }
});
client.connect();

2.2 高级模式

参考BilibiliBinaryFrameHandlerTest测试类

重写IBilibiliSendSmsReplyMsgListener中的方法,进行处理业务逻辑(耗时操作可能需要异步)

修改相关参数后,运行查看效果

    // TODO 修改房间ID
    long roomId = 7777;
    // TODO 设置浏览器Cookie
    String cookie = System.getenv("cookie");
    // TODO 修改版本
    ProtoverEnum protover = ProtoverEnum.NORMAL_BROTLI;

控制台输出示例 控制台示例

CmdEnum可能不全,需要根据控制台信息手动补(不影响运行)

相关链接