Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
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
Commits
d781f87d
Commit
d781f87d
authored
Jul 22, 2012
by
Chris Smowton
Committed by
Jean-Baptiste Kempf
Jul 22, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
HLS: Housekeeping
Signed-off-by:
Jean-Baptiste Kempf
<
jb@videolan.org
>
parent
59e5b9a5
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
16 additions
and
24 deletions
+16
-24
modules/stream_filter/httplive.c
modules/stream_filter/httplive.c
+16
-24
No files found.
modules/stream_filter/httplive.c
View file @
d781f87d
...
@@ -1271,8 +1271,9 @@ static int get_HTTPLiveMetaPlaylist(stream_t *s, vlc_array_t **streams)
...
@@ -1271,8 +1271,9 @@ static int get_HTTPLiveMetaPlaylist(stream_t *s, vlc_array_t **streams)
return
err
;
return
err
;
}
}
/* Reload playlist */
/* Update hls_old (an existing member of p_sys->hls_stream) to match hls_new
static
int
hls_UpdatePlaylist
(
stream_t
*
s
,
hls_stream_t
*
hls_new
,
hls_stream_t
**
hls
)
(which represents a downloaded, perhaps newer version of the same playlist) */
static
int
hls_UpdatePlaylist
(
stream_t
*
s
,
hls_stream_t
*
hls_new
,
hls_stream_t
*
hls_old
)
{
{
int
count
=
vlc_array_count
(
hls_new
->
segments
);
int
count
=
vlc_array_count
(
hls_new
->
segments
);
...
@@ -1284,8 +1285,7 @@ static int hls_UpdatePlaylist(stream_t *s, hls_stream_t *hls_new, hls_stream_t *
...
@@ -1284,8 +1285,7 @@ static int hls_UpdatePlaylist(stream_t *s, hls_stream_t *hls_new, hls_stream_t *
segment_t
*
p
=
segment_GetSegment
(
hls_new
,
n
);
segment_t
*
p
=
segment_GetSegment
(
hls_new
,
n
);
if
(
p
==
NULL
)
return
VLC_EGENERIC
;
if
(
p
==
NULL
)
return
VLC_EGENERIC
;
vlc_mutex_lock
(
&
(
*
hls
)
->
lock
);
segment_t
*
segment
=
segment_Find
(
hls_old
,
p
->
sequence
);
segment_t
*
segment
=
segment_Find
(
*
hls
,
p
->
sequence
);
if
(
segment
)
if
(
segment
)
{
{
vlc_mutex_lock
(
&
segment
->
lock
);
vlc_mutex_lock
(
&
segment
->
lock
);
...
@@ -1331,32 +1331,29 @@ static int hls_UpdatePlaylist(stream_t *s, hls_stream_t *hls_new, hls_stream_t *
...
@@ -1331,32 +1331,29 @@ static int hls_UpdatePlaylist(stream_t *s, hls_stream_t *hls_new, hls_stream_t *
}
}
else
else
{
{
int
last
=
vlc_array_count
(
(
*
hls
)
->
segments
)
-
1
;
int
last
=
vlc_array_count
(
hls_old
->
segments
)
-
1
;
segment_t
*
l
=
segment_GetSegment
(
*
hls
,
last
);
segment_t
*
l
=
segment_GetSegment
(
hls_old
,
last
);
if
(
l
==
NULL
)
goto
fail_and_unlock
;
if
(
l
==
NULL
)
assert
(
0
)
;
if
((
l
->
sequence
+
1
)
!=
p
->
sequence
)
if
((
l
->
sequence
+
1
)
!=
p
->
sequence
)
{
{
msg_Err
(
s
,
"gap in sequence numbers found: new=%d expected %d"
,
msg_Err
(
s
,
"gap in sequence numbers found: new=%d expected %d"
,
p
->
sequence
,
l
->
sequence
+
1
);
p
->
sequence
,
l
->
sequence
+
1
);
}
}
vlc_array_append
(
(
*
hls
)
->
segments
,
p
);
vlc_array_append
(
hls_old
->
segments
,
p
);
msg_Info
(
s
,
"- segment %d appended"
,
p
->
sequence
);
msg_Info
(
s
,
"- segment %d appended"
,
p
->
sequence
);
}
}
vlc_mutex_unlock
(
&
(
*
hls
)
->
lock
);
}
}
/* update meta information */
/* update meta information */
vlc_mutex_lock
(
&
(
*
hls
)
->
lock
);
hls_old
->
sequence
=
hls_new
->
sequence
;
(
*
hls
)
->
sequence
=
hls_new
->
sequence
;
hls_old
->
duration
=
(
hls_new
->
duration
==
-
1
)
?
hls_old
->
duration
:
hls_new
->
duration
;
(
*
hls
)
->
duration
=
(
hls_new
->
duration
==
-
1
)
?
(
*
hls
)
->
duration
:
hls_new
->
duration
;
hls_old
->
b_cache
=
hls_new
->
b_cache
;
(
*
hls
)
->
b_cache
=
hls_new
->
b_cache
;
vlc_mutex_unlock
(
&
hls_old
->
lock
);
vlc_mutex_unlock
(
&
(
*
hls
)
->
lock
);
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
fail_and_unlock:
fail_and_unlock:
assert
(
0
);
vlc_mutex_unlock
(
&
hls_old
->
lock
);
vlc_mutex_unlock
(
&
(
*
hls
)
->
lock
);
return
VLC_EGENERIC
;
return
VLC_EGENERIC
;
}
}
...
@@ -1400,7 +1397,7 @@ static int hls_ReloadPlaylist(stream_t *s)
...
@@ -1400,7 +1397,7 @@ static int hls_ReloadPlaylist(stream_t *s)
msg_Info
(
s
,
"new HLS stream appended (id=%d, bandwidth=%"
PRIu64
")"
,
msg_Info
(
s
,
"new HLS stream appended (id=%d, bandwidth=%"
PRIu64
")"
,
hls_new
->
id
,
hls_new
->
bandwidth
);
hls_new
->
id
,
hls_new
->
bandwidth
);
}
}
else
if
(
hls_UpdatePlaylist
(
s
,
hls_new
,
&
hls_old
)
!=
VLC_SUCCESS
)
else
if
(
hls_UpdatePlaylist
(
s
,
hls_new
,
hls_old
)
!=
VLC_SUCCESS
)
msg_Info
(
s
,
"failed updating HLS stream (id=%d, bandwidth=%"
PRIu64
")"
,
msg_Info
(
s
,
"failed updating HLS stream (id=%d, bandwidth=%"
PRIu64
")"
,
hls_new
->
id
,
hls_new
->
bandwidth
);
hls_new
->
id
,
hls_new
->
bandwidth
);
}
}
...
@@ -1463,7 +1460,7 @@ static int hls_DownloadSegmentData(stream_t *s, hls_stream_t *hls, segment_t *se
...
@@ -1463,7 +1460,7 @@ static int hls_DownloadSegmentData(stream_t *s, hls_stream_t *hls, segment_t *se
int
estimated
=
(
int
)(
size
/
p_sys
->
bandwidth
);
int
estimated
=
(
int
)(
size
/
p_sys
->
bandwidth
);
if
(
estimated
>
segment
->
duration
)
if
(
estimated
>
segment
->
duration
)
{
{
msg_Warn
(
s
,
"downloading
of segment %d takes %ds, which is longer than its playback
(%ds)"
,
msg_Warn
(
s
,
"downloading
segment %d predicted to take %ds, which exceeds its length
(%ds)"
,
segment
->
sequence
,
estimated
,
segment
->
duration
);
segment
->
sequence
,
estimated
,
segment
->
duration
);
}
}
}
}
...
@@ -1471,7 +1468,7 @@ static int hls_DownloadSegmentData(stream_t *s, hls_stream_t *hls, segment_t *se
...
@@ -1471,7 +1468,7 @@ static int hls_DownloadSegmentData(stream_t *s, hls_stream_t *hls, segment_t *se
mtime_t
start
=
mdate
();
mtime_t
start
=
mdate
();
if
(
hls_Download
(
s
,
segment
)
!=
VLC_SUCCESS
)
if
(
hls_Download
(
s
,
segment
)
!=
VLC_SUCCESS
)
{
{
msg_Err
(
s
,
"download
ed
segment %d from stream %d failed"
,
msg_Err
(
s
,
"download
ing
segment %d from stream %d failed"
,
segment
->
sequence
,
*
cur_stream
);
segment
->
sequence
,
*
cur_stream
);
vlc_mutex_unlock
(
&
segment
->
lock
);
vlc_mutex_unlock
(
&
segment
->
lock
);
return
VLC_EGENERIC
;
return
VLC_EGENERIC
;
...
@@ -1924,11 +1921,6 @@ static int Open(vlc_object_t *p_this)
...
@@ -1924,11 +1921,6 @@ static int Open(vlc_object_t *p_this)
/* manage encryption key if needed */
/* manage encryption key if needed */
hls_ManageSegmentKeys
(
s
,
hls_Get
(
p_sys
->
hls_stream
,
current
));
hls_ManageSegmentKeys
(
s
,
hls_Get
(
p_sys
->
hls_stream
,
current
));
if
(
p_sys
->
b_live
&&
(
p_sys
->
playback
.
segment
<
0
))
{
msg_Warn
(
s
,
"less data than 3 times 'target duration' available for live playback, playback may stall"
);
}
if
(
Prefetch
(
s
,
&
current
)
!=
VLC_SUCCESS
)
if
(
Prefetch
(
s
,
&
current
)
!=
VLC_SUCCESS
)
{
{
msg_Err
(
s
,
"fetching first segment failed."
);
msg_Err
(
s
,
"fetching first segment failed."
);
...
...
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