[Freeswitch-dev] two rtp questions - rtp debug and non block rtp read
Hi, 1) when use switch_rtp without a session SWITCH_RTP_FLAG_DEBUG_RTP_READ complaining no session attached because it use SWITCH_CHANNEL_SESSION_LOG. Suggested fix: use SWITCH_CHANNEL_SESSION_LOG where possible and SWITCH_CHANNEL_LOG when no session. also, I think the following code is wrong because there's no rtp_session->session: if (!rtp_session->session) { rtp_session->flags[SWITCH_RTP_FLAG_DEBUG_RTP_READ] = 0; switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_CRIT, "RTP HAS NO SESSION!\n"); } else { ... I can fix and push if confirmed. 2) switch_rtp_zerocopy_read_frame() blocks forever if no RTP comes. Anyway to make it non block? I tried the following code it blocks even with SWITCH_IO_FLAG_NOBLOCK. I tried the following code in mod_skel, I can make a diff if necessary. rtp_flag[SWITCH_RTP_FLAG_IO] = 1; rtp_flag[SWITCH_RTP_FLAG_AUTOADJ] = 1; rtp_flag[SWITCH_RTP_FLAG_DATAWAIT] = 0; rtp_flag[SWITCH_RTP_FLAG_VIDEO] = 1; rtp_flag[SWITCH_RTP_FLAG_NOBLOCK] = 1; rtp_flag[SWITCH_RTP_FLAG_AUTO_CNG] = 1; // rtp_flag[SWITCH_RTP_FLAG_DEBUG_RTP_READ] = 1; // rtp_flag[SWITCH_RTP_FLAG_DEBUG_RTP_WRITE] = 1; rtp_session = switch_rtp_new(IP, //local 50002, //recv port IP, 42000, //remote, doesn't matter for us, but can't be 0 96, // payload_type 1, 90000, rtp_flag, NULL, &err, pool); if (!rtp_session) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "RTP Error: %s\n", err); goto done; } while(!done) { // status = switch_rtp_zerocopy_read_frame(rtp_session, &read_frame, SWITCH_IO_FLAG_NOBLOCK); status = switch_rtp_zerocopy_read_frame(rtp_session, &read_frame, SWITCH_IO_FLAG_NONE); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "read %d\n", read_frame.packetlen); switch_yield(100000); } Thanks for help. -- Seven Du http://www.freeswitch.org.cn http://about.me/dujinfang http://www.dujinfang.com Sent with Sparrow (http://www.sparrowmailapp.com/?sig)
For question 1, you can use SWITCH_CHANNEL_SESSION_LOG if you have a NULL session pointer. Chris On Aug 4, 2013, at 8:54 PM, Seven Du <dujinfang@gmail.com> wrote:
Hi,
1) when use switch_rtp without a session SWITCH_RTP_FLAG_DEBUG_RTP_READ complaining no session attached because it use SWITCH_CHANNEL_SESSION_LOG.
Suggested fix:
use SWITCH_CHANNEL_SESSION_LOG where possible and SWITCH_CHANNEL_LOG when no session.
also, I think the following code is wrong because there's no rtp_session->session:
if (!rtp_session->session) { rtp_session->flags[SWITCH_RTP_FLAG_DEBUG_RTP_READ] = 0; switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_CRIT, "RTP HAS NO SESSION!\n"); } else { ...
I can fix and push if confirmed.
2) switch_rtp_zerocopy_read_frame() blocks forever if no RTP comes. Anyway to make it non block? I tried the following code it blocks even with SWITCH_IO_FLAG_NOBLOCK.
I tried the following code in mod_skel, I can make a diff if necessary.
rtp_flag[SWITCH_RTP_FLAG_IO] = 1; rtp_flag[SWITCH_RTP_FLAG_AUTOADJ] = 1; rtp_flag[SWITCH_RTP_FLAG_DATAWAIT] = 0; rtp_flag[SWITCH_RTP_FLAG_VIDEO] = 1; rtp_flag[SWITCH_RTP_FLAG_NOBLOCK] = 1; rtp_flag[SWITCH_RTP_FLAG_AUTO_CNG] = 1; // rtp_flag[SWITCH_RTP_FLAG_DEBUG_RTP_READ] = 1; // rtp_flag[SWITCH_RTP_FLAG_DEBUG_RTP_WRITE] = 1;
rtp_session = switch_rtp_new(IP, //local 50002, //recv port IP, 42000, //remote, doesn't matter for us, but can't be 0 96, // payload_type 1, 90000, rtp_flag, NULL, &err, pool);
if (!rtp_session) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "RTP Error: %s\n", err); goto done; }
while(!done) { // status = switch_rtp_zerocopy_read_frame(rtp_session, &read_frame, SWITCH_IO_FLAG_NOBLOCK); status = switch_rtp_zerocopy_read_frame(rtp_session, &read_frame, SWITCH_IO_FLAG_NONE); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "read %d\n", read_frame.packetlen); switch_yield(100000); }
Thanks for help.
-- Seven Du http://www.freeswitch.org.cn http://about.me/dujinfang http://www.dujinfang.com
Sent with Sparrow
_________________________________________________________________________ Professional FreeSWITCH Consulting Services: consulting@freeswitch.org http://www.freeswitchsolutions.com
FreeSWITCH-powered IP PBX: The CudaTel Communication Server http://www.cudatel.com
Official FreeSWITCH Sites http://www.freeswitch.org http://wiki.freeswitch.org http://www.cluecon.com
FreeSWITCH-dev mailing list FreeSWITCH-dev@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev http://www.freeswitch.org
participants (2)
-
cmrienzo@gmail.com
-
Seven Du