Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
29db7c3a
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
29db7c3a
编写于
1月 05, 2011
作者:
M
Martin Storsjö
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rtsp: Parse RTP-Info headers
Originally committed as revision 26236 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
4cb06874
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
59 addition
and
0 deletion
+59
-0
libavformat/rtsp.c
libavformat/rtsp.c
+59
-0
未找到文件。
libavformat/rtsp.c
浏览文件 @
29db7c3a
...
...
@@ -684,6 +684,61 @@ static void rtsp_parse_transport(RTSPMessageHeader *reply, const char *p)
}
}
static
void
handle_rtp_info
(
RTSPState
*
rt
,
const
char
*
url
,
uint32_t
seq
,
uint32_t
rtptime
)
{
int
i
;
if
(
!
rtptime
||
!
url
[
0
])
return
;
if
(
rt
->
transport
!=
RTSP_TRANSPORT_RTP
)
return
;
for
(
i
=
0
;
i
<
rt
->
nb_rtsp_streams
;
i
++
)
{
RTSPStream
*
rtsp_st
=
rt
->
rtsp_streams
[
i
];
RTPDemuxContext
*
rtpctx
=
rtsp_st
->
transport_priv
;
if
(
!
rtpctx
)
continue
;
if
(
!
strcmp
(
rtsp_st
->
control_url
,
url
))
{
rtpctx
->
base_timestamp
=
rtptime
;
break
;
}
}
}
static
void
rtsp_parse_rtp_info
(
RTSPState
*
rt
,
const
char
*
p
)
{
int
read
=
0
;
char
key
[
20
],
value
[
1024
],
url
[
1024
]
=
""
;
uint32_t
seq
=
0
,
rtptime
=
0
;
for
(;;)
{
p
+=
strspn
(
p
,
SPACE_CHARS
);
if
(
!*
p
)
break
;
get_word_sep
(
key
,
sizeof
(
key
),
"="
,
&
p
);
if
(
*
p
!=
'='
)
break
;
p
++
;
get_word_sep
(
value
,
sizeof
(
value
),
";, "
,
&
p
);
read
++
;
if
(
!
strcmp
(
key
,
"url"
))
av_strlcpy
(
url
,
value
,
sizeof
(
url
));
else
if
(
!
strcmp
(
key
,
"seq"
))
seq
=
strtol
(
value
,
NULL
,
10
);
else
if
(
!
strcmp
(
key
,
"rtptime"
))
rtptime
=
strtol
(
value
,
NULL
,
10
);
if
(
*
p
==
','
)
{
handle_rtp_info
(
rt
,
url
,
seq
,
rtptime
);
url
[
0
]
=
'\0'
;
seq
=
rtptime
=
0
;
read
=
0
;
}
if
(
*
p
)
p
++
;
}
if
(
read
>
0
)
handle_rtp_info
(
rt
,
url
,
seq
,
rtptime
);
}
void
ff_rtsp_parse_line
(
RTSPMessageHeader
*
reply
,
const
char
*
buf
,
RTSPState
*
rt
,
const
char
*
method
)
{
...
...
@@ -728,6 +783,10 @@ void ff_rtsp_parse_line(RTSPMessageHeader *reply, const char *buf,
p
+=
strspn
(
p
,
SPACE_CHARS
);
if
(
method
&&
!
strcmp
(
method
,
"DESCRIBE"
))
av_strlcpy
(
rt
->
control_uri
,
p
,
sizeof
(
rt
->
control_uri
));
}
else
if
(
av_stristart
(
p
,
"RTP-Info:"
,
&
p
)
&&
rt
)
{
p
+=
strspn
(
p
,
SPACE_CHARS
);
if
(
method
&&
!
strcmp
(
method
,
"PLAY"
))
rtsp_parse_rtp_info
(
rt
,
p
);
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录