summaryrefslogtreecommitdiff
path: root/libavformat/hls.c
Commit message (Collapse)AuthorAge
* avformat/hls: refactor repeated HLS option updatesMicah Galizia2015-03-16
| | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* avformat/hls: store cookies returned in HLS key responseMicah Galizia2015-03-16
| | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* hls: detect SAMPLE-AES encryptionselsta2015-03-05
| | | | | | | | SAMPLE-AES encryption is not commonly used yet, but without this patch ffmpeg is thinking that the hls segments are not encrypted which produces broken files. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* hls: fix a null pointer dereferencewm42015-02-16
| | | | | | | | | Not allocating the pls->ctx will crash in libavformat/hls.c:1410, where it tries to dereference the field. Sample: http://ec24.rtp.pt/liverepeater/rtpn.smil/playlist.m3u8 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* avformat: Add and use ff_copy_whitelists()Michael Niedermayer2014-10-24
| | | | | | | Fixes potential security issue in case of running out of memory Found-by: ubitux Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* Merge commit '6df9d9b55d3f56ee7782639a7678eeeaf77f14ea'Michael Niedermayer2014-10-24
|\ | | | | | | | | | | | | | | | | | | | | * commit '6df9d9b55d3f56ee7782639a7678eeeaf77f14ea': lavf: Use av_gettime_relative Conflicts: libavformat/hls.c See: f78bc96b7c1c74caf99a7139cf81ce1110404965 Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * lavf: Use av_gettime_relativeMartin Storsjö2014-10-24
| | | | | | | | | | | | | | | | | | The ones left using av_gettime are NTP timestamps (for RTCP, which is specified to send the actual current realtime clock in RTCP SR packets), and the NUT muxer timestamper, which is documented as using wallclock time. Signed-off-by: Martin Storsjö <martin@martin.st>
* | avformat/hls: forward whitelists to mpegts demuxerMichael Niedermayer2014-10-23
| | | | | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | avformat/hls: use av_freep(), do not leave stale pointers in memoryMichael Niedermayer2014-10-07
| | | | | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | Use new av_dict_set_int helper function.Reimar Döffinger2014-08-16
| | | | | | | | | | | | | | Get rid of the many, slightly differing, implementations of basically the same thing. Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
* | replace calls to url_feof() with avio_feof()James Almer2014-08-08
| | | | | | | | | | Signed-off-by: James Almer <jamrial@gmail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | avformat/hls: reduce memory usage by using dynamically allocated url/keyMichael Schenk2014-04-12
| | | | | | | | Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: do not call ffurl_seek/ffurl_size on crypto protocolAnssi Hannula2014-04-11
| | | | | | | | | | | | | | | | | | | | ffurl_seek() will not work even when it should be a no-op, so do not call it on crypto protocol. Also replace use of ffurl_size() for the same reason. Reported-by: Michael Schenk <Michael.Schenk@albistechnologies.com> Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: support for seeking on event playlistsVladlen Y. Koshelev2014-04-06
| | | | | | | | | | This allows clients to seek between first played segment and the last one in the live stream playlist with #EXT-X-PLAYLIST-TYPE:EVENT attribute.
* | avformat/hls: flush the subdemuxer when seekingAnssi Hannula2014-04-06
| | | | | | | | | | | | | | | | Since we are basically seeking the AVIOContext under the subdemuxer, we need to flush the subdemuxer to avoid old packets from being read from the packet queue after the seek. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: properly take stream_index into account when seekingAnssi Hannula2014-04-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Properly take stream_index into account so that a keyframe will be looked for in the specified stream_index only. Similarly, only check timestamp validity against the specified stream_index. Also remove code for stream_index == -1 case which does not actually happen as it is handled by generic code. This is based on an initial patch by James Deng. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: open playlists immediately when AVDISCARD_ALL is droppedAnssi Hannula2014-04-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Do not try to delay opening newly required playlists until a segment switch. Applications expect that newly selected undiscarded streams are available immediately, especially with alternative rendition streams (selectable audio/subtitle tracks). One might think that delaying variant stream switch until a segment switch would allow a "seamless" switch without us having to download a specific segment from two different variant playlists. However, that is not the case, since the application would have to keep the previous stream available (undiscarded) until the first packet of the newly selected stream arrives, but by that time the demuxer would have already downloaded the next segment of both variants. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: factor identical playlist allocations out of parse_playlistAnssi Hannula2014-04-06
| | | | | | | | Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: do not use sequence numbers for packet orderingAnssi Hannula2014-04-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As per spec 3.4.3 ("A client MUST NOT assume that segments with the same sequence number in different Media Playlists contain matching content.") we cannot use sequence numbers for packet ordering. This can be seen e.g. in the subtitle streams of bipbop_16x9_variant.m3u8 that have considerably longer segments and therefore different numbering. Since the code now exclusively syncs using timestamps that may wrap, add some additional checking for that. According to the HLS spec all the timestamps should be in 33-bit MPEG format and synced together. v2: cleaner wrap detection v3: further wrap detection improvements Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: do not care about stream start timestampsAnssi Hannula2014-04-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | While selecting a packet to return to caller in read_packet(), the code corrects the timestamps for starting timestamps. However, this is wrong, since for live streams the initial timestamps might differ just because of the time delay between the retrieval of the various Media Playlists. Fortunately, spec 6.2.4 mandates that all variant streams must have matching timestamps, so we do not need to correct for initial timestamps. Drop the correction code. Note that ID3 timestamps were previously ignored, so this code was previously actually needed. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: avoid unnecessary segment retrievalsAnssi Hannula2014-04-06
| | | | | | | | | | | | | | Check if the playlist is still needed just before requesting the next segment instead of after exhausting the previous segment. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: improve segment selection when restarting list receptionAnssi Hannula2014-04-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Improve selection of the segment sequence number when restarting the reception of a playlist after it was suspended due to being unneeded (due to discard flags). The current code assumes that each playlist contains matching data with the same sequence number, while spec 3.4.3 specifically says that that is not the case. Often subtitle playlists also have longer target durations as well, causing the selection to be completely wrong. Instead prefer using the playlist segment duration information for non-live playlists, and other means if that is not possible. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: track seeking on a per-playlist basisAnssi Hannula2014-04-06
| | | | | | | | | | | | | | | | Seeking needs to be tracked on a per-playlist basis, since the resyncing code in hls_read_packet() has to sync each playlist to the seek timestamp instead of stopping after the first playlist has reached it. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: parse ID3 timestamps for elementary audio streamsAnssi Hannula2014-04-06
| | | | | | | | | | | | | | | | | | HLS provides MPEG TS timestamps via ID3 tags in the beginning of each segment of elementary audio streams. v2: fix issues with streams that have multiple ID3 tags Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: split read_from_url() out of read_data()Anssi Hannula2014-04-06
| | | | | | | | | | | | Useful for ID3 parsing. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: add some logging messagesAnssi Hannula2014-04-06
| | | | | | | | Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: add support for byte-ranged segmentsAnssi Hannula2014-04-06
| | | | | | | | | | | | | | | | | | Add support for EXT-X-BYTERANGE added in HLS protocol v4. v2: Better comment explaining ffurl_seek call and fix cur_seg_offset not being updated. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: always return EOF for unneeded playlist streamsAnssi Hannula2014-04-06
| | | | | | | | | | | | | | | | Even if we returned AVERROR_EOF previously due to playlist no longer being needed, we may still be called again, and we do not want to trigger a segment download in that case. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: add support for alternative renditionsAnssi Hannula2014-04-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | HLS protocol version 4 added alternative renditions to the specification (e.g. alternative audio tracks). The EXT-X-MEDIA tags can also contain metadata for "renditions" (i.e. tracks) of the main Media Playlist. Add support for those. Note that the same rendition (AVStream) may be associated with multiple variants (AVPrograms). Alternative subtitle tracks will require additional work and are therefore not enabled yet. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | avformat/hls: Fix cookies and user agent with encrypted HLS streamsMikael Finstad2014-01-28
| | | | | | | | | | | | | | Session data (cookies, user-agent) is not being sent on payload requests with encrypted HLS streams This causes services like Akamai to give a 403 forbidden when requesting the TS files, because they expect the same cookies and user-agent on all requests
* | avformat/hls: decouple playlists from variantsAnssi Hannula2014-01-03
| | | | | | | | | | | | | | | | | | | | | | | | Not all "sub-playlists" are variant playlists (containing the same content with a different bitrate, etc) in the current version of the HLS specification. They can now also be alternative renditions, containing e.g. alternative audio tracks etc. Decouple playlists from variants to prepare for handling the new features. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2013-11-22
|\| | | | | | | | | | | | | * qatar/master: hls: Avoid reading outside of the allocated array Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * hls: Avoid reading outside of the allocated arrayMartin Storsjö2013-11-22
| | | | | | | | | | CC: libav-stable@libav.org Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit '8c929098141ebc94ad3f303521c520bb3dc6d8f6'Michael Niedermayer2013-11-22
|\| | | | | | | | | | | | | * commit '8c929098141ebc94ad3f303521c520bb3dc6d8f6': hls: Check whether the AVIOContext contains a new redirected URL Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * hls: Check whether the AVIOContext contains a new redirected URLMartin Storsjö2013-11-22
| | | | | | | | | | | | | | This allows both the main playlist itself as well as the variant playlists to handle redirects combined with relative URLs. Signed-off-by: Martin Storsjö <martin@martin.st>
* | avformat/hls: fixed bug where custom http headers weren't kept for hls streamskowalsky2013-11-07
| | | | | | | | See: https://trac.ffmpeg.org/ticket/3024
* | avformat/hls: do not limit manifest lines to 1024 charsMichael Niedermayer2013-09-21
| | | | | | | | | | | | Fixes Ticket2976 Debuged-by: jaimeMF Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2013-07-31
|\| | | | | | | | | | | | | | | | | | | * qatar/master: hls: Call avformat_find_stream_info() on the chained demuxers Conflicts: libavformat/hls.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * hls: Call avformat_find_stream_info() on the chained demuxersMichael Niedermayer2013-07-30
| | | | | | | | | | | | | | | | | | This allows the chained demuxer (or more precisely, the lavf utility code) to better fill in timestamps on packets from these, especially for cases where one stream is a raw ADTS stream. Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit '06205b5efdcf0bc4c5463bfdd02f09b5f79fc4cd'Michael Niedermayer2013-07-30
|\| | | | | | | | | | | | | * commit '06205b5efdcf0bc4c5463bfdd02f09b5f79fc4cd': hls: Free packets when skipping packets when seeking Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * hls: Free packets when skipping packets when seekingMartin Storsjö2013-07-29
| | | | | | | | | | | | This fixes memory leaks present since 2b3d041cdc. Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit 'c44191039944526dd7eb6e536990b555837961f5'Michael Niedermayer2013-07-30
|\| | | | | | | | | | | | | | | | | | | * commit 'c44191039944526dd7eb6e536990b555837961f5': hls: Store all durations in AV_TIME_BASE Conflicts: libavformat/hls.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * hls: Store all durations in AV_TIME_BASEMartin Storsjö2013-07-29
| | | | | | | | | | | | | | | | | | Also parse segment durations as floating point, which is allowed since HLS version 3. This is based on a patch by Zhang Rui. Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit 'e1d5b244761cf69db655ad7ece1dbf2c13dd4fce'Michael Niedermayer2013-07-30
|\| | | | | | | | | | | | | | | | | | | * commit 'e1d5b244761cf69db655ad7ece1dbf2c13dd4fce': hls: Store first_timestamp in units of AV_TIME_BASE Conflicts: libavformat/hls.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * hls: Store first_timestamp in units of AV_TIME_BASEMartin Storsjö2013-07-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When first_timestamp was stored as-is, its actual time base wasn't known later in the seek function. Additionally, the logic (from 795d9594cfa) for scaling it based on stream_index is flawed - stream_index in the seek function only specifies which stream the seek timestamp refers to, but obviously doesn't say anything about which stream first_timestamp belongs to. In the cases where stream_index was >= 0 and all streams had the same time base, this didn't matter in practice. Seeking taking first_timestamp into account is problematic when one variant is mpegts (with real timestamps) and one variant is raw ADTS (with timestamps only being accumulated packet duration), where the variants start at totally different timestamps. Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2013-07-29
|\| | | | | | | | | | | | | | | | | | | | | * qatar/master: hls: Create an AVProgram for each variant Conflicts: libavformat/hls.c See: 23db5418ed2ebaddbbc57a45b81caa6e94724587 Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * hls: Create an AVProgram for each variantLYF2013-07-29
| | | | | | | | | | | | | | | | | | Without the information, an application may choose audio from one variant and video from another variant, which leads to fetching two variants from the network. This enables av_find_best_stream() to find matching audio and video streams, so that only one variant is fetched. Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit '9d64f236292ba28018dd9afd2d57f8f944b33f81'Michael Niedermayer2013-07-29
|\| | | | | | | | | | | | | | | | | | | * commit '9d64f236292ba28018dd9afd2d57f8f944b33f81': hls: Respect the different stream time bases when comparing dts Conflicts: libavformat/hls.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * hls: Respect the different stream time bases when comparing dtsMichael Niedermayer2013-07-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also adjust the streams timestamps according to their start timestamp when comparing. This helps getting correctly interleaved packets if one stream lacks timestamps (such as a plain ADTS stream when the other variants are full mpegts) when the others have timestamps that don't start from zero. This probably doesn't work properly if such a stream is temporarily disabled (via the discard flags) and then reenabled, and such streams are hard to correctly sync against the other streams as well - but this works better than before at least. The segment number restriction makes sure all variants advance roughly at the same pace as well. Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit 'c11e33a3d9665dd1fc5dbdecdd03a4860ac6a622'Michael Niedermayer2013-07-29
|\| | | | | | | | | | | | | | | | | | | * commit 'c11e33a3d9665dd1fc5dbdecdd03a4860ac6a622': hls: Set stream offset before opening a chained demuxer Conflicts: libavformat/hls.c Merged-by: Michael Niedermayer <michaelni@gmx.at>