diff options
-rw-r--r-- | src/modules/raop/module-raop-sink.c | 8 | ||||
-rw-r--r-- | src/modules/raop/raop_client.c | 26 | ||||
-rw-r--r-- | src/modules/raop/raop_client.h | 1 |
3 files changed, 30 insertions, 5 deletions
diff --git a/src/modules/raop/module-raop-sink.c b/src/modules/raop/module-raop-sink.c index a8a466d8..e251f2fc 100644 --- a/src/modules/raop/module-raop-sink.c +++ b/src/modules/raop/module-raop-sink.c @@ -332,10 +332,14 @@ static int udp_sink_process_msg(pa_msgobject *o, int code, void *data, int64_t o pa_smoother_resume(u->smoother, pa_rtclock_now(), true); - if (!pa_raop_client_udp_can_stream(u->raop)) { - /* Connecting will trigger a RECORD */ + if (!pa_raop_client_udp_is_alive(u->raop)) { + /* Connecting will trigger a RECORD and start steaming */ pa_raop_client_connect(u->raop); + } else if (!pa_raop_client_udp_can_stream(u->raop)) { + /* RECORD alredy sent, simply start streaming */ + pa_raop_client_udp_stream(u->raop); } + udp_start_wakeup_clock(u); break; diff --git a/src/modules/raop/raop_client.c b/src/modules/raop/raop_client.c index d17cc44a..16a59cca 100644 --- a/src/modules/raop/raop_client.c +++ b/src/modules/raop/raop_client.c @@ -952,8 +952,6 @@ static void udp_rtsp_cb(pa_rtsp_client *rtsp, pa_rtsp_state state, pa_headerlist pa_log_debug("RAOP: RECORD"); - c->is_recording = true; - alt = pa_xstrdup(pa_headerlist_gets(headers, "Audio-Latency")); /* Generate a random synchronization source identifier from this session. */ pa_random(&rand, sizeof(rand)); @@ -965,6 +963,8 @@ static void udp_rtsp_cb(pa_rtsp_client *rtsp, pa_rtsp_state state, pa_headerlist c->udp_first_packet = true; c->udp_sync_count = 0; + c->is_recording = true; + c->udp_record_callback(c->udp_setup_userdata); pa_xfree(alt); @@ -1168,11 +1168,12 @@ int pa_raop_client_connect(pa_raop_client *c) { int pa_raop_client_flush(pa_raop_client *c) { int rv = 0; + pa_assert(c); if (c->rtsp != NULL) { rv = pa_rtsp_flush(c->rtsp, c->seq, c->rtptime); - c->udp_sync_count = -1; + c->udp_sync_count = 0; } return rv; @@ -1211,6 +1212,25 @@ int pa_raop_client_udp_can_stream(pa_raop_client *c) { return rv; } +int pa_raop_client_udp_stream(pa_raop_client *c) { + int rv = 0; + + pa_assert(c); + + if (c->rtsp != NULL && c->udp_stream_fd > 0) { + if (!c->is_recording) { + c->udp_first_packet = true; + c->udp_sync_count = 0; + + c->is_recording = true; + } + + rv = 1; + } + + return rv; +} + int pa_raop_client_udp_handle_timing_packet(pa_raop_client *c, const uint8_t packet[], ssize_t size) { const uint32_t * data = NULL; uint8_t payload = 0; diff --git a/src/modules/raop/raop_client.h b/src/modules/raop/raop_client.h index 6ab6d325..d49c1462 100644 --- a/src/modules/raop/raop_client.h +++ b/src/modules/raop/raop_client.h @@ -43,6 +43,7 @@ int pa_raop_client_teardown(pa_raop_client *c); int pa_raop_client_udp_is_alive(pa_raop_client *c); int pa_raop_client_udp_can_stream(pa_raop_client *c); +int pa_raop_client_udp_stream(pa_raop_client *c); void pa_raop_client_set_encryption(pa_raop_client *c, int encryption); pa_volume_t pa_raop_client_adjust_volume(pa_raop_client *c, pa_volume_t volume); |