Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
7f85faf2
提交
7f85faf2
authored
10月 06, 2015
作者:
Anthony Minessale
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
FS-8130 FS-8305 refactor of last patch plus suppression of scary harmless message about opus fec
上级
132564f0
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
101 行增加
和
77 行删除
+101
-77
mod_opus.c
src/mod/codecs/mod_opus/mod_opus.c
+2
-1
switch_rtp.c
src/switch_rtp.c
+99
-76
没有找到文件。
src/mod/codecs/mod_opus/mod_opus.c
浏览文件 @
7f85faf2
...
...
@@ -338,7 +338,8 @@ static switch_bool_t switch_opus_has_fec(const uint8_t* payload,int payload_leng
return
SWITCH_FALSE
;
}
if
(
payload
[
0
]
&
0x80
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"FEC in CELT_ONLY mode ?!
\n
"
);
/* this scares users and its harmless so commenting it */
//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "FEC in CELT_ONLY mode ?!\n");
return
SWITCH_FALSE
;
}
...
...
src/switch_rtp.c
浏览文件 @
7f85faf2
...
...
@@ -556,7 +556,7 @@ static handle_rfc2833_result_t handle_rfc2833(switch_rtp_t *rtp_session, switch_
*/
if
(
bytes
>
rtp_header_len
&&
!
rtp_session
->
flags
[
SWITCH_RTP_FLAG_PROXY_MEDIA
]
&&
rtp_session
->
recv_msg
.
heade
r
.
pt
==
rtp_session
->
recv_te
)
{
rtp_session
->
last_rtp_hd
r
.
pt
==
rtp_session
->
recv_te
)
{
switch_size_t
len
=
bytes
-
rtp_header_len
;
unsigned
char
*
packet
=
(
unsigned
char
*
)
RTP_BODY
(
rtp_session
);
int
end
;
...
...
@@ -584,8 +584,8 @@ static handle_rfc2833_result_t handle_rfc2833(switch_rtp_t *rtp_session, switch_
end
=
packet
[
1
]
&
0x80
?
1
:
0
;
duration
=
(
packet
[
2
]
<<
8
)
+
packet
[
3
];
key
=
switch_rfc2833_to_char
(
packet
[
0
]);
in_digit_seq
=
ntohs
((
uint16_t
)
rtp_session
->
recv_msg
.
heade
r
.
seq
);
ts
=
htonl
(
rtp_session
->
recv_msg
.
heade
r
.
ts
);
in_digit_seq
=
ntohs
((
uint16_t
)
rtp_session
->
last_rtp_hd
r
.
seq
);
ts
=
htonl
(
rtp_session
->
last_rtp_hd
r
.
ts
);
if
(
rtp_session
->
flags
[
SWITCH_RTP_FLAG_PASS_RFC2833
])
{
...
...
@@ -614,7 +614,7 @@ static handle_rfc2833_result_t handle_rfc2833(switch_rtp_t *rtp_session, switch_
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"read: %c %u %u %u %u %d %d %s
\n
"
,
key
,
in_digit_seq
,
rtp_session
->
dtmf_data
.
in_digit_seq
,
ts
,
duration
,
rtp_session
->
recv_msg
.
heade
r
.
m
,
end
,
end
&&
!
rtp_session
->
dtmf_data
.
in_digit_ts
?
"ignored"
:
""
);
ts
,
duration
,
rtp_session
->
last_rtp_hd
r
.
m
,
end
,
end
&&
!
rtp_session
->
dtmf_data
.
in_digit_ts
?
"ignored"
:
""
);
#endif
if
(
!
rtp_session
->
dtmf_data
.
in_digit_queued
&&
rtp_session
->
dtmf_data
.
in_digit_ts
)
{
...
...
@@ -706,7 +706,7 @@ static handle_rfc2833_result_t handle_rfc2833(switch_rtp_t *rtp_session, switch_
}
else
{
#ifdef DEBUG_2833
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"drop: %c %u %u %u %u %d %d
\n
"
,
key
,
in_digit_seq
,
rtp_session
->
dtmf_data
.
in_digit_seq
,
ts
,
duration
,
rtp_session
->
recv_msg
.
heade
r
.
m
,
end
);
key
,
in_digit_seq
,
rtp_session
->
dtmf_data
.
in_digit_seq
,
ts
,
duration
,
rtp_session
->
last_rtp_hd
r
.
m
,
end
);
#endif
switch_cond_next
();
return
RESULT_GOTO_RECVFROM
;
...
...
@@ -718,13 +718,13 @@ static handle_rfc2833_result_t handle_rfc2833(switch_rtp_t *rtp_session, switch_
return
RESULT_GOTO_END
;
}
if
(
!
rtp_session
->
dtmf_data
.
in_interleaved
&&
rtp_session
->
recv_msg
.
heade
r
.
pt
!=
rtp_session
->
recv_te
)
{
if
(
!
rtp_session
->
dtmf_data
.
in_interleaved
&&
rtp_session
->
last_rtp_hd
r
.
pt
!=
rtp_session
->
recv_te
)
{
/* Drat, they are sending audio still as well as DTMF ok fine..... *sigh* */
rtp_session
->
dtmf_data
.
in_interleaved
=
1
;
}
if
(
rtp_session
->
dtmf_data
.
in_interleaved
||
(
rtp_session
->
rtp_bugs
&
RTP_BUG_IGNORE_DTMF_DURATION
))
{
if
(
rtp_session
->
recv_msg
.
heade
r
.
pt
==
rtp_session
->
recv_te
)
{
if
(
rtp_session
->
last_rtp_hd
r
.
pt
==
rtp_session
->
recv_te
)
{
return
RESULT_GOTO_RECVFROM
;
}
}
else
{
...
...
@@ -4918,7 +4918,7 @@ static switch_size_t do_flush(switch_rtp_t *rtp_session, int force, switch_size_
int
do_cng
=
0
;
/* Make sure to handle RFC2833 packets, even if we're flushing the packets */
if
(
bytes
>
rtp_header_len
&&
rtp_session
->
recv_msg
.
heade
r
.
pt
==
rtp_session
->
recv_te
)
{
if
(
bytes
>
rtp_header_len
&&
rtp_session
->
last_rtp_hd
r
.
pt
==
rtp_session
->
recv_te
)
{
handle_rfc2833
(
rtp_session
,
bytes
,
&
do_cng
);
#ifdef DEBUG_2833
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"*** RTP packet handled in flush loop %d ***
\n
"
,
do_cng
);
...
...
@@ -4971,7 +4971,7 @@ static int check_recv_payload(switch_rtp_t *rtp_session)
continue
;
}
if
(
rtp_session
->
recv_msg
.
heade
r
.
pt
==
pmap
->
pt
)
{
if
(
rtp_session
->
last_rtp_hd
r
.
pt
==
pmap
->
pt
)
{
ok
=
1
;
}
}
...
...
@@ -4981,6 +4981,27 @@ static int check_recv_payload(switch_rtp_t *rtp_session)
return
ok
;
}
static
int
get_recv_payload
(
switch_rtp_t
*
rtp_session
)
{
int
r
=
-
1
;
if
(
rtp_session
->
pmaps
&&
*
rtp_session
->
pmaps
)
{
payload_map_t
*
pmap
;
switch_mutex_lock
(
rtp_session
->
flag_mutex
);
for
(
pmap
=
*
rtp_session
->
pmaps
;
pmap
&&
pmap
->
allocated
;
pmap
=
pmap
->
next
)
{
if
(
pmap
->
negotiated
)
{
r
=
pmap
->
pt
;
break
;
}
}
switch_mutex_unlock
(
rtp_session
->
flag_mutex
);
}
return
r
;
}
#define return_cng_frame() do_cng = 1; goto timer_check
static
switch_status_t
read_rtp_packet
(
switch_rtp_t
*
rtp_session
,
switch_size_t
*
bytes
,
switch_frame_flag_t
*
flags
,
...
...
@@ -5048,46 +5069,44 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
rtp_session
->
has_rtp
=
(
rtp_session
->
recv_msg
.
header
.
version
==
2
);
if
(
rtp_session
->
flags
[
SWITCH_RTP_FLAG_RTCP_MUX
])
{
switch
(
rtp_session
->
recv_msg
.
header
.
pt
)
{
case
64
:
// 192 Full INTRA-frame request.
case
72
:
// 200 Sender report.
case
73
:
// 201 Receiver report.
case
74
:
// 202 Source description.
case
75
:
// 203 Goodbye.
case
76
:
// 204 Application-defined.
case
77
:
// 205 Transport layer FB message.
case
78
:
// 206 Payload-specific FB message.
case
79
:
// 207 Extended report.
rtp_session
->
has_rtcp
=
1
;
rtp_session
->
has_rtp
=
0
;
break
;
default
:
if
(
!
check_recv_payload
(
rtp_session
)
&&
rtp_session
->
recv_msg
.
header
.
pt
!=
rtp_session
->
recv_te
&&
rtp_session
->
recv_msg
.
header
.
pt
!=
rtp_session
->
cng_pt
&&
rtp_session
->
rtcp_recv_msg_p
->
header
.
version
==
2
&&
rtp_session
->
rtcp_recv_msg_p
->
header
.
type
>
199
&&
rtp_session
->
rtcp_recv_msg_p
->
header
.
type
<
208
)
{
rtp_session
->
has_rtcp
=
1
;
rtp_session
->
has_rtp
=
0
;
}
break
;
}
}
if
((
*
b
>=
20
)
&&
(
*
b
<=
64
))
{
rtp_session
->
dtls
->
bytes
=
*
bytes
;
rtp_session
->
dtls
->
data
=
(
void
*
)
&
rtp_session
->
recv_msg
;
rtp_session
->
has_ice
=
0
;
rtp_session
->
has_rtp
=
0
;
rtp_session
->
has_rtcp
=
0
;
}
else
if
(
!
rtp_session
->
has_rtp
&&
!
rtp_session
->
has_rtcp
&&
rtp_session
->
ice
.
ice_user
)
{
if
(
*
b
==
0
||
*
b
==
1
)
{
rtp_session
->
has_ice
=
1
;
rtp_session
->
has_rtp
=
0
;
rtp_session
->
has_rtcp
=
0
;
}
else
if
(
*
b
==
0
||
*
b
==
1
)
{
rtp_session
->
has_ice
=
1
;
rtp_session
->
has_rtp
=
0
;
rtp_session
->
has_rtcp
=
0
;
}
else
{
if
(
rtp_session
->
flags
[
SWITCH_RTP_FLAG_RTCP_MUX
])
{
switch
(
rtp_session
->
recv_msg
.
header
.
pt
)
{
case
64
:
// 192 Full INTRA-frame request.
case
72
:
// 200 Sender report.
case
73
:
// 201 Receiver report.
case
74
:
// 202 Source description.
case
75
:
// 203 Goodbye.
case
76
:
// 204 Application-defined.
case
77
:
// 205 Transport layer FB message.
case
78
:
// 206 Payload-specific FB message.
case
79
:
// 207 Extended report.
rtp_session
->
has_rtcp
=
1
;
rtp_session
->
has_rtp
=
0
;
rtp_session
->
has_ice
=
0
;
break
;
default
:
if
(
rtp_session
->
rtcp_recv_msg_p
->
header
.
version
==
2
&&
rtp_session
->
rtcp_recv_msg_p
->
header
.
type
>
199
&&
rtp_session
->
rtcp_recv_msg_p
->
header
.
type
<
208
)
{
rtp_session
->
has_rtcp
=
1
;
rtp_session
->
has_rtp
=
0
;
rtp_session
->
has_ice
=
0
;
}
break
;
}
}
}
rtp_session
->
missed_count
=
0
;
if
(
rtp_session
->
has_rtp
)
{
...
...
@@ -5227,8 +5246,8 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
now
=
switch_micro_time_now
();
if
(
*
bytes
)
{
uint16_t
seq
=
ntohs
((
uint16_t
)
rtp_session
->
recv_msg
.
heade
r
.
seq
);
ts
=
ntohl
(
rtp_session
->
recv_msg
.
heade
r
.
ts
);
uint16_t
seq
=
ntohs
((
uint16_t
)
rtp_session
->
last_rtp_hd
r
.
seq
);
ts
=
ntohl
(
rtp_session
->
last_rtp_hd
r
.
ts
);
#ifdef DEBUG_MISSED_SEQ
if
(
rtp_session
->
last_seq
&&
rtp_session
->
last_seq
+
1
!=
seq
)
{
...
...
@@ -5282,7 +5301,7 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
}
if
(
!
rtp_session
->
flags
[
SWITCH_RTP_FLAG_PROXY_MEDIA
]
&&
!
rtp_session
->
flags
[
SWITCH_RTP_FLAG_UDPTL
]
&&
!
rtp_session
->
flags
[
SWITCH_RTP_FLAG_VIDEO
]
&&
*
bytes
&&
rtp_session
->
recv_msg
.
heade
r
.
pt
!=
rtp_session
->
recv_te
&&
*
bytes
&&
rtp_session
->
last_rtp_hd
r
.
pt
!=
rtp_session
->
recv_te
&&
ts
&&
!
rtp_session
->
jb
&&
!
rtp_session
->
pause_jb
&&
jb_valid
(
rtp_session
)
&&
ts
==
rtp_session
->
last_cng_ts
)
{
/* we already sent this frame..... */
*
bytes
=
0
;
...
...
@@ -5320,8 +5339,8 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
#ifdef ENABLE_SRTP
if
(
rtp_session
->
flags
[
SWITCH_RTP_FLAG_SECURE_RECV
]
&&
rtp_session
->
has_rtp
&&
(
check_recv_payload
(
rtp_session
)
||
rtp_session
->
recv_msg
.
heade
r
.
pt
==
rtp_session
->
recv_te
||
rtp_session
->
recv_msg
.
heade
r
.
pt
==
rtp_session
->
cng_pt
))
{
rtp_session
->
last_rtp_hd
r
.
pt
==
rtp_session
->
recv_te
||
rtp_session
->
last_rtp_hd
r
.
pt
==
rtp_session
->
cng_pt
))
{
//if (rtp_session->flags[SWITCH_RTP_FLAG_SECURE_RECV] && (!rtp_session->ice.ice_user || rtp_session->has_rtp)) {
int
sbytes
=
(
int
)
*
bytes
;
err_status_t
stat
=
0
;
...
...
@@ -5418,13 +5437,13 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_INFO
,
"VIDEO: seq: %d ts: %u len: %ld %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x mark: %d
\n
"
,
ntohs
(
rtp_session
->
recv_msg
.
header
.
seq
),
ntohl
(
rtp_session
->
recv_msg
.
heade
r
.
ts
),
*
bytes
,
ntohs
(
rtp_session
->
last_rtp_hdr
.
seq
),
ntohl
(
rtp_session
->
last_rtp_hd
r
.
ts
),
*
bytes
,
*
((
uint8_t
*
)
RTP_BODY
(
rtp_session
)),
*
((
uint8_t
*
)
RTP_BODY
(
rtp_session
)
+
1
),
*
((
uint8_t
*
)
RTP_BODY
(
rtp_session
)
+
2
),
*
((
uint8_t
*
)
RTP_BODY
(
rtp_session
)
+
3
),
*
((
uint8_t
*
)
RTP_BODY
(
rtp_session
)
+
4
),
*
((
uint8_t
*
)
RTP_BODY
(
rtp_session
)
+
5
),
*
((
uint8_t
*
)
RTP_BODY
(
rtp_session
)
+
6
),
*
((
uint8_t
*
)
RTP_BODY
(
rtp_session
)
+
7
),
*
((
uint8_t
*
)
RTP_BODY
(
rtp_session
)
+
8
),
*
((
uint8_t
*
)
RTP_BODY
(
rtp_session
)
+
9
),
*
((
uint8_t
*
)
RTP_BODY
(
rtp_session
)
+
10
),
rtp_session
->
recv_msg
.
heade
r
.
m
);
*
((
uint8_t
*
)
RTP_BODY
(
rtp_session
)
+
10
),
rtp_session
->
last_rtp_hd
r
.
m
);
}
#endif
...
...
@@ -5439,9 +5458,9 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
rtp_session
->
stats
.
inbound
.
raw_bytes
+=
*
bytes
;
if
(
rtp_session
->
recv_msg
.
heade
r
.
pt
==
rtp_session
->
recv_te
)
{
if
(
rtp_session
->
last_rtp_hd
r
.
pt
==
rtp_session
->
recv_te
)
{
rtp_session
->
stats
.
inbound
.
dtmf_packet_count
++
;
}
else
if
(
rtp_session
->
recv_msg
.
header
.
pt
==
rtp_session
->
cng_pt
||
rtp_session
->
recv_msg
.
heade
r
.
pt
==
13
)
{
}
else
if
(
rtp_session
->
last_rtp_hdr
.
pt
==
rtp_session
->
cng_pt
||
rtp_session
->
last_rtp_hd
r
.
pt
==
13
)
{
rtp_session
->
stats
.
inbound
.
cng_packet_count
++
;
}
else
{
rtp_session
->
stats
.
inbound
.
media_packet_count
++
;
...
...
@@ -5451,7 +5470,7 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
rtp_session
->
stats
.
inbound
.
packet_count
++
;
}
if
(
rtp_session
->
recv_msg
.
heade
r
.
pt
==
rtp_session
->
recv_te
||
if
(
rtp_session
->
last_rtp_hd
r
.
pt
==
rtp_session
->
recv_te
||
(
*
bytes
<
rtp_header_len
&&
*
bytes
>
0
)
||
rtp_session
->
flags
[
SWITCH_RTP_FLAG_PROXY_MEDIA
]
||
rtp_session
->
flags
[
SWITCH_RTP_FLAG_UDPTL
])
{
return
SWITCH_STATUS_SUCCESS
;
...
...
@@ -5497,7 +5516,7 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
if
(
rtp_session
->
jb
&&
!
rtp_session
->
pause_jb
&&
jb_valid
(
rtp_session
))
{
uint32_t
read_ssrc
=
ntohl
(
rtp_session
->
last_rtp_hdr
.
ssrc
);
if
(
rtp_session
->
recv_msg
.
header
.
m
&&
rtp_session
->
recv_msg
.
heade
r
.
pt
!=
rtp_session
->
recv_te
&&
if
(
rtp_session
->
last_rtp_hdr
.
m
&&
rtp_session
->
last_rtp_hd
r
.
pt
!=
rtp_session
->
recv_te
&&
!
rtp_session
->
flags
[
SWITCH_RTP_FLAG_VIDEO
]
&&
!
(
rtp_session
->
rtp_bugs
&
RTP_BUG_IGNORE_MARK_BIT
))
{
switch_jb_reset
(
rtp_session
->
jb
);
}
else
if
(
rtp_session
->
last_jb_read_ssrc
&&
rtp_session
->
last_jb_read_ssrc
!=
read_ssrc
)
{
...
...
@@ -5539,10 +5558,14 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
goto
more
;
case
SWITCH_STATUS_NOTFOUND
:
{
int
pt
=
get_recv_payload
(
rtp_session
);
(
*
flags
)
|=
SFF_PLC
;
status
=
SWITCH_STATUS_SUCCESS
;
*
bytes
=
switch_jb_get_last_read_len
(
rtp_session
->
jb
);
rtp_session
->
last_rtp_hdr
=
rtp_session
->
recv_msg
.
header
;
if
(
pt
>
-
1
)
{
rtp_session
->
last_rtp_hdr
.
pt
=
pt
;
}
}
break
;
case
SWITCH_STATUS_SUCCESS
:
...
...
@@ -5551,7 +5574,7 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
rtp_session
->
stats
.
inbound
.
jb_packet_count
++
;
status
=
SWITCH_STATUS_SUCCESS
;
rtp_session
->
last_rtp_hdr
=
rtp_session
->
recv_msg
.
header
;
if
(
!
xcheck_jitter
)
{
check_jitter
(
rtp_session
);
xcheck_jitter
=
*
bytes
;
...
...
@@ -6382,9 +6405,9 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
if
(
bytes
&&
rtp_session
->
has_rtp
&&
!
rtp_session
->
flags
[
SWITCH_RTP_FLAG_PROXY_MEDIA
]
&&
!
rtp_session
->
flags
[
SWITCH_RTP_FLAG_UDPTL
]
&&
rtp_session
->
recv_msg
.
heade
r
.
pt
!=
13
&&
rtp_session
->
recv_msg
.
heade
r
.
pt
!=
rtp_session
->
recv_te
&&
rtp_session
->
recv_msg
.
heade
r
.
pt
!=
rtp_session
->
cng_pt
)
{
rtp_session
->
last_rtp_hd
r
.
pt
!=
13
&&
rtp_session
->
last_rtp_hd
r
.
pt
!=
rtp_session
->
recv_te
&&
rtp_session
->
last_rtp_hd
r
.
pt
!=
rtp_session
->
cng_pt
)
{
int
accept_packet
=
1
;
...
...
@@ -6399,7 +6422,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
continue
;
}
if
(
rtp_session
->
recv_msg
.
heade
r
.
pt
==
pmap
->
pt
)
{
if
(
rtp_session
->
last_rtp_hd
r
.
pt
==
pmap
->
pt
)
{
accept_packet
=
1
;
if
(
pmapP
)
{
*
pmapP
=
pmap
;
...
...
@@ -6451,14 +6474,14 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
goto
recvfrom
;
}
if
(
bytes
&&
rtp_session
->
recv_msg
.
header
.
m
&&
rtp_session
->
recv_msg
.
heade
r
.
pt
!=
rtp_session
->
recv_te
&&
if
(
bytes
&&
rtp_session
->
last_rtp_hdr
.
m
&&
rtp_session
->
last_rtp_hd
r
.
pt
!=
rtp_session
->
recv_te
&&
!
rtp_session
->
flags
[
SWITCH_RTP_FLAG_VIDEO
]
&&
!
(
rtp_session
->
rtp_bugs
&
RTP_BUG_IGNORE_MARK_BIT
))
{
rtp_flush_read_buffer
(
rtp_session
,
SWITCH_RTP_FLUSH_ONCE
);
}
if
(
rtp_session
->
recv_msg
.
header
.
pt
==
rtp_session
->
cng_pt
||
rtp_session
->
recv_msg
.
heade
r
.
pt
==
13
)
{
if
(
rtp_session
->
last_rtp_hdr
.
pt
==
rtp_session
->
cng_pt
||
rtp_session
->
last_rtp_hd
r
.
pt
==
13
)
{
*
flags
|=
SFF_NOT_AUDIO
;
}
else
{
*
flags
&=
~
SFF_NOT_AUDIO
;
/* If this flag was already set, make sure to remove it when we get real audio */
...
...
@@ -6467,7 +6490,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
/* ignore packets not meant for us unless the auto-adjust window is open (ice mode has its own alternatives to this) */
if
(
!
using_ice
(
rtp_session
)
&&
bytes
)
{
if
(
rtp_session
->
flags
[
SWITCH_RTP_FLAG_AUTOADJ
])
{
if
(
rtp_session
->
recv_msg
.
header
.
pt
==
rtp_session
->
cng_pt
||
rtp_session
->
recv_msg
.
heade
r
.
pt
==
13
)
{
if
(
rtp_session
->
last_rtp_hdr
.
pt
==
rtp_session
->
cng_pt
||
rtp_session
->
last_rtp_hd
r
.
pt
==
13
)
{
goto
recvfrom
;
}
...
...
@@ -6569,7 +6592,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
goto
do_continue
;
}
if
(
rtp_session
->
recv_msg
.
header
.
pt
&&
(
rtp_session
->
recv_msg
.
header
.
pt
==
rtp_session
->
cng_pt
||
rtp_session
->
recv_msg
.
heade
r
.
pt
==
13
))
{
if
(
rtp_session
->
last_rtp_hdr
.
pt
&&
(
rtp_session
->
last_rtp_hdr
.
pt
==
rtp_session
->
cng_pt
||
rtp_session
->
last_rtp_hd
r
.
pt
==
13
))
{
return_cng_frame
();
}
}
...
...
@@ -6581,12 +6604,12 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
if
(
bytes
&&
rtp_session
->
recv_msg
.
header
.
version
!=
2
)
{
uint8_t
*
data
=
(
uint8_t
*
)
RTP_BODY
(
rtp_session
);
if
(
rtp_session
->
recv_msg
.
header
.
version
==
0
)
{
if
(
rtp_session
->
ice
.
ice_user
)
{
handle_ice
(
rtp_session
,
&
rtp_session
->
ice
,
(
void
*
)
&
rtp_session
->
recv_msg
,
bytes
);
goto
recvfrom
;
}
}
//
if (rtp_session->recv_msg.header.version == 0) {
//
if (rtp_session->ice.ice_user) {
//
handle_ice(rtp_session, &rtp_session->ice, (void *) &rtp_session->recv_msg, bytes);
//
goto recvfrom;
//
}
//
}
if
(
rtp_session
->
invalid_handler
)
{
rtp_session
->
invalid_handler
(
rtp_session
,
rtp_session
->
sock_input
,
(
void
*
)
&
rtp_session
->
recv_msg
,
bytes
,
rtp_session
->
rtp_from_addr
);
...
...
@@ -6595,9 +6618,9 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
memset
(
data
,
0
,
2
);
data
[
0
]
=
65
;
rtp_session
->
recv_msg
.
heade
r
.
pt
=
rtp_session
->
cng_pt
!=
INVALID_PT
?
rtp_session
->
cng_pt
:
SWITCH_RTP_CNG_PAYLOAD
;
rtp_session
->
last_rtp_hd
r
.
pt
=
rtp_session
->
cng_pt
!=
INVALID_PT
?
rtp_session
->
cng_pt
:
SWITCH_RTP_CNG_PAYLOAD
;
*
flags
|=
SFF_CNG
;
*
payload_type
=
(
switch_payload_t
)
rtp_session
->
recv_msg
.
heade
r
.
pt
;
*
payload_type
=
(
switch_payload_t
)
rtp_session
->
last_rtp_hd
r
.
pt
;
ret
=
2
+
rtp_header_len
;
goto
end
;
}
else
if
(
bytes
)
{
...
...
@@ -6637,9 +6660,9 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
memset
(
data
,
0
,
2
);
data
[
0
]
=
65
;
rtp_session
->
recv_msg
.
heade
r
.
pt
=
rtp_session
->
cng_pt
!=
INVALID_PT
?
rtp_session
->
cng_pt
:
SWITCH_RTP_CNG_PAYLOAD
;
rtp_session
->
last_rtp_hd
r
.
pt
=
rtp_session
->
cng_pt
!=
INVALID_PT
?
rtp_session
->
cng_pt
:
SWITCH_RTP_CNG_PAYLOAD
;
*
flags
|=
SFF_CNG
;
*
payload_type
=
(
switch_payload_t
)
rtp_session
->
recv_msg
.
heade
r
.
pt
;
*
payload_type
=
(
switch_payload_t
)
rtp_session
->
last_rtp_hd
r
.
pt
;
ret
=
2
+
rtp_header_len
;
rtp_session
->
stats
.
inbound
.
skip_packet_count
++
;
goto
end
;
...
...
@@ -6679,8 +6702,8 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
return_cng_frame
();
}
if
(
rtp_session
->
flags
[
SWITCH_RTP_FLAG_GOOGLEHACK
]
&&
rtp_session
->
recv_msg
.
heade
r
.
pt
==
102
)
{
rtp_session
->
recv_msg
.
heade
r
.
pt
=
97
;
if
(
rtp_session
->
flags
[
SWITCH_RTP_FLAG_GOOGLEHACK
]
&&
rtp_session
->
last_rtp_hd
r
.
pt
==
102
)
{
rtp_session
->
last_rtp_hd
r
.
pt
=
97
;
}
break
;
...
...
@@ -6694,7 +6717,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
}
if
(
switch_rtp_ready
(
rtp_session
))
{
*
payload_type
=
(
switch_payload_t
)
rtp_session
->
recv_msg
.
heade
r
.
pt
;
*
payload_type
=
(
switch_payload_t
)
rtp_session
->
last_rtp_hd
r
.
pt
;
if
(
*
payload_type
==
SWITCH_RTP_CNG_PAYLOAD
)
{
*
flags
|=
SFF_CNG
;
...
...
@@ -7154,11 +7177,11 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
send_msg
->
header
.
ssrc
=
htonl
(
rtp_session
->
ssrc
);
if
(
rtp_session
->
flags
[
SWITCH_RTP_FLAG_GOOGLEHACK
]
&&
rtp_session
->
send_msg
.
header
.
pt
==
97
)
{
rtp_session
->
recv_msg
.
heade
r
.
pt
=
102
;
rtp_session
->
last_rtp_hd
r
.
pt
=
102
;
}
if
(
rtp_session
->
flags
[
SWITCH_RTP_FLAG_VAD
]
&&
rtp_session
->
recv_msg
.
heade
r
.
pt
==
rtp_session
->
vad_data
.
read_codec
->
implementation
->
ianacode
)
{
rtp_session
->
last_rtp_hd
r
.
pt
==
rtp_session
->
vad_data
.
read_codec
->
implementation
->
ianacode
)
{
int16_t
decoded
[
SWITCH_RECOMMENDED_BUFFER_SIZE
/
sizeof
(
int16_t
)]
=
{
0
};
uint32_t
rate
=
0
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论