Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
6b2c9e44
提交
6b2c9e44
authored
10月 24, 2013
作者:
Anthony Minessale
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
change codec negotiation for edge opus cases
上级
e659814a
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
34 行增加
和
1 行删除
+34
-1
switch_core_media.c
src/switch_core_media.c
+34
-1
没有找到文件。
src/switch_core_media.c
浏览文件 @
6b2c9e44
...
@@ -73,6 +73,7 @@ typedef struct codec_params_s {
...
@@ -73,6 +73,7 @@ typedef struct codec_params_s {
char *iananame;
char *iananame;
switch_payload_t pt;
switch_payload_t pt;
unsigned long rm_rate;
unsigned long rm_rate;
unsigned long adv_rm_rate;
uint32_t codec_ms;
uint32_t codec_ms;
uint32_t bitrate;
uint32_t bitrate;
...
@@ -1436,6 +1437,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_read_frame(switch_core_session
...
@@ -1436,6 +1437,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_read_frame(switch_core_session
engine->codec_params.rm_encoding = switch_core_session_strdup(smh->session, imp->iananame);
engine->codec_params.rm_encoding = switch_core_session_strdup(smh->session, imp->iananame);
engine->codec_params.rm_fmtp = NULL;
engine->codec_params.rm_fmtp = NULL;
engine->codec_params.rm_rate = imp->samples_per_second;
engine->codec_params.rm_rate = imp->samples_per_second;
engine->codec_params.adv_rm_rate = imp->samples_per_second;
if (strcasecmp(imp->iananame, "g722")) {
engine->codec_params.rm_rate = imp->actual_samples_per_second;
}
engine->codec_params.codec_ms = imp->microseconds_per_packet / 1000;
engine->codec_params.codec_ms = imp->microseconds_per_packet / 1000;
engine->codec_params.bitrate = imp->bits_per_second;
engine->codec_params.bitrate = imp->bits_per_second;
engine->codec_params.channels = 1;
engine->codec_params.channels = 1;
...
@@ -2983,6 +2988,8 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
...
@@ -2983,6 +2988,8 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
const switch_codec_implementation_t *imp = codec_array[i];
const switch_codec_implementation_t *imp = codec_array[i];
uint32_t bit_rate = imp->bits_per_second;
uint32_t bit_rate = imp->bits_per_second;
uint32_t codec_rate = imp->samples_per_second;
uint32_t codec_rate = imp->samples_per_second;
char *samp = NULL;
if (imp->codec_type != SWITCH_CODEC_TYPE_AUDIO) {
if (imp->codec_type != SWITCH_CODEC_TYPE_AUDIO) {
continue;
continue;
}
}
...
@@ -3009,6 +3016,21 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
...
@@ -3009,6 +3016,21 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
match = 0;
match = 0;
}
}
if (!zstr(map->rm_fmtp)) {
samp = strstr(map->rm_fmtp, "samplerate=");
}
if (!strcasecmp(map->rm_encoding, "opus") && !strcasecmp(rm_encoding, imp->iananame) && samp) {
char *rate_str = samp + 11;
if (rate_str && *rate_str) {
near_rate = atoi(rate_str);
near_match = imp;
near_map = mmap = map;
match = 0;
goto near_match;
}
}
if (match) {
if (match) {
if (scrooge) {
if (scrooge) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG,
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG,
...
@@ -3087,6 +3109,10 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
...
@@ -3087,6 +3109,10 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
a_engine->codec_params.iananame = switch_core_session_strdup(session, (char *) mimp->iananame);
a_engine->codec_params.iananame = switch_core_session_strdup(session, (char *) mimp->iananame);
a_engine->codec_params.pt = (switch_payload_t) mmap->rm_pt;
a_engine->codec_params.pt = (switch_payload_t) mmap->rm_pt;
a_engine->codec_params.rm_rate = mimp->samples_per_second;
a_engine->codec_params.rm_rate = mimp->samples_per_second;
a_engine->codec_params.adv_rm_rate = mimp->samples_per_second;
if (strcasecmp(mimp->iananame, "g722")) {
a_engine->codec_params.rm_rate = mimp->actual_samples_per_second;
}
a_engine->codec_params.codec_ms = mimp->microseconds_per_packet / 1000;
a_engine->codec_params.codec_ms = mimp->microseconds_per_packet / 1000;
a_engine->codec_params.bitrate = mimp->bits_per_second;
a_engine->codec_params.bitrate = mimp->bits_per_second;
a_engine->codec_params.channels = mmap->rm_params ? atoi(mmap->rm_params) : 1;
a_engine->codec_params.channels = mmap->rm_params ? atoi(mmap->rm_params) : 1;
...
@@ -5644,7 +5670,7 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
...
@@ -5644,7 +5670,7 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
switch_snprintf(buf + strlen(buf), SDPBUFLEN - strlen(buf), "\n");
switch_snprintf(buf + strlen(buf), SDPBUFLEN - strlen(buf), "\n");
rate
=
a_engine
->
codec_params
.
rm_rate
;
rate = a_engine->codec_params.
adv_
rm_rate;
//if (!strcasecmp(a_engine->codec_params.rm_encoding, "opus")) {
//if (!strcasecmp(a_engine->codec_params.rm_encoding, "opus")) {
// a_engine->codec_params.adv_channels = 2;
// a_engine->codec_params.adv_channels = 2;
...
@@ -6439,6 +6465,7 @@ SWITCH_DECLARE(void) switch_core_media_patch_sdp(switch_core_session_t *session)
...
@@ -6439,6 +6465,7 @@ SWITCH_DECLARE(void) switch_core_media_patch_sdp(switch_core_session_t *session)
}
}
a_engine->codec_params.iananame = switch_core_session_strdup(session, "PROXY");
a_engine->codec_params.iananame = switch_core_session_strdup(session, "PROXY");
a_engine->codec_params.rm_rate = 8000;
a_engine->codec_params.rm_rate = 8000;
a_engine->codec_params.adv_rm_rate = 8000;
a_engine->codec_params.codec_ms = 20;
a_engine->codec_params.codec_ms = 20;
}
}
...
@@ -6584,6 +6611,7 @@ SWITCH_DECLARE(void) switch_core_media_patch_sdp(switch_core_session_t *session)
...
@@ -6584,6 +6611,7 @@ SWITCH_DECLARE(void) switch_core_media_patch_sdp(switch_core_session_t *session)
switch_core_media_choose_port(session, SWITCH_MEDIA_TYPE_VIDEO, 1);
switch_core_media_choose_port(session, SWITCH_MEDIA_TYPE_VIDEO, 1);
v_engine->codec_params.rm_encoding = "PROXY-VID";
v_engine->codec_params.rm_encoding = "PROXY-VID";
v_engine->codec_params.rm_rate = 90000;
v_engine->codec_params.rm_rate = 90000;
v_engine->codec_params.adv_rm_rate = 90000;
v_engine->codec_params.codec_ms = 0;
v_engine->codec_params.codec_ms = 0;
switch_snprintf(vport_buf, sizeof(vport_buf), "%u", v_engine->codec_params.adv_sdp_port);
switch_snprintf(vport_buf, sizeof(vport_buf), "%u", v_engine->codec_params.adv_sdp_port);
if (switch_channel_media_ready(session->channel) && !switch_rtp_ready(v_engine->rtp_session)) {
if (switch_channel_media_ready(session->channel) && !switch_rtp_ready(v_engine->rtp_session)) {
...
@@ -7686,6 +7714,7 @@ SWITCH_DECLARE(void) switch_core_media_check_outgoing_proxy(switch_core_session_
...
@@ -7686,6 +7714,7 @@ SWITCH_DECLARE(void) switch_core_media_check_outgoing_proxy(switch_core_session_
a_engine->codec_params.iananame = switch_core_session_strdup(session, "PROXY");
a_engine->codec_params.iananame = switch_core_session_strdup(session, "PROXY");
a_engine->codec_params.rm_rate = 8000;
a_engine->codec_params.rm_rate = 8000;
a_engine->codec_params.adv_rm_rate = 8000;
a_engine->codec_params.codec_ms = 20;
a_engine->codec_params.codec_ms = 20;
...
@@ -7693,6 +7722,7 @@ SWITCH_DECLARE(void) switch_core_media_check_outgoing_proxy(switch_core_session_
...
@@ -7693,6 +7722,7 @@ SWITCH_DECLARE(void) switch_core_media_check_outgoing_proxy(switch_core_session_
switch_core_media_choose_port(session, SWITCH_MEDIA_TYPE_VIDEO, 1);
switch_core_media_choose_port(session, SWITCH_MEDIA_TYPE_VIDEO, 1);
v_engine->codec_params.rm_encoding = "PROXY-VID";
v_engine->codec_params.rm_encoding = "PROXY-VID";
v_engine->codec_params.rm_rate = 90000;
v_engine->codec_params.rm_rate = 90000;
v_engine->codec_params.adv_rm_rate = 90000;
v_engine->codec_params.codec_ms = 0;
v_engine->codec_params.codec_ms = 0;
switch_channel_set_flag(session->channel, CF_VIDEO);
switch_channel_set_flag(session->channel, CF_VIDEO);
switch_channel_set_flag(session->channel, CF_VIDEO_POSSIBLE);
switch_channel_set_flag(session->channel, CF_VIDEO_POSSIBLE);
...
@@ -7764,6 +7794,7 @@ SWITCH_DECLARE(void) switch_core_media_proxy_codec(switch_core_session_t *sessio
...
@@ -7764,6 +7794,7 @@ SWITCH_DECLARE(void) switch_core_media_proxy_codec(switch_core_session_t *sessio
for (map = m->m_rtpmaps; map; map = map->rm_next) {
for (map = m->m_rtpmaps; map; map = map->rm_next) {
a_engine->codec_params.iananame = switch_core_session_strdup(session, map->rm_encoding);
a_engine->codec_params.iananame = switch_core_session_strdup(session, map->rm_encoding);
a_engine->codec_params.rm_rate = map->rm_rate;
a_engine->codec_params.rm_rate = map->rm_rate;
a_engine->codec_params.adv_rm_rate = map->rm_rate;
a_engine->codec_params.codec_ms = ptime;
a_engine->codec_params.codec_ms = ptime;
switch_core_media_set_codec(session, 0, smh->mparams->codec_flags);
switch_core_media_set_codec(session, 0, smh->mparams->codec_flags);
break;
break;
...
@@ -7841,6 +7872,7 @@ SWITCH_DECLARE (void) switch_core_media_recover_session(switch_core_session_t *s
...
@@ -7841,6 +7872,7 @@ SWITCH_DECLARE (void) switch_core_media_recover_session(switch_core_session_t *s
if ((tmp = switch_channel_get_variable(session->channel, "rtp_use_codec_rate"))) {
if ((tmp = switch_channel_get_variable(session->channel, "rtp_use_codec_rate"))) {
a_engine->codec_params.rm_rate = atoi(tmp);
a_engine->codec_params.rm_rate = atoi(tmp);
a_engine->codec_params.adv_rm_rate = a_engine->codec_params.rm_rate;
}
}
if ((tmp = switch_channel_get_variable(session->channel, "rtp_use_codec_ptime"))) {
if ((tmp = switch_channel_get_variable(session->channel, "rtp_use_codec_ptime"))) {
...
@@ -7895,6 +7927,7 @@ SWITCH_DECLARE (void) switch_core_media_recover_session(switch_core_session_t *s
...
@@ -7895,6 +7927,7 @@ SWITCH_DECLARE (void) switch_core_media_recover_session(switch_core_session_t *s
if ((tmp = switch_channel_get_variable(session->channel, "rtp_use_video_codec_rate"))) {
if ((tmp = switch_channel_get_variable(session->channel, "rtp_use_video_codec_rate"))) {
v_engine->codec_params.rm_rate = atoi(tmp);
v_engine->codec_params.rm_rate = atoi(tmp);
v_engine->codec_params.adv_rm_rate = v_engine->codec_params.rm_rate;
}
}
if ((tmp = switch_channel_get_variable(session->channel, "rtp_use_video_codec_ptime"))) {
if ((tmp = switch_channel_get_variable(session->channel, "rtp_use_video_codec_ptime"))) {
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论