VLC_COMMON_MEMBERS
int64_t i_remain;
+ vlc_bool_t b_handle_keep_alive;
demux_sys_t *p_sys;
};
msg_Err( p_demux, "PLAY or PAUSE failed %s", p_sys->env->getResultMsg() );
return VLC_EGENERIC;
}
+
+ /* When we Pause, we'll need the TimeoutPrevention thread to
+ * handle sending the "Keep Alive" message to the server.
+ * Unfortunately Live555 isn't thread safe and so can't
+ * do this normally while the main Demux thread is handling
+ * a live stream. We end up with the Timeout thread blocking
+ * waiting for a response from the server. So when we PAUSE
+ * we set a flag that the TimeoutPrevention function will check
+ * and if it's set, it will trigger the GET_PARAMETER message */
+ if( b_bool && p_sys->p_timeout != NULL )
+ p_sys->p_timeout->b_handle_keep_alive = VLC_TRUE;
+ else if( !b_bool && p_sys->p_timeout != NULL )
+ p_sys->p_timeout->b_handle_keep_alive = VLC_FALSE;
+
es_out_Control( p_demux->out, ES_OUT_RESET_PCR );
p_sys->i_pcr = 0;
#if (LIVEMEDIA_LIBRARY_VERSION_INT >= 1195257600)
{
if( p_timeout->i_remain <= 0 )
{
+ char *psz_bye = NULL;
p_timeout->i_remain = (int64_t)p_timeout->p_sys->i_timeout -2;
p_timeout->i_remain *= 1000000;
- p_timeout->p_sys->b_timeout_call = VLC_TRUE;
msg_Dbg( p_timeout, "reset the timeout timer" );
+ if( p_timeout->b_handle_keep_alive == VLC_TRUE )
+ {
+#if LIVEMEDIA_LIBRARY_VERSION_INT >= 1138089600
+ p_timeout->p_sys->rtsp->getMediaSessionParameter( *p_timeout->p_sys->ms, NULL, psz_bye );
+#endif
+ p_timeout->p_sys->b_timeout_call = VLC_FALSE;
+ }
+ else
+ {
+ p_timeout->p_sys->b_timeout_call = VLC_TRUE;
+ }
}
p_timeout->i_remain -= 200000;
msleep( 200000 ); /* 200 ms */