@@ -2530,16 +2530,24 @@ int main() {
25302530 encode_publish_namespace_ok_message (DraftVersion::kDraft16 , 0 ));
25312531 dash_live_transport.reads [0 ].push_back (
25322532 encode_subscribe_message (
2533- 1 , kTestTrackNamespace , " video0_vide_1" , 0 , DraftVersion::kDraft16 ));
2533+ 1 , kTestTrackNamespace , " catalog" , 0 , DraftVersion::kDraft16 ));
2534+ dash_live_transport.reads [0 ].push_back ({});
2535+ dash_live_transport.reads [0 ].push_back (
2536+ encode_subscribe_message (
2537+ 3 , kTestTrackNamespace , " video0_vide_1" , 0 , DraftVersion::kDraft16 ));
25342538 // Keep the mock control stream open while each queued source object is considered.
25352539 for (int i = 0 ; i < 4 ; ++i) {
25362540 dash_live_transport.reads [0 ].push_back ({});
25372541 }
25382542
2539- bool subscribe_read = false ;
2543+ bool catalog_subscribe_read = false ;
2544+ bool media_subscribe_read = false ;
25402545 dash_live_transport.on_read = [&](MockTransport& transport, std::uint64_t stream_id) {
25412546 if (stream_id == 0 && transport.read_count >= 3 ) {
2542- subscribe_read = true ;
2547+ catalog_subscribe_read = true ;
2548+ }
2549+ if (stream_id == 0 && transport.read_count >= 5 ) {
2550+ media_subscribe_read = true ;
25432551 }
25442552 };
25452553
@@ -2551,6 +2559,7 @@ int main() {
25512559 };
25522560 std::size_t object_index = 0 ;
25532561 bool consumed_before_subscribe = false ;
2562+ bool media_consumed_before_media_subscribe = false ;
25542563 LiveObjectSource source{
25552564 .tracks = {
25562565 LiveTrack{.track_name = " catalog" },
@@ -2559,7 +2568,9 @@ int main() {
25592568 LiveTrack{.track_name = " video2_vide_3" },
25602569 },
25612570 .next_object = [&]() -> std::optional<LiveObject> {
2562- consumed_before_subscribe = consumed_before_subscribe || !subscribe_read;
2571+ consumed_before_subscribe = consumed_before_subscribe || !catalog_subscribe_read;
2572+ media_consumed_before_media_subscribe =
2573+ media_consumed_before_media_subscribe || (object_index > 0 && !media_subscribe_read);
25632574 if (object_index >= objects.size ()) {
25642575 return std::nullopt ;
25652576 }
@@ -2578,11 +2589,13 @@ int main() {
25782589 ok &= expect (status.ok , " expected FFmpeg-style DASH session connect to succeed" );
25792590 status = dash_live_session.publish_live_objects (source, DraftVersion::kDraft16 );
25802591 ok &= expect (status.ok , " expected FFmpeg-style DASH publish to enter await-subscribe mode" );
2581- ok &= expect (subscribe_read && !consumed_before_subscribe,
2592+ ok &= expect (catalog_subscribe_read && media_subscribe_read && !consumed_before_subscribe,
25822593 " expected FFmpeg-style DASH media consumption to wait for SUBSCRIBE" );
2594+ ok &= expect (!media_consumed_before_media_subscribe,
2595+ " expected catalog-first subscription to preserve queued media until media SUBSCRIBE" );
25832596 ok &= expect (control_message_count (dash_live_transport, 0x1d ) == 4 ,
25842597 " expected catalog plus three FFmpeg-style DASH tracks to be published" );
2585- ok &= expect (control_message_count (dash_live_transport, 0x04 ) == 1 ,
2598+ ok &= expect (control_message_count (dash_live_transport, 0x04 ) == 2 ,
25862599 " expected FFmpeg-style DASH subscriber to receive SUBSCRIBE_OK" );
25872600 ok &= expect (dash_live_session.publish_stats ().objects_published == 2 ,
25882601 " expected catalog and subscribed FFmpeg-style DASH representation only" );
0 commit comments