OrdinaryRoad-Project / ordinaryroad-live-chat-client

(2024最新版) 一个基于Netty的通用直播间弹幕客户端,支持网络代理,支持弹幕发送*、为主播点赞*,已支持B站、斗鱼、虎牙、抖音、快手;BarrageFly——让弹幕飞,基于该项目的一个弹幕转发、过滤、处理平台;支持多平台直播间弹幕监听
https://barragefly.ordinaryroad.tech
MIT License
204 stars 41 forks source link

抖音无法获取弹幕数据 #105

Closed wisdomTechnologyIoT closed 5 months ago

wisdomTechnologyIoT commented 5 months ago

抖音无法获取弹幕数据其他的平台可以这个怎么解决大佬

1962247851 commented 5 months ago

版本、房间号、Client配置、有无报错🙂

wisdomTechnologyIoT commented 5 months ago

抖音的包是0.4.1 房间号对过 但是其他的平台可以获取数据

wisdomTechnologyIoT commented 5 months ago

枯了

wisdomTechnologyIoT commented 5 months ago

没显示报错

1962247851 commented 5 months ago

换个直播间也收不到吗

wisdomTechnologyIoT commented 5 months ago

wisdomTechnologyIoT commented 5 months ago

都没效果

1962247851 commented 5 months ago

但我好像复现不了😢,本地跟服务器上都正常的

wisdomTechnologyIoT commented 5 months ago

你那边能正常获取数据吗

1962247851 commented 5 months ago

https://barragefly.ordinaryroad.tech:7000/barrage?taskIds=1767367738595041280

wisdomTechnologyIoT commented 5 months ago

为啥你这房间号这么长

1962247851 commented 5 months ago

那个是任务id,不是房间号

wisdomTechnologyIoT commented 5 months ago

image 连上了就这样子 没有数据

1962247851 commented 5 months ago

哪个直播间

wisdomTechnologyIoT commented 5 months ago

这个 667192034586 不过全部的直播间都是这样子

1962247851 commented 5 months ago

正常image

1962247851 commented 5 months ago

https://barragefly.ordinaryroad.tech:7000/barrage?taskIds=1773265817600876544

wisdomTechnologyIoT commented 5 months ago

我用的是client模式本地 好奇怪我再试试

1962247851 commented 5 months ago

代码贴一下看看

wisdomTechnologyIoT commented 5 months ago

if (liveInfo.getLiveType() == 1 && liveInfo.getLiveRoomNumber() != null) { LIVE_TYPE = liveInfo.getLiveType(); String cookie = System.getenv("cookie"); log.error("cookie: {}", cookie); DouyinLiveChatClientConfig config = DouyinLiveChatClientConfig.builder() // TODO 浏览器Cookie .cookie(cookie) .roomId(liveInfo.getLiveRoomNumber()) .build(); douYinClient = new DouyinLiveChatClient(config, new IDouyinMsgListener() { /*进入直播间/ @Override public void onEnterRoomMsg(DouyinBinaryFrameHandler binaryFrameHandler, DouyinEnterRoomMsg msg) { liveMessageVo messageVo = new liveMessageVo(); messageVo.setType(1); messageVo.setUserName(msg.getUsername()); System.out.println("进入直播间"); webSocket.sendMessageAll(gson.toJson(messageVo)); }

            /**收到弹幕*/
            @Override
            public void onDanmuMsg(DouyinBinaryFrameHandler binaryFrameHandler, DouyinDanmuMsg msg) {
                liveMessageVo messageVo = new liveMessageVo();
                messageVo.setType(2);
                messageVo.setUserName(msg.getUsername());
                messageVo.setMessageContent(msg.getContent());
                webSocket.sendMessageAll(gson.toJson(messageVo));
            }

            /**收到礼物*/
            @Override
            public void onGiftMsg(DouyinBinaryFrameHandler binaryFrameHandler, DouyinGiftMsg msg) {
                //判断礼物数量是否大于0
                if (msg.getGiftCount() > 0) {
                    liveMessageVo messageVo = new liveMessageVo();
                    messageVo.setType(3);
                    messageVo.setUserName(msg.getUsername());
                    messageVo.setMessageContent(msg.getGiftName());
                    messageVo.setCount(msg.getGiftCount());
                    webSocket.sendMessageAll(gson.toJson(messageVo));
                    System.out.println("礼物内容" + msg);
                }

            }
        });
        //开启抓取数据
        douYinClient.connect();

        final AtomicInteger status = new AtomicInteger(0);
        final CountDownLatch latch = new CountDownLatch(1);
        // 客户端连接状态回调
        douYinClient.addStatusChangeListener(new PropertyChangeListener() {
            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                System.out.println(evt);
                System.out.println(evt.getPropertyName());
                if (evt.getNewValue().equals(ClientStatusEnums.CONNECT_FAILED)) {
                    System.out.println("连接失败");
                    status.set(1);
                    latch.countDown();  // 表明回调已执行
                }
            }
        });
        //锁存器 2秒后解锁
        latch.await(2, TimeUnit.SECONDS);
        if (status.get() == 1) {
            return CompletableFuture.completedFuture(new Result().startError());
        } else {
            System.out.println("开始直播");
            return CompletableFuture.completedFuture(new Result().startSuccess());
        }
    }
1962247851 commented 5 months ago

感觉唯一可能有问题的就是.roomId(liveInfo.getLiveRoomNumber())设置房间号这行代码,你试试输出一下实际配置的房间号是多少

wisdomTechnologyIoT commented 5 months ago

输出的是正常的直播间号 String类型

1962247851 commented 5 months ago

https://live.douyin.com/房间号可以正常打开直播间吗

wisdomTechnologyIoT commented 5 months ago

可以

1962247851 commented 5 months ago

添加一下onMsg消息回调

@Override
            public void onMsg(IMsg msg) {
                log.debug("收到{}消息 {}", msg.getClass(), msg);
            }
wisdomTechnologyIoT commented 5 months ago

加了好像没有回调信息输出

1962247851 commented 5 months ago

打印一下消息监听器个数,System.out.println("MsgListener Count: " + client.getMsgListeners().size()); 把配置cookie的那一行注释掉

1962247851 commented 5 months ago

再不行我也没法了😭

wisdomTechnologyIoT commented 5 months ago

image 消息监听器一个

wisdomTechnologyIoT commented 5 months ago

傻眼了 好像也没问题

wisdomTechnologyIoT commented 5 months ago

老哥有联系方式吗 有偿 不会让你白帮忙

1962247851 commented 5 months ago

QQ频道