summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/httplive
diff options
context:
space:
mode:
authorMartin Storsjo <martin@martin.st>2013-11-22 17:57:31 +0200
committerMartin Storsjo <martin@martin.st>2014-01-10 11:43:10 +0200
commit784faaf1d76902be6b36d3af01fb5325f0d45a04 (patch)
treed54037bc0a62d6192cfdca0279c8377174299c18 /media/libstagefright/httplive
parent0c9045e42eebdfcfeb1d372e932f043bb99f7ad9 (diff)
downloadframeworks_av-784faaf1d76902be6b36d3af01fb5325f0d45a04.zip
frameworks_av-784faaf1d76902be6b36d3af01fb5325f0d45a04.tar.gz
frameworks_av-784faaf1d76902be6b36d3af01fb5325f0d45a04.tar.bz2
LiveSession: Use the actual, possibly redirected url as base in the M3U
This fixes playback of HLS streams where the M3U playlists use relative paths and the main playlist is opened via a redirect. Change-Id: I787e1c050daddc566be4c8e3f84803d3f91eec46
Diffstat (limited to 'media/libstagefright/httplive')
-rw-r--r--media/libstagefright/httplive/LiveSession.cpp14
-rw-r--r--media/libstagefright/httplive/LiveSession.h3
2 files changed, 13 insertions, 4 deletions
diff --git a/media/libstagefright/httplive/LiveSession.cpp b/media/libstagefright/httplive/LiveSession.cpp
index bd12ddc..d4fd2b3 100644
--- a/media/libstagefright/httplive/LiveSession.cpp
+++ b/media/libstagefright/httplive/LiveSession.cpp
@@ -514,7 +514,8 @@ sp<PlaylistFetcher> LiveSession::addFetcher(const char *uri) {
status_t LiveSession::fetchFile(
const char *url, sp<ABuffer> *out,
- int64_t range_offset, int64_t range_length) {
+ int64_t range_offset, int64_t range_length,
+ String8 *actualUrl) {
*out = NULL;
sp<DataSource> source;
@@ -599,6 +600,12 @@ status_t LiveSession::fetchFile(
}
*out = buffer;
+ if (actualUrl != NULL) {
+ *actualUrl = source->getUri();
+ if (actualUrl->isEmpty()) {
+ *actualUrl = url;
+ }
+ }
return OK;
}
@@ -610,7 +617,8 @@ sp<M3UParser> LiveSession::fetchPlaylist(
*unchanged = false;
sp<ABuffer> buffer;
- status_t err = fetchFile(url, &buffer);
+ String8 actualUrl;
+ status_t err = fetchFile(url, &buffer, 0, -1, &actualUrl);
if (err != OK) {
return NULL;
@@ -644,7 +652,7 @@ sp<M3UParser> LiveSession::fetchPlaylist(
#endif
sp<M3UParser> playlist =
- new M3UParser(url, buffer->data(), buffer->size());
+ new M3UParser(actualUrl.string(), buffer->data(), buffer->size());
if (playlist->initCheck() != OK) {
ALOGE("failed to parse .m3u8 playlist");
diff --git a/media/libstagefright/httplive/LiveSession.h b/media/libstagefright/httplive/LiveSession.h
index 99b480a8..8f6a4ea 100644
--- a/media/libstagefright/httplive/LiveSession.h
+++ b/media/libstagefright/httplive/LiveSession.h
@@ -147,7 +147,8 @@ private:
status_t fetchFile(
const char *url, sp<ABuffer> *out,
- int64_t range_offset = 0, int64_t range_length = -1);
+ int64_t range_offset = 0, int64_t range_length = -1,
+ String8 *actualUrl = NULL);
sp<M3UParser> fetchPlaylist(
const char *url, uint8_t *curPlaylistHash, bool *unchanged);