avformat/hls: add http_multiple option
authorAman Gupta <aman@tmm1.net>
Tue, 12 Dec 2017 23:25:46 +0000 (15:25 -0800)
committerAman Gupta <aman@tmm1.net>
Fri, 22 Dec 2017 22:42:50 +0000 (14:42 -0800)
commit1f0eaa02aa7141f371e095540ac285698a0bdf46
tree7f42dc170ae1aeb630085326aa00dc038b486ab0
parent03765aa6fa9c519571586db87d4dade1102c4c86
avformat/hls: add http_multiple option

This improves network throughput of the hls demuxer by avoiding
the latency introduced by downloading segments one at a time.

The problem is particularly noticable over high-latency network
connections: for instance, if RTT is 250ms, there will a 250ms idle
period between when one segment response is read and the next one
starts.

The obvious solution to this is to use HTTP pipelining, where a
second request can be sent (on the persistent http/1.1 connection)
before the first response is fully read. Unfortunately the way the
http protocol is implemented in avformat makes implementing pipleining
very complex.

Instead, this commit simulates pipelining using two separate persistent
http connections. This has the advantage of working independently of
the http_persistent option, and can be used with http/1.0 servers as
well. The pair of connections is swapped every time a new segment starts
downloading, and a request for the next segment is sent on the secondary
connection right away. This means the second response will be ready and
waiting by the time the current response is fully read.

Signed-off-by: Aman Gupta <aman@tmm1.net>
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
doc/demuxers.texi
libavformat/hls.c