Skip to content

tiktok 弹幕 #2

@chenkai89

Description

@chenkai89

大哥,我根据你的代码使用python实现了一遍,目前可以监听到数据,但是经过40秒就会自动断开,目前不知道是心跳发送的有问题还是ack响应的有问题,请大哥帮我分析下,万分感谢!

这是心跳方法
async def send_heartbeat_message(self, websocket):
try:
heartbeat_msg = webcast_pb2.WebcastHeartBeatMessage()
heartbeat_msg.RoomId = self.room_id
heartbeat_msg.SeqId = self.seq_id

        push_frame = webcast_pb2.WebcastImHeartBeatMessagePushFrame()
        push_frame.PayloadEncoding = "pb"
        push_frame.PayloadType = "hb"
        push_frame.Payload = heartbeat_msg.SerializeToString()

        frame_data = push_frame.SerializeToString()
        b64_data = base64.b64encode(frame_data).decode('utf-8')
        log(f"💓 发送心跳消息 (Base64): {b64_data}")

        self.seq_id += 1

        await websocket.send(frame_data)
    except Exception as e:
        print(f"❌ 心跳发送失败: {e}")
        raise  # 触发断开连接

这是ACK响应
async def send_ack(self, internal_ext, log_id):

    metadata1 = webcast_pb2.CustomMetadata()
    metadata1.unknown1 = 98

    pushFrame = webcast_pb2.WebcastAckMessagePushFrame()
    pushFrame.CustomData1 = metadata1.SerializeToString()
    pushFrame.PayloadType = 'ack'
    pushFrame.Payload = internal_ext.encode('utf-8')
    pushFrame.LogId = log_id

    frame_data = pushFrame.SerializeToString()
    b64_data = base64.b64encode(frame_data).decode('utf-8')
    log(f"💓 Ack响应消息 (Base64): {b64_data}")

    await self.ws.send(frame_data)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions