Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-1.1
Commits
4d269a64
Commit
4d269a64
authored
Dec 20, 2009
by
Pierre Ynard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rtp sout: safer numbering of RTSP tracks
parent
ea9810b5
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
22 additions
and
38 deletions
+22
-38
modules/stream_out/rtp.c
modules/stream_out/rtp.c
+2
-21
modules/stream_out/rtp.h
modules/stream_out/rtp.h
+1
-2
modules/stream_out/rtsp.c
modules/stream_out/rtsp.c
+19
-15
No files found.
modules/stream_out/rtp.c
View file @
4d269a64
...
...
@@ -683,7 +683,7 @@ static void SDPHandleUrl( sout_stream_t *p_stream, const char *psz_url )
if
(
p_sys
->
p_mux
!=
NULL
)
{
sout_stream_id_t
*
id
=
p_sys
->
es
[
0
];
id
->
rtsp_id
=
RtspAddId
(
p_sys
->
rtsp
,
id
,
0
,
GetDWBE
(
id
->
ssrc
),
id
->
rtsp_id
=
RtspAddId
(
p_sys
->
rtsp
,
id
,
GetDWBE
(
id
->
ssrc
),
p_sys
->
psz_destination
,
p_sys
->
i_ttl
,
id
->
i_port
,
id
->
i_port
+
1
);
}
...
...
@@ -1339,7 +1339,7 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
id
->
i_ts_offset
=
rtp_compute_ts
(
id
,
p_sys
->
i_pts_offset
);
if
(
p_sys
->
rtsp
!=
NULL
)
id
->
rtsp_id
=
RtspAddId
(
p_sys
->
rtsp
,
id
,
p_sys
->
i_es
,
id
->
rtsp_id
=
RtspAddId
(
p_sys
->
rtsp
,
id
,
GetDWBE
(
id
->
ssrc
),
p_sys
->
psz_destination
,
p_sys
->
i_ttl
,
id
->
i_port
,
id
->
i_port
+
1
);
...
...
@@ -1740,25 +1740,6 @@ int64_t rtp_get_ts( const sout_stream_t *p_stream )
return
p_sys
->
i_pts_zero
+
(
now
-
i_npt_zero
);
}
/* FIXME: this is pretty bad - if we remove and then insert an ES
* the number will get unsynched from inside RTSP */
unsigned
rtp_get_num
(
const
sout_stream_id_t
*
id
)
{
sout_stream_sys_t
*
p_sys
=
id
->
p_stream
->
p_sys
;
int
i
;
vlc_mutex_lock
(
&
p_sys
->
lock_es
);
for
(
i
=
0
;
i
<
p_sys
->
i_es
;
i
++
)
{
if
(
id
==
p_sys
->
es
[
i
]
)
break
;
}
vlc_mutex_unlock
(
&
p_sys
->
lock_es
);
return
i
;
}
void
rtp_packetize_common
(
sout_stream_id_t
*
id
,
block_t
*
out
,
int
b_marker
,
int64_t
i_pts
)
{
...
...
modules/stream_out/rtp.h
View file @
4d269a64
...
...
@@ -29,7 +29,7 @@ rtsp_stream_t *RtspSetup( sout_stream_t *p_stream, const vlc_url_t *url );
void
RtspUnsetup
(
rtsp_stream_t
*
rtsp
);
rtsp_stream_id_t
*
RtspAddId
(
rtsp_stream_t
*
rtsp
,
sout_stream_id_t
*
sid
,
u
nsigned
i
,
u
int32_t
ssrc
,
uint32_t
ssrc
,
const
char
*
dst
,
int
ttl
,
unsigned
loport
,
unsigned
hiport
);
void
RtspDelId
(
rtsp_stream_t
*
rtsp
,
rtsp_stream_id_t
*
);
...
...
@@ -41,7 +41,6 @@ int rtp_add_sink( sout_stream_id_t *id, int fd, bool rtcp_mux, uint16_t *seq );
void
rtp_del_sink
(
sout_stream_id_t
*
id
,
int
fd
);
uint16_t
rtp_get_seq
(
sout_stream_id_t
*
id
);
int64_t
rtp_get_ts
(
const
sout_stream_t
*
p_stream
);
unsigned
rtp_get_num
(
const
sout_stream_id_t
*
id
);
/* RTP packetization */
void
rtp_packetize_common
(
sout_stream_id_t
*
id
,
block_t
*
out
,
...
...
modules/stream_out/rtsp.c
View file @
4d269a64
...
...
@@ -53,6 +53,7 @@ struct rtsp_stream_t
httpd_url_t
*
url
;
char
*
psz_path
;
const
char
*
track_fmt
;
unsigned
track_id
;
unsigned
port
;
int
sessionc
;
...
...
@@ -84,6 +85,7 @@ rtsp_stream_t *RtspSetup( sout_stream_t *p_stream, const vlc_url_t *url )
rtsp
->
host
=
NULL
;
rtsp
->
url
=
NULL
;
rtsp
->
psz_path
=
NULL
;
rtsp
->
track_id
=
0
;
vlc_mutex_init
(
&
rtsp
->
lock
);
rtsp
->
port
=
(
url
->
i_port
>
0
)
?
url
->
i_port
:
554
;
...
...
@@ -150,6 +152,7 @@ struct rtsp_stream_id_t
httpd_url_t
*
url
;
const
char
*
dst
;
int
ttl
;
unsigned
track_id
;
uint32_t
ssrc
;
uint16_t
loport
,
hiport
;
};
...
...
@@ -172,14 +175,14 @@ struct rtsp_session_t
/* Unicast session track */
struct
rtsp_strack_t
{
sout
_stream_id_t
*
id
;
rtsp
_stream_id_t
*
id
;
int
fd
;
bool
playing
;
};
rtsp_stream_id_t
*
RtspAddId
(
rtsp_stream_t
*
rtsp
,
sout_stream_id_t
*
sid
,
u
nsigned
num
,
u
int32_t
ssrc
,
uint32_t
ssrc
,
/* Multicast stuff - TODO: cleanup */
const
char
*
dst
,
int
ttl
,
unsigned
loport
,
unsigned
hiport
)
...
...
@@ -193,6 +196,7 @@ rtsp_stream_id_t *RtspAddId( rtsp_stream_t *rtsp, sout_stream_id_t *sid,
id
->
stream
=
rtsp
;
id
->
sout_id
=
sid
;
id
->
track_id
=
rtsp
->
track_id
;
id
->
ssrc
=
ssrc
;
/* TODO: can we assume that this need not be strdup'd? */
id
->
dst
=
dst
;
...
...
@@ -203,9 +207,8 @@ rtsp_stream_id_t *RtspAddId( rtsp_stream_t *rtsp, sout_stream_id_t *sid,
id
->
hiport
=
hiport
;
}
/* FIXME: num screws up if any ES has been removed and re-added */
snprintf
(
urlbuf
,
sizeof
(
urlbuf
),
rtsp
->
track_fmt
,
rtsp
->
psz_path
,
num
);
id
->
track_id
);
msg_Dbg
(
rtsp
->
owner
,
"RTSP: adding %s"
,
urlbuf
);
url
=
id
->
url
=
httpd_UrlNewUnique
(
rtsp
->
host
,
urlbuf
,
NULL
,
NULL
,
NULL
);
...
...
@@ -222,6 +225,8 @@ rtsp_stream_id_t *RtspAddId( rtsp_stream_t *rtsp, sout_stream_id_t *sid,
httpd_UrlCatch
(
url
,
HTTPD_MSG_GETPARAMETER
,
RtspCallbackId
,
(
void
*
)
id
);
httpd_UrlCatch
(
url
,
HTTPD_MSG_TEARDOWN
,
RtspCallbackId
,
(
void
*
)
id
);
rtsp
->
track_id
++
;
return
id
;
}
...
...
@@ -235,7 +240,7 @@ void RtspDelId( rtsp_stream_t *rtsp, rtsp_stream_id_t *id )
for
(
int
j
=
0
;
j
<
ses
->
trackc
;
j
++
)
{
if
(
ses
->
trackv
[
j
].
id
==
id
->
sout_id
)
if
(
ses
->
trackv
[
j
].
id
==
id
)
{
rtsp_strack_t
*
tr
=
ses
->
trackv
+
j
;
net_Close
(
tr
->
fd
);
...
...
@@ -303,7 +308,7 @@ void RtspClientDel( rtsp_stream_t *rtsp, rtsp_session_t *session )
TAB_REMOVE
(
rtsp
->
sessionc
,
rtsp
->
sessionv
,
session
);
for
(
i
=
0
;
i
<
session
->
trackc
;
i
++
)
rtp_del_sink
(
session
->
trackv
[
i
].
id
,
session
->
trackv
[
i
].
fd
);
rtp_del_sink
(
session
->
trackv
[
i
].
id
->
sout_id
,
session
->
trackv
[
i
].
fd
);
free
(
session
->
trackv
);
free
(
session
);
...
...
@@ -537,7 +542,7 @@ static int RtspHandler( rtsp_stream_t *rtsp, rtsp_stream_id_t *id,
{
char
ip
[
NI_MAXNUMERICHOST
],
src
[
NI_MAXNUMERICHOST
];
rtsp_session_t
*
ses
=
NULL
;
rtsp_strack_t
track
=
{
id
->
sout_id
,
-
1
,
false
};
rtsp_strack_t
track
=
{
id
,
-
1
,
false
};
int
sport
;
if
(
httpd_ClientIP
(
cl
,
ip
)
==
NULL
)
...
...
@@ -646,22 +651,21 @@ static int RtspHandler( rtsp_stream_t *rtsp, rtsp_stream_id_t *id,
for
(
int
i
=
0
;
i
<
ses
->
trackc
;
i
++
)
{
rtsp_strack_t
*
tr
=
ses
->
trackv
+
i
;
if
(
(
id
==
NULL
)
||
(
tr
->
id
==
id
->
sout_id
)
)
if
(
(
id
==
NULL
)
||
(
tr
->
id
==
id
)
)
{
uint16_t
seq
;
if
(
!
tr
->
playing
)
{
tr
->
playing
=
true
;
rtp_add_sink
(
tr
->
id
,
tr
->
fd
,
false
,
&
seq
);
rtp_add_sink
(
tr
->
id
->
sout_id
,
tr
->
fd
,
false
,
&
seq
);
}
else
seq
=
rtp_get_seq
(
tr
->
id
);
seq
=
rtp_get_seq
(
tr
->
id
->
sout_id
);
infolen
+=
sprintf
(
info
+
infolen
,
"url=%s/trackID=%u;seq=%u;rtptime=%u, "
,
control
,
rtp_get_num
(
tr
->
id
),
seq
,
rtp_compute_ts
(
tr
->
id
,
ts
)
);
control
,
tr
->
id
->
track_id
,
seq
,
rtp_compute_ts
(
tr
->
id
->
sout_id
,
ts
)
);
}
}
if
(
infolen
>
0
)
...
...
@@ -712,7 +716,7 @@ static int RtspHandler( rtsp_stream_t *rtsp, rtsp_stream_id_t *id,
else
/* Delete one track from the session */
for
(
int
i
=
0
;
i
<
ses
->
trackc
;
i
++
)
{
if
(
ses
->
trackv
[
i
].
id
==
id
->
sout_id
)
if
(
ses
->
trackv
[
i
].
id
==
id
)
{
rtp_del_sink
(
id
->
sout_id
,
ses
->
trackv
[
i
].
fd
);
REMOVE_ELEM
(
ses
->
trackv
,
ses
->
trackc
,
i
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment