[FFmpeg-devel] [PATCH 10/18] avformat/hls: add support for byte-ranged segments

Anssi Hannula anssi.hannula at iki.fi
Tue Dec 31 08:28:05 CET 2013


31.12.2013 08:30, Clément Bœsch kirjoitti:
> On Tue, Dec 31, 2013 at 05:13:03AM +0200, Anssi Hannula wrote:
>> 31.12.2013 05:05, Michael Niedermayer kirjoitti:
>>> On Mon, Dec 30, 2013 at 01:14:24PM +0200, Anssi Hannula wrote:
>>>> Add support for EXT-X-BYTERANGE added in HLS protocol v4.
>>>>
>>>> Signed-off-by: Anssi Hannula <anssi.hannula at iki.fi>
>>>> ---
>>>>  libavformat/hls.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
>>>>  1 file changed, 61 insertions(+), 2 deletions(-)
>>>>
>> [...]
>>>> @@ -635,8 +671,22 @@ static int open_input(HLSContext *c, struct playlist *pls)
>>>>      else
>>>>        ret = AVERROR(ENOSYS);
>>>>  
>>>> +    /* Seek to the requested position. If this was a HTTP request,
>>>> +     * the offset should already be there. */
>>>> +    if (ret == 0) {
>>>> +        int seekret = ffurl_seek(pls->input, seg->url_offset, SEEK_SET);
>>>> +        if (seekret < 0) {
>>>> +            av_log(pls->parent, AV_LOG_ERROR, "Unable to seek to offset %"PRId64" of HLS segment '%s'\n", seg->url_offset, seg->url);
>>>> +            ret = seekret;
>>>> +            ffurl_close(pls->input);
>>>> +            pls->input = NULL;
>>>> +        }
>>>> +    }
>>>
>>> maybe i misunderstand something but why do you need to seek if the
>>> offset was already provided to the protocol ?
>>
>> Well, in case the protocol is not HTTP. Of course that is indeed a bit
>> far-fetched as it is "HTTP Live Streaming" ;)
>>
>> This was useful for local testing without needing a HTTP server, though.
>> I'm not too heavily against removing it, but it doesn't really hurt
>> either so I kept it...
> 
> Does that mean a remote server can make you play local files?

Apparently yes, hls uses just ff_make_absolute_url() so the playlist can
just contain "file://local/file.ts".

The reverse is also true, playing a local HLS m3u8 file can cause remote
network requests.

Note that this applies to the deprecated hls protocol (hlsproto.c) as
well in addition to the current hls demuxer (hls.c).

-- 
Anssi Hannula


More information about the ffmpeg-devel mailing list