diff --git a/tests/test_stream_service.c b/tests/test_stream_service.c index 062c1a93e..9481585d2 100644 --- a/tests/test_stream_service.c +++ b/tests/test_stream_service.c @@ -2125,6 +2125,20 @@ static void test_viewer_radio_mute(void) { CHECK(!radio_member_silenced(nodes[1], GROUP1, source)); CHECK(stream_media_open(nodes[1], GROUP1, source, epoch, STREAM_MEDIA_TRACK_VIDEO, &first) == STREAM_OK); CHECK(stream_media_open(nodes[1], GROUP1, source, epoch, STREAM_MEDIA_TRACK_VIDEO | STREAM_MEDIA_TRACK_AUDIO, &second) == STREAM_OK); + uint8_t video[8] = {0}, audio[1] = {1}, wire[512]; size_t length = 0; + struct stream_media_block media = {.format = {64, 64, 0, STREAM_MEDIA_H264, STREAM_MEDIA_OPUS_STEREO, 1}, + .video_count = 1, .audio_count = 1}; + media.video[0] = (struct stream_media_video){1, 0, sizeof(video), 0, sizeof(video), STREAM_MEDIA_KEY, video}; + media.audio[0] = (struct stream_media_audio){0, sizeof(audio), 960, audio}; + CHECK(stream_media_encode(&media, wire, sizeof(wire), &length) == STREAM_OK); + CHECK(stream_publish_block(publisher, wire, length) == STREAM_OK); + struct stream_media_status status; + uint64_t media_deadline = get_time_tb() + 100000; + do { + CHECK(get_time_tb() < media_deadline); test_clock_poll(ua, 100); + CHECK(stream_media_get_status(second, &status) == STREAM_OK); + } while (!status.initialized); + CHECK(status.audio_enabled); CHECK(radio_member_silenced(nodes[1], GROUP1, source) && !radio_member_muted(nodes[1], GROUP1, source)); CHECK(!radio_member_silenced(nodes[1], GROUP2, source)); CHECK(!radio_member_silenced(nodes[1], GROUP1, nodes[2]->node_id)); @@ -2132,10 +2146,20 @@ static void test_viewer_radio_mute(void) { CHECK(radio_member_silenced(nodes[1], GROUP1, source)); CHECK(radio_set_member_muted(nodes[1], GROUP1, source, 1) == 0); CHECK(stream_publish_set_audio_enabled(publisher, 0) == STREAM_OK); wait_source_audio(epoch, 0); + media.audio_count = 0; media.video[0].frame_id = 2; media.video[0].pts_us = 40000; + CHECK(stream_media_encode(&media, wire, sizeof(wire), &length) == STREAM_OK); + CHECK(stream_publish_block(publisher, wire, length) == STREAM_OK); + media_deadline = get_time_tb() + 100000; + do { + CHECK(get_time_tb() < media_deadline); test_clock_poll(ua, 100); + CHECK(stream_media_get_status(second, &status) == STREAM_OK); + } while (status.video_us != 40000); + CHECK(!status.audio_enabled && status.ready_us == 40000 && status.audio_us == 20000); CHECK(!stream_radio_muted(nodes[1], GROUP1, source) && radio_member_silenced(nodes[1], GROUP1, source)); CHECK(radio_set_member_muted(nodes[1], GROUP1, source, 0) == 0); CHECK(!radio_member_silenced(nodes[1], GROUP1, source)); CHECK(stream_publish_set_audio_enabled(publisher, 1) == STREAM_OK); wait_source_audio(epoch, 1); + CHECK(stream_media_get_status(second, &status) == STREAM_OK && status.audio_enabled); CHECK(radio_member_silenced(nodes[1], GROUP1, source)); stream_close(second); second = NULL; CHECK(!radio_member_silenced(nodes[1], GROUP1, source));