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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions