feat: 修复启动bash路径、将丢失连接时的视频稍微不堆积

This commit is contained in:
Mock
2026-04-10 11:49:38 +08:00
parent f443934ee4
commit 40cd68db3d
8 changed files with 93 additions and 6 deletions

View File

@@ -113,11 +113,17 @@ static int kcp_hub_peer_is_telemetry(const char *peer_id) {
return kcp_hub_peer_id_has_suffix(peer_id, "-telemetry");
}
static int kcp_hub_peer_is_video_receiver(const char *peer_id) {
return peer_id != NULL && strcmp(peer_id, "peer-a-video") == 0;
}
static int kcp_hub_peer_uses_server_lease(const char *peer_id) {
if (peer_id == NULL || peer_id[0] == '\0') {
return 0;
}
return kcp_hub_peer_id_has_suffix(peer_id, "-ctrl") || kcp_hub_peer_is_telemetry(peer_id);
return kcp_hub_peer_id_has_suffix(peer_id, "-ctrl")
|| kcp_hub_peer_is_telemetry(peer_id)
|| kcp_hub_peer_is_video_receiver(peer_id);
}
static const char *kcp_hub_peer_node_id(const char *peer_id) {

View File

@@ -566,6 +566,32 @@ static int video_sender_init(video_sender_t *sender, const video_pipeline_config
return 0;
}
static int video_sender_drain_pending_messages(video_sender_t *sender) {
if (sender == NULL || sender->client == NULL) {
errno = EINVAL;
return -1;
}
for (;;) {
message_t msg;
int rc;
protocol_message_init(&msg);
rc = kcp_client_receive_timed(sender->client, &msg, 1);
if (rc == 1) {
protocol_message_clear(&msg);
return 0;
}
if (rc != 0) {
protocol_message_clear(&msg);
return -1;
}
// Drain unread server errors so an offline receiver cannot back up the reverse KCP stream.
protocol_message_clear(&msg);
}
}
static int video_sender_send_packet(video_sender_t *sender, const AVPacket *encoded_pkt, uint64_t timestamp) {
uint8_t *payload;
size_t payload_len;
@@ -585,6 +611,10 @@ static int video_sender_send_packet(video_sender_t *sender, const AVPacket *enco
memcpy(payload, encoded_pkt->data, (size_t) encoded_pkt->size);
memcpy(payload + encoded_pkt->size, &timestamp, sizeof(timestamp));
rc = kcp_client_send_binary(sender->client, sender->target_peer, payload, payload_len);
if (rc != 0) {
return rc;
}
rc = video_sender_drain_pending_messages(sender);
return rc;
}

View File

@@ -566,6 +566,32 @@ static int video_sender_init(video_sender_t *sender, const video_pipeline_config
return 0;
}
static int video_sender_drain_pending_messages(video_sender_t *sender) {
if (sender == NULL || sender->client == NULL) {
errno = EINVAL;
return -1;
}
for (;;) {
message_t msg;
int rc;
protocol_message_init(&msg);
rc = kcp_client_receive_timed(sender->client, &msg, 1);
if (rc == 1) {
protocol_message_clear(&msg);
return 0;
}
if (rc != 0) {
protocol_message_clear(&msg);
return -1;
}
// Drain unread server errors so an offline receiver cannot back up the reverse KCP stream.
protocol_message_clear(&msg);
}
}
static int video_sender_send_packet(video_sender_t *sender, const AVPacket *encoded_pkt, uint64_t timestamp) {
uint8_t *payload;
size_t payload_len;
@@ -585,6 +611,10 @@ static int video_sender_send_packet(video_sender_t *sender, const AVPacket *enco
memcpy(payload, encoded_pkt->data, (size_t) encoded_pkt->size);
memcpy(payload + encoded_pkt->size, &timestamp, sizeof(timestamp));
rc = kcp_client_send_binary(sender->client, sender->target_peer, payload, payload_len);
if (rc != 0) {
return rc;
}
rc = video_sender_drain_pending_messages(sender);
return rc;
}