Skip to content

Commit d759426

Browse files
committed
Fix draft 18 request stream polling
1 parent 1f222b0 commit d759426

1 file changed

Lines changed: 11 additions & 4 deletions

File tree

src/transport/moqt_session.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3575,6 +3575,7 @@ TransportStatus MoqtSession::publish_live(std::istream& input,
35753575
} else {
35763576
// Await-subscribe mode: wait for subscriptions, then stream
35773577
bool fin = false;
3578+
const auto await_subscribe_deadline = std::chrono::steady_clock::now() + subscriber_timeout_;
35783579

35793580
while (true) {
35803581
bool is_eof;
@@ -3612,9 +3613,13 @@ TransportStatus MoqtSession::publish_live(std::istream& input,
36123613
// Read control messages
36133614
std::vector<std::uint8_t> chunk;
36143615
bool immediate_fin = false;
3615-
const auto read_timeout = (active_subscriptions.empty() && subscribed_tracks.empty())
3616-
? subscriber_timeout_
3617-
: std::chrono::milliseconds(0);
3616+
const bool waiting_for_first_subscription =
3617+
active_subscriptions.empty() && subscribed_tracks.empty();
3618+
const auto read_timeout =
3619+
waiting_for_first_subscription && !uses_request_streams(draft_version)
3620+
? subscriber_timeout_
3621+
: (waiting_for_first_subscription ? std::chrono::milliseconds(25)
3622+
: std::chrono::milliseconds(0));
36183623
const TransportStatus read_status =
36193624
transport_.read_stream(live_control_read_stream_id, chunk, immediate_fin, read_timeout);
36203625

@@ -3623,7 +3628,9 @@ TransportStatus MoqtSession::publish_live(std::istream& input,
36233628
fin = immediate_fin;
36243629
} else if (read_status.message == "timed out waiting for stream data" ||
36253630
read_status.message == "no queued read for stream") {
3626-
if (active_subscriptions.empty() && subscribed_tracks.empty()) {
3631+
if (waiting_for_first_subscription &&
3632+
(!uses_request_streams(draft_version) ||
3633+
std::chrono::steady_clock::now() >= await_subscribe_deadline)) {
36273634
std::cerr << "[moqt-session] live: no downstream SUBSCRIBE before timeout; "
36283635
"idle await-subscribe publish exiting"
36293636
<< " namespace=" << track_namespace_

0 commit comments

Comments
 (0)