Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
fb78273a
提交
fb78273a
authored
11月 10, 2013
作者:
Anthony Minessale
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
inherit dynamic payloads from A leg where applicable
上级
afaa8e3a
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
89 行增加
和
16 行删除
+89
-16
switch_core_media.h
src/include/switch_core_media.h
+7
-0
switch_core_media.c
src/switch_core_media.c
+82
-16
没有找到文件。
src/include/switch_core_media.h
浏览文件 @
fb78273a
...
@@ -305,6 +305,13 @@ SWITCH_DECLARE(void) switch_core_media_deinit(void);
...
@@ -305,6 +305,13 @@ SWITCH_DECLARE(void) switch_core_media_deinit(void);
SWITCH_DECLARE
(
void
)
switch_core_media_set_stats
(
switch_core_session_t
*
session
);
SWITCH_DECLARE
(
void
)
switch_core_media_set_stats
(
switch_core_session_t
*
session
);
SWITCH_DECLARE
(
void
)
switch_core_session_wake_video_thread
(
switch_core_session_t
*
session
);
SWITCH_DECLARE
(
void
)
switch_core_session_wake_video_thread
(
switch_core_session_t
*
session
);
SWITCH_DECLARE
(
void
)
switch_core_session_clear_crypto
(
switch_core_session_t
*
session
);
SWITCH_DECLARE
(
void
)
switch_core_session_clear_crypto
(
switch_core_session_t
*
session
);
SWITCH_DECLARE
(
switch_status_t
)
switch_core_session_get_payload_code
(
switch_core_session_t
*
session
,
switch_media_type_t
type
,
const
char
*
iananame
,
switch_payload_t
*
ptP
,
switch_payload_t
*
recv_ptP
);
SWITCH_DECLARE
(
payload_map_t
*
)
switch_core_media_add_payload_map
(
switch_core_session_t
*
session
,
SWITCH_DECLARE
(
payload_map_t
*
)
switch_core_media_add_payload_map
(
switch_core_session_t
*
session
,
switch_media_type_t
type
,
switch_media_type_t
type
,
const
char
*
name
,
const
char
*
name
,
...
...
src/switch_core_media.c
浏览文件 @
fb78273a
...
@@ -162,6 +162,7 @@ struct switch_media_handle_s {
...
@@ -162,6 +162,7 @@ struct switch_media_handle_s {
char
*
origin
;
char
*
origin
;
switch_mutex_t
*
mutex
;
switch_mutex_t
*
mutex
;
switch_mutex_t
*
sdp_mutex
;
const
switch_codec_implementation_t
*
negotiated_codecs
[
SWITCH_MAX_CODECS
];
const
switch_codec_implementation_t
*
negotiated_codecs
[
SWITCH_MAX_CODECS
];
int
num_negotiated_codecs
;
int
num_negotiated_codecs
;
...
@@ -459,6 +460,50 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_process_t38_passthru(switch_co
...
@@ -459,6 +460,50 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_process_t38_passthru(switch_co
}
}
SWITCH_DECLARE
(
switch_status_t
)
switch_core_session_get_payload_code
(
switch_core_session_t
*
session
,
switch_media_type_t
type
,
const
char
*
iananame
,
switch_payload_t
*
ptP
,
switch_payload_t
*
recv_ptP
)
{
payload_map_t
*
pmap
;
switch_media_handle_t
*
smh
;
switch_rtp_engine_t
*
engine
;
switch_payload_t
pt
=
0
,
recv_pt
=
0
;
int
found
=
0
;
switch_assert
(
session
);
if
(
!
(
smh
=
session
->
media_handle
))
{
return
SWITCH_STATUS_FALSE
;
}
engine
=
&
smh
->
engines
[
type
];
switch_mutex_lock
(
smh
->
sdp_mutex
);
for
(
pmap
=
engine
->
payload_map
;
pmap
&&
pmap
->
allocated
;
pmap
=
pmap
->
next
)
{
if
(
!
strcasecmp
(
pmap
->
iananame
,
iananame
))
{
pt
=
pmap
->
pt
;
recv_pt
=
pmap
->
recv_pt
;
found
++
;
}
}
switch_mutex_lock
(
smh
->
sdp_mutex
);
if
(
found
)
{
if
(
ptP
)
{
*
ptP
=
pt
;
}
if
(
recv_ptP
)
{
*
recv_ptP
=
recv_pt
;
}
return
SWITCH_STATUS_SUCCESS
;
}
return
SWITCH_STATUS_FALSE
;
}
SWITCH_DECLARE
(
payload_map_t
*
)
switch_core_media_add_payload_map
(
switch_core_session_t
*
session
,
SWITCH_DECLARE
(
payload_map_t
*
)
switch_core_media_add_payload_map
(
switch_core_session_t
*
session
,
switch_media_type_t
type
,
switch_media_type_t
type
,
...
@@ -482,7 +527,7 @@ SWITCH_DECLARE(payload_map_t *) switch_core_media_add_payload_map(switch_core_se
...
@@ -482,7 +527,7 @@ SWITCH_DECLARE(payload_map_t *) switch_core_media_add_payload_map(switch_core_se
engine
=
&
smh
->
engines
[
type
];
engine
=
&
smh
->
engines
[
type
];
switch_mutex_lock
(
smh
->
mutex
);
switch_mutex_lock
(
smh
->
sdp_
mutex
);
for
(
pmap
=
engine
->
payload_map
;
pmap
&&
pmap
->
allocated
;
pmap
=
pmap
->
next
)
{
for
(
pmap
=
engine
->
payload_map
;
pmap
&&
pmap
->
allocated
;
pmap
=
pmap
->
next
)
{
...
@@ -534,7 +579,7 @@ SWITCH_DECLARE(payload_map_t *) switch_core_media_add_payload_map(switch_core_se
...
@@ -534,7 +579,7 @@ SWITCH_DECLARE(payload_map_t *) switch_core_media_add_payload_map(switch_core_se
}
}
}
}
switch_mutex_unlock
(
smh
->
mutex
);
switch_mutex_unlock
(
smh
->
sdp_
mutex
);
return
pmap
;
return
pmap
;
}
}
...
@@ -1144,6 +1189,7 @@ SWITCH_DECLARE(switch_status_t) switch_media_handle_create(switch_media_handle_t
...
@@ -1144,6 +1189,7 @@ SWITCH_DECLARE(switch_status_t) switch_media_handle_create(switch_media_handle_t
switch_mutex_init
(
&
session
->
media_handle
->
mutex
,
SWITCH_MUTEX_NESTED
,
switch_core_session_get_pool
(
session
));
switch_mutex_init
(
&
session
->
media_handle
->
mutex
,
SWITCH_MUTEX_NESTED
,
switch_core_session_get_pool
(
session
));
switch_mutex_init
(
&
session
->
media_handle
->
sdp_mutex
,
SWITCH_MUTEX_NESTED
,
switch_core_session_get_pool
(
session
));
session
->
media_handle
->
engines
[
SWITCH_MEDIA_TYPE_AUDIO
].
ssrc
=
session
->
media_handle
->
engines
[
SWITCH_MEDIA_TYPE_AUDIO
].
ssrc
=
(
uint32_t
)
((
intptr_t
)
&
session
->
media_handle
->
engines
[
SWITCH_MEDIA_TYPE_AUDIO
]
+
(
uint32_t
)
time
(
NULL
));
(
uint32_t
)
((
intptr_t
)
&
session
->
media_handle
->
engines
[
SWITCH_MEDIA_TYPE_AUDIO
]
+
(
uint32_t
)
time
(
NULL
));
...
@@ -1638,7 +1684,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_read_frame(switch_core_session
...
@@ -1638,7 +1684,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_read_frame(switch_core_session
/* search for payload type */
/* search for payload type */
switch_mutex_lock
(
smh
->
mutex
);
switch_mutex_lock
(
smh
->
sdp_
mutex
);
for
(
pmap
=
engine
->
cur_payload_map
;
pmap
;
pmap
=
pmap
->
next
)
{
for
(
pmap
=
engine
->
cur_payload_map
;
pmap
;
pmap
=
pmap
->
next
)
{
if
(
engine
->
read_frame
.
payload
==
pmap
->
recv_pt
)
{
if
(
engine
->
read_frame
.
payload
==
pmap
->
recv_pt
)
{
engine
->
cur_payload_map
=
pmap
;
engine
->
cur_payload_map
=
pmap
;
...
@@ -1652,7 +1698,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_read_frame(switch_core_session
...
@@ -1652,7 +1698,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_read_frame(switch_core_session
break
;
break
;
}
}
}
}
switch_mutex_unlock
(
smh
->
mutex
);
switch_mutex_unlock
(
smh
->
sdp_
mutex
);
if
(
!
engine
->
reset_codec
)
{
if
(
!
engine
->
reset_codec
)
{
switch_log_printf
(
SWITCH_CHANNEL_SESSION_LOG
(
session
),
SWITCH_LOG_WARNING
,
switch_log_printf
(
SWITCH_CHANNEL_SESSION_LOG
(
session
),
SWITCH_LOG_WARNING
,
...
@@ -5609,10 +5655,10 @@ SWITCH_DECLARE(void)switch_core_media_set_local_sdp(switch_core_session_t *sessi
...
@@ -5609,10 +5655,10 @@ SWITCH_DECLARE(void)switch_core_media_set_local_sdp(switch_core_session_t *sessi
return
;
return
;
}
}
if
(
smh
->
mutex
)
switch_mutex_lock
(
smh
->
mutex
);
if
(
smh
->
sdp_mutex
)
switch_mutex_lock
(
smh
->
sdp_
mutex
);
smh
->
mparams
->
local_sdp_str
=
dup
?
switch_core_session_strdup
(
session
,
sdp_str
)
:
(
char
*
)
sdp_str
;
smh
->
mparams
->
local_sdp_str
=
dup
?
switch_core_session_strdup
(
session
,
sdp_str
)
:
(
char
*
)
sdp_str
;
switch_channel_set_variable
(
session
->
channel
,
"rtp_local_sdp_str"
,
smh
->
mparams
->
local_sdp_str
);
switch_channel_set_variable
(
session
->
channel
,
"rtp_local_sdp_str"
,
smh
->
mparams
->
local_sdp_str
);
if
(
smh
->
mutex
)
switch_mutex_unlock
(
smh
->
mutex
);
if
(
smh
->
sdp_mutex
)
switch_mutex_unlock
(
smh
->
sdp_
mutex
);
}
}
...
@@ -5706,14 +5752,22 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
...
@@ -5706,14 +5752,22 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
}
}
if
(
!
smh
->
payload_space
)
{
if
(
!
smh
->
payload_space
)
{
int
i
;
int
i
;
smh
->
payload_space
=
98
;
smh
->
payload_space
=
98
;
if
(
sdp_type
==
SDP_TYPE_REQUEST
)
{
if
(
sdp_type
==
SDP_TYPE_REQUEST
)
{
switch_core_session_t
*
orig_session
=
NULL
;
switch_core_session_get_partner
(
session
,
&
orig_session
);
for
(
i
=
0
;
i
<
smh
->
mparams
->
num_codecs
;
i
++
)
{
for
(
i
=
0
;
i
<
smh
->
mparams
->
num_codecs
;
i
++
)
{
const
switch_codec_implementation_t
*
imp
=
smh
->
codecs
[
i
];
const
switch_codec_implementation_t
*
imp
=
smh
->
codecs
[
i
];
switch_payload_t
orig_pt
=
0
;
smh
->
ianacodes
[
i
]
=
imp
->
ianacode
;
smh
->
ianacodes
[
i
]
=
imp
->
ianacode
;
...
@@ -5725,8 +5779,16 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
...
@@ -5725,8 +5779,16 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
smh
->
mparams
->
cng_pt
&&
use_cng
&&
smh
->
mparams
->
cng_pt
==
smh
->
payload_space
)
{
smh
->
mparams
->
cng_pt
&&
use_cng
&&
smh
->
mparams
->
cng_pt
==
smh
->
payload_space
)
{
smh
->
payload_space
++
;
smh
->
payload_space
++
;
}
}
if
(
orig_session
&&
switch_core_session_get_payload_code
(
orig_session
,
imp
->
codec_type
==
SWITCH_CODEC_TYPE_AUDIO
?
SWITCH_MEDIA_TYPE_AUDIO
:
SWITCH_MEDIA_TYPE_VIDEO
,
imp
->
iananame
,
NULL
,
&
orig_pt
)
==
SWITCH_STATUS_SUCCESS
)
{
smh
->
ianacodes
[
i
]
=
orig_pt
;
}
else
{
smh
->
ianacodes
[
i
]
=
(
switch_payload_t
)
smh
->
payload_space
++
;
smh
->
ianacodes
[
i
]
=
(
switch_payload_t
)
smh
->
payload_space
++
;
}
}
}
switch_core_media_add_payload_map
(
session
,
switch_core_media_add_payload_map
(
session
,
...
@@ -5739,6 +5801,10 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
...
@@ -5739,6 +5801,10 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
SWITCH_FALSE
);
SWITCH_FALSE
);
}
}
if
(
orig_session
)
{
switch_core_session_rwunlock
(
orig_session
);
}
}
}
}
}
...
@@ -5850,13 +5916,13 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
...
@@ -5850,13 +5916,13 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
if
(
switch_media_handle_test_media_flag
(
smh
,
SCMF_MULTI_ANSWER_AUDIO
))
{
if
(
switch_media_handle_test_media_flag
(
smh
,
SCMF_MULTI_ANSWER_AUDIO
))
{
switch_mutex_lock
(
smh
->
mutex
);
switch_mutex_lock
(
smh
->
sdp_
mutex
);
for
(
pmap
=
a_engine
->
cur_payload_map
;
pmap
&&
pmap
->
allocated
;
pmap
=
pmap
->
next
)
{
for
(
pmap
=
a_engine
->
cur_payload_map
;
pmap
&&
pmap
->
allocated
;
pmap
=
pmap
->
next
)
{
if
(
pmap
->
pt
!=
a_engine
->
cur_payload_map
->
pt
)
{
if
(
pmap
->
pt
!=
a_engine
->
cur_payload_map
->
pt
)
{
switch_snprintf
(
buf
+
strlen
(
buf
),
SDPBUFLEN
-
strlen
(
buf
),
" %d"
,
pmap
->
pt
);
switch_snprintf
(
buf
+
strlen
(
buf
),
SDPBUFLEN
-
strlen
(
buf
),
" %d"
,
pmap
->
pt
);
}
}
}
}
switch_mutex_unlock
(
smh
->
mutex
);
switch_mutex_unlock
(
smh
->
sdp_
mutex
);
}
}
if
((
smh
->
mparams
->
dtmf_type
==
DTMF_2833
||
switch_media_handle_test_media_flag
(
smh
,
SCMF_LIBERAL_DTMF
)
||
if
((
smh
->
mparams
->
dtmf_type
==
DTMF_2833
||
switch_media_handle_test_media_flag
(
smh
,
SCMF_LIBERAL_DTMF
)
||
...
@@ -5890,7 +5956,7 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
...
@@ -5890,7 +5956,7 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
}
}
if
(
switch_media_handle_test_media_flag
(
smh
,
SCMF_MULTI_ANSWER_AUDIO
))
{
if
(
switch_media_handle_test_media_flag
(
smh
,
SCMF_MULTI_ANSWER_AUDIO
))
{
switch_mutex_lock
(
smh
->
mutex
);
switch_mutex_lock
(
smh
->
sdp_
mutex
);
for
(
pmap
=
a_engine
->
cur_payload_map
;
pmap
&&
pmap
->
allocated
;
pmap
=
pmap
->
next
)
{
for
(
pmap
=
a_engine
->
cur_payload_map
;
pmap
&&
pmap
->
allocated
;
pmap
=
pmap
->
next
)
{
if
(
pmap
->
pt
!=
a_engine
->
cur_payload_map
->
pt
)
{
if
(
pmap
->
pt
!=
a_engine
->
cur_payload_map
->
pt
)
{
switch_snprintf
(
buf
+
strlen
(
buf
),
SDPBUFLEN
-
strlen
(
buf
),
"a=rtpmap:%d %s/%ld
\n
"
,
switch_snprintf
(
buf
+
strlen
(
buf
),
SDPBUFLEN
-
strlen
(
buf
),
"a=rtpmap:%d %s/%ld
\n
"
,
...
@@ -5898,7 +5964,7 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
...
@@ -5898,7 +5964,7 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
pmap
->
rate
);
pmap
->
rate
);
}
}
}
}
switch_mutex_unlock
(
smh
->
mutex
);
switch_mutex_unlock
(
smh
->
sdp_
mutex
);
}
}
...
@@ -6169,13 +6235,13 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
...
@@ -6169,13 +6235,13 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
switch_snprintf
(
buf
+
strlen
(
buf
),
SDPBUFLEN
-
strlen
(
buf
),
" %d"
,
v_engine
->
cur_payload_map
->
agreed_pt
);
switch_snprintf
(
buf
+
strlen
(
buf
),
SDPBUFLEN
-
strlen
(
buf
),
" %d"
,
v_engine
->
cur_payload_map
->
agreed_pt
);
if
(
switch_media_handle_test_media_flag
(
smh
,
SCMF_MULTI_ANSWER_VIDEO
))
{
if
(
switch_media_handle_test_media_flag
(
smh
,
SCMF_MULTI_ANSWER_VIDEO
))
{
switch_mutex_lock
(
smh
->
mutex
);
switch_mutex_lock
(
smh
->
sdp_
mutex
);
for
(
pmap
=
v_engine
->
cur_payload_map
;
pmap
&&
pmap
->
allocated
;
pmap
=
pmap
->
next
)
{
for
(
pmap
=
v_engine
->
cur_payload_map
;
pmap
&&
pmap
->
allocated
;
pmap
=
pmap
->
next
)
{
if
(
pmap
->
pt
!=
v_engine
->
cur_payload_map
->
pt
)
{
if
(
pmap
->
pt
!=
v_engine
->
cur_payload_map
->
pt
)
{
switch_snprintf
(
buf
+
strlen
(
buf
),
SDPBUFLEN
-
strlen
(
buf
),
" %d"
,
pmap
->
pt
);
switch_snprintf
(
buf
+
strlen
(
buf
),
SDPBUFLEN
-
strlen
(
buf
),
" %d"
,
pmap
->
pt
);
}
}
}
}
switch_mutex_unlock
(
smh
->
mutex
);
switch_mutex_unlock
(
smh
->
sdp_
mutex
);
}
}
}
else
if
(
smh
->
mparams
->
num_codecs
)
{
}
else
if
(
smh
->
mparams
->
num_codecs
)
{
...
@@ -6255,7 +6321,7 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
...
@@ -6255,7 +6321,7 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
if
(
switch_media_handle_test_media_flag
(
smh
,
SCMF_MULTI_ANSWER_VIDEO
))
{
if
(
switch_media_handle_test_media_flag
(
smh
,
SCMF_MULTI_ANSWER_VIDEO
))
{
switch_mutex_lock
(
smh
->
mutex
);
switch_mutex_lock
(
smh
->
sdp_
mutex
);
for
(
pmap
=
v_engine
->
cur_payload_map
;
pmap
&&
pmap
->
allocated
;
pmap
=
pmap
->
next
)
{
for
(
pmap
=
v_engine
->
cur_payload_map
;
pmap
&&
pmap
->
allocated
;
pmap
=
pmap
->
next
)
{
if
(
pmap
->
pt
!=
v_engine
->
cur_payload_map
->
pt
)
{
if
(
pmap
->
pt
!=
v_engine
->
cur_payload_map
->
pt
)
{
switch_snprintf
(
buf
+
strlen
(
buf
),
SDPBUFLEN
-
strlen
(
buf
),
"a=rtpmap:%d %s/%ld
\n
"
,
switch_snprintf
(
buf
+
strlen
(
buf
),
SDPBUFLEN
-
strlen
(
buf
),
"a=rtpmap:%d %s/%ld
\n
"
,
...
@@ -6263,7 +6329,7 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
...
@@ -6263,7 +6329,7 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
}
}
}
}
switch_mutex_unlock
(
smh
->
mutex
);
switch_mutex_unlock
(
smh
->
sdp_
mutex
);
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论