提交 c358f67f authored 作者: Anthony Minessale's avatar Anthony Minessale

eat inbound vid while playing fsv files

上级 362c5716
...@@ -995,7 +995,9 @@ SWITCH_DECLARE(void) switch_core_thread_session_end(_In_ switch_core_session_t * ...@@ -995,7 +995,9 @@ SWITCH_DECLARE(void) switch_core_thread_session_end(_In_ switch_core_session_t *
\brief Launch a service thread on a session to drop inbound data \brief Launch a service thread on a session to drop inbound data
\param session the session the launch thread on \param session the session the launch thread on
*/ */
SWITCH_DECLARE(void) switch_core_service_session(_In_ switch_core_session_t *session); SWITCH_DECLARE(void) switch_core_service_session_av(_In_ switch_core_session_t *session, switch_bool_t audio, switch_bool_t video);
#define switch_core_service_session(_s) switch_core_service_session_av(_s, SWITCH_TRUE, SWITCH_FALSE)
/*! /*!
\brief Request an outgoing session spawned from an existing session using a desired endpoing module \brief Request an outgoing session spawned from an existing session using a desired endpoing module
......
...@@ -1206,6 +1206,8 @@ typedef enum { ...@@ -1206,6 +1206,8 @@ typedef enum {
CF_INTERCEPT, CF_INTERCEPT,
CF_INTERCEPTED, CF_INTERCEPTED,
CF_VIDEO_REFRESH_REQ, CF_VIDEO_REFRESH_REQ,
CF_SERVICE_AUDIO,
CF_SERVICE_VIDEO,
/* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */ /* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
/* IF YOU ADD NEW ONES CHECK IF THEY SHOULD PERSIST OR ZERO THEM IN switch_core_session.c switch_core_session_request_xml() */ /* IF YOU ADD NEW ONES CHECK IF THEY SHOULD PERSIST OR ZERO THEM IN switch_core_session.c switch_core_session_request_xml() */
CF_FLAG_MAX CF_FLAG_MAX
......
...@@ -370,6 +370,8 @@ SWITCH_STANDARD_APP(play_fsv_function) ...@@ -370,6 +370,8 @@ SWITCH_STANDARD_APP(play_fsv_function)
} }
switch_core_session_set_read_codec(session, &codec); switch_core_session_set_read_codec(session, &codec);
switch_core_service_session_av(session, SWITCH_FALSE, SWITCH_TRUE);
while (switch_channel_ready(channel)) { while (switch_channel_ready(channel)) {
if (read(fd, &bytes, sizeof(bytes)) != sizeof(bytes)) { if (read(fd, &bytes, sizeof(bytes)) != sizeof(bytes)) {
...@@ -440,6 +442,8 @@ SWITCH_STANDARD_APP(play_fsv_function) ...@@ -440,6 +442,8 @@ SWITCH_STANDARD_APP(play_fsv_function)
} }
switch_core_thread_session_end(session);
switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE, "OK"); switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE, "OK");
end: end:
......
...@@ -397,6 +397,8 @@ static void *SWITCH_THREAD_FUNC switch_core_service_thread(switch_thread_t *thre ...@@ -397,6 +397,8 @@ static void *SWITCH_THREAD_FUNC switch_core_service_thread(switch_thread_t *thre
switch_channel_set_flag(channel, CF_SERVICE); switch_channel_set_flag(channel, CF_SERVICE);
while (switch_channel_test_flag(channel, CF_SERVICE)) { while (switch_channel_test_flag(channel, CF_SERVICE)) {
if (switch_channel_test_flag(channel, CF_SERVICE_AUDIO)) {
switch (switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0)) { switch (switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0)) {
case SWITCH_STATUS_SUCCESS: case SWITCH_STATUS_SUCCESS:
case SWITCH_STATUS_TIMEOUT: case SWITCH_STATUS_TIMEOUT:
...@@ -404,12 +406,28 @@ static void *SWITCH_THREAD_FUNC switch_core_service_thread(switch_thread_t *thre ...@@ -404,12 +406,28 @@ static void *SWITCH_THREAD_FUNC switch_core_service_thread(switch_thread_t *thre
break; break;
default: default:
switch_channel_clear_flag(channel, CF_SERVICE); switch_channel_clear_flag(channel, CF_SERVICE);
continue; break;
}
}
if (switch_channel_test_flag(channel, CF_SERVICE_VIDEO) && switch_channel_test_flag(channel, CF_VIDEO)) {
switch (switch_core_session_read_video_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0)) {
case SWITCH_STATUS_SUCCESS:
case SWITCH_STATUS_TIMEOUT:
case SWITCH_STATUS_BREAK:
break;
default:
switch_channel_clear_flag(channel, CF_SERVICE);
break;
}
} }
} }
switch_mutex_unlock(session->frame_read_mutex); switch_mutex_unlock(session->frame_read_mutex);
switch_channel_clear_flag(channel, CF_SERVICE_AUDIO);
switch_channel_clear_flag(channel, CF_SERVICE_VIDEO);
switch_core_session_rwunlock(session); switch_core_session_rwunlock(session);
return NULL; return NULL;
...@@ -425,9 +443,14 @@ SWITCH_DECLARE(void) switch_core_thread_session_end(switch_core_session_t *sessi ...@@ -425,9 +443,14 @@ SWITCH_DECLARE(void) switch_core_thread_session_end(switch_core_session_t *sessi
switch_assert(channel); switch_assert(channel);
switch_channel_clear_flag(channel, CF_SERVICE); switch_channel_clear_flag(channel, CF_SERVICE);
switch_channel_clear_flag(channel, CF_SERVICE_AUDIO);
switch_channel_clear_flag(channel, CF_SERVICE_VIDEO);
switch_core_session_kill_channel(session, SWITCH_SIG_BREAK);
} }
SWITCH_DECLARE(void) switch_core_service_session(switch_core_session_t *session) SWITCH_DECLARE(void) switch_core_service_session_av(switch_core_session_t *session, switch_bool_t audio, switch_bool_t video)
{ {
switch_channel_t *channel; switch_channel_t *channel;
switch_assert(session); switch_assert(session);
...@@ -435,6 +458,9 @@ SWITCH_DECLARE(void) switch_core_service_session(switch_core_session_t *session) ...@@ -435,6 +458,9 @@ SWITCH_DECLARE(void) switch_core_service_session(switch_core_session_t *session)
channel = switch_core_session_get_channel(session); channel = switch_core_session_get_channel(session);
switch_assert(channel); switch_assert(channel);
if (audio) switch_channel_set_flag(channel, CF_SERVICE_AUDIO);
if (video) switch_channel_set_flag(channel, CF_SERVICE_VIDEO);
switch_core_session_launch_thread(session, (void *(*)(switch_thread_t *,void *))switch_core_service_thread, session); switch_core_session_launch_thread(session, (void *(*)(switch_thread_t *,void *))switch_core_service_thread, session);
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论