关于Freeswitch 视频采用proxy_media 时, 错误设置payload type 为0的解决
2012-12-29 13:57
423 查看
在Freeswitch中将测试视频时, 将媒体配置为proxy media模式时, 发现Freeswitch 将视频媒体流的payload type 改成0. 导致终端认为不对.
经过几个小时的研究,发现是Freeswitch 中因为对视频流 proxy media时, 不通过negotiate ,所以它的rtp session设置的payload为0
而在switch_rtp. c 的函数
SWITCH_DECLARE(int) switch_rtp_write_frame(switch_rtp_t *rtp_session, switch_frame_t *frame) 中
if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) {
if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VIDEO) ) {
send_msg->header.pt = rtp_session->payload; // 这里直接用rtp_sesion->payload 设置发送payload, 而proxy_media时session的payload没有设置.导致为0
}
send_msg->header.ssrc = htonl(rtp_session->ssrc);
}
修改为:
if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) {
if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VIDEO)&& rtp_session->payload > 0) {
send_msg->header.pt = rtp_session->payload;
}
send_msg->header.ssrc = htonl(rtp_session->ssrc);
}
就ok了.
测试时, 我采用的是稳定版 FreeSWITCH version: 1.2.0-rc2+git~20120807T222301Z~d806014009 (1.2.0-rc2; git at commit d806014009 on Tue, 07 Aug 2012 22:23:01 Z)
后来下载最新的开发版本,发现这个bug已经修复了.
经过几个小时的研究,发现是Freeswitch 中因为对视频流 proxy media时, 不通过negotiate ,所以它的rtp session设置的payload为0
而在switch_rtp. c 的函数
SWITCH_DECLARE(int) switch_rtp_write_frame(switch_rtp_t *rtp_session, switch_frame_t *frame) 中
if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) {
if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VIDEO) ) {
send_msg->header.pt = rtp_session->payload; // 这里直接用rtp_sesion->payload 设置发送payload, 而proxy_media时session的payload没有设置.导致为0
}
send_msg->header.ssrc = htonl(rtp_session->ssrc);
}
修改为:
if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) {
if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VIDEO)&& rtp_session->payload > 0) {
send_msg->header.pt = rtp_session->payload;
}
send_msg->header.ssrc = htonl(rtp_session->ssrc);
}
就ok了.
测试时, 我采用的是稳定版 FreeSWITCH version: 1.2.0-rc2+git~20120807T222301Z~d806014009 (1.2.0-rc2; git at commit d806014009 on Tue, 07 Aug 2012 22:23:01 Z)
后来下载最新的开发版本,发现这个bug已经修复了.
相关文章推荐
- 关于APUE第十六章的客户端程序返回Servname not supported for ai_socktype错误的解决方法
- 关于NGINX下开启PHP-FPM 输出PHP错误日志的设置(已解决)
- 关于SpringMVC的HttpMediaTypeNotSupportedException异常解决
- 关于Jquery错误的解决:Uncaught TypeError: $.post is not a function
- 关于vc6.0中常见的因为工程设置project setting设置不对而造成连接错误的一些情况和解决方法(转)
- error: undefined reference to 'typeinfo for android::MediaSource' 错误解决
- 【Grails 代理Proxy设置】部署Grails遇到Error Resolve error obtaining dependencies:错误,及解决方法
- Swift中推送通知设置:Binary operator '|' cannot be applied to two UIUserNotificationType operands 错误解决
- 关于“错误:找不到或无法加载主类”的错误的解决办法(环境变量确信自己已经设置好了的人可以参考一下这个)
- 设置了Media.EXTERNAL_CONTENT_URI却找不到音频/视频的解决方法
- 【解决】关于蓝牙模块串口设置总是错误的问题
- 关于设置 存储 内部存储空间只显示图片不显示视频的解决方法
- 关于SpringMVC设置注解注入出现Servlet.init() for servlet springMVC threw exception 错误解决方式
- 关于swift中出现 use of undeclared type ***错误的一种解决方法
- 关于spring4和hibernate4整合,配置事务报“Cannot unwrap to requested type [javax.sql.DataSource]”错误的解决方法及心得
- 关于解决No service of type Factory available in ProjectScopeServices的错误
- 关于APUE第十六章的客户端程序返回Servname not supported for ai_socktype错误的解决方法
- Window7设置ARP表出现Access Denied错误的解决方法
- 关于Android中“OnClickLinstener cannot be resolved to a type”的错误
- windows7下系统保护中出现错误“文件名、目录名或卷标语法不正确。(0x8007007B)“ 以及保护设置列表中出现“Windows7_os(c:)(找不到)”选项时的解决方法