summaryrefslogtreecommitdiff
path: root/libavformat/http.c
Commit message (Collapse)AuthorAge
* libavformat/http: return EIO when ffurl_read return 0, but s->off < target_endraymondzheng2017-06-09
| | | | | Approved-by: "Ronald S. Bultje" <rsbultje@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* libavformat/http: Ignore expired cookiesMicah Galizia2017-05-01
| | | | | Signed-off-by: Micah Galizia <micahgalizia@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* HTTP: improve performance by reducing forward seeksJoel Cunningham2017-02-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit optimizes HTTP performance by reducing forward seeks, instead favoring a read-ahead and discard on the current connection (referred to as a short seek) for seeks that are within a TCP window's worth of data. This improves performance because with TCP flow control, a window's worth of data will be in the local socket buffer already or in-flight from the sender once congestion control on the sender is fully utilizing the window. Note: this approach doesn't attempt to differentiate from a newly opened connection which may not be fully utilizing the window due to congestion control vs one that is. The receiver can't get at this information, so we assume worst case; that full window is in use (we did advertise it after all) and that data could be in-flight The previous behavior of closing the connection, then opening a new with a new HTTP range value results in a massive amounts of discarded and re-sent data when large TCP windows are used. This has been observed on MacOS/iOS which starts with an initial window of 256KB and grows up to 1MB depending on the bandwidth-product delay. When seeking within a window's worth of data and we close the connection, then open a new one within the same window's worth of data, we discard from the current offset till the end of the window. Then on the new connection the server ends up re-sending the previous data from new offset till the end of old window. Example (assumes full window utilization): TCP window size: 64KB Position: 32KB Forward seek position: 40KB * (Next window) 32KB |--------------| 96KB |---------------| 160KB * 40KB |---------------| 104KB Re-sent amount: 96KB - 40KB = 56KB For a real world test example, I have MP4 file of ~25MB, which ffplay only reads ~16MB and performs 177 seeks. With current ffmpeg, this results in 177 HTTP GETs and ~73MB worth of TCP data communication. With this patch, ffmpeg issues 4 HTTP GETs and 3 seeks for a total of ~22MB of TCP data communication. To support this feature, the short seek logic in avio_seek() has been extended to call a function to get the short seek threshold value. This callback has been plumbed to the URLProtocol structure, which now has infrastructure in HTTP and TCP to get the underlying receiver window size via SO_RCVBUF. If the underlying URL and protocol don't support returning a short seek threshold, the default s->short_seek_threshold is used This feature has been tested on Windows 7 and MacOS/iOS. Windows support is slightly complicated by the fact that when TCP window auto-tuning is enabled, SO_RCVBUF doesn't report the real window size, but it does if SO_RCVBUF was manually set (disabling auto-tuning). So we can only use this optimization on Windows in the later case Signed-off-by: Joel Cunningham <joel.cunningham@me.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avformat/http: Check for truncated buffers in http_connect()Michael Niedermayer2017-02-14
| | | | | | Reported-by: SleepProgger <security@gnutp.com> Reviewed-by: Steven Liu <lingjiujianke@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* http: move chunk handling from http_read_stream() to http_buf_read().Ronald S. Bultje2016-12-05
|
* http: make length/offset-related variables unsigned.Ronald S. Bultje2016-12-05
| | | | Fixes #5992, reported and found by Paul Cher <paulcher@icloud.com>.
* avformat/http: Fix #ifdef FF_API_HTTP_USER_AGENTMichael Niedermayer2016-09-17
| | | | Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* lavf/http: deprecate user-agent optionSteven Liu2016-09-17
|
* libavformat/http: add support for content_type option in listen modeMoritz Barsnick2016-08-14
| | | | | | | | | Instead of silently ignoring the content_type option in listen mode, apply its value to the provided "Content-Type:" header. Signed-off-by: Moritz Barsnick <barsnick@gmx.net> Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* libavformat/http: add support for headers option in listen modeMoritz Barsnick2016-08-12
| | | | | | | | Instead of silently ignoring the headers option in listen mode, use the provided headers. Signed-off-by: Moritz Barsnick <barsnick@gmx.net> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avformat/http: change seek_ret to int64Yuri Zats2016-06-16
| | | | | Reviewed-by: "Ronald S. Bultje" <rsbultje@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* Merge commit 'fab8156b2f30666adabe227b3d7712fd193873b1'Derek Buitenhuis2016-04-21
|\ | | | | | | | | | | | | * commit 'fab8156b2f30666adabe227b3d7712fd193873b1': avio: Copy URLContext generic options into child URLContexts Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
| * avio: Copy URLContext generic options into child URLContextsMartin Storsjö2016-03-24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since all URLContexts have the same AVOptions, such AVOptions will be applied on the outermost context only and removed from the dict, while they probably make sense on all contexts. This makes sure that rw_timeout gets propagated to the innermost URLContext (to make sure it gets passed to the tcp protocol, when opening a http connection for instance). Alternatively, such matching options would be kept in the dict and only removed after the ffurl_connect call. Signed-off-by: Martin Storsjö <martin@martin.st>
| * urlprotocol: receive a list of protocols from the callerAnton Khirnov2016-02-22
| | | | | | | | | | This way, the decisions about which protocols are available for use in any given situations can be delegated to the caller.
* | lavf/http: Add httpproxy to the default protocol whitelist.Carl Eugen Hoyos2016-03-14
| |
* | Use correct msvc type specifiers for ptrdiff_t and size_t.Carl Eugen Hoyos2016-03-09
| |
* | avformat: Add a protocol blacklisting APIDerek Buitenhuis2016-03-04
| | | | | | | | Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
* | Merge commit '2758cdedfb7ac61f8b5e4861f99218b6fd43491d'Derek Buitenhuis2016-02-29
|\| | | | | | | | | | | | | | | | | | | | | This commit also disables the async fate test, because it used internal APIs in a non-kosher way, which no longer exists. * commit '2758cdedfb7ac61f8b5e4861f99218b6fd43491d': lavf: reorganize URLProtocols Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
| * lavf: reorganize URLProtocolsAnton Khirnov2016-02-22
| | | | | | | | | | | | | | | | | | | | Instead of a linked list constructed at av_register_all(), store them in a constant array of pointers. Since no registration is necessary now, this removes some global state from lavf. This will also allow the urlprotocol layer caller to limit the available protocols in a simple and flexible way in the following commits.
* | avformat/http: add crypto to default whitlist to get encrypted HLS working ↵Schenk, Michael2016-02-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | again I think we missed the crypto in the default_whitelist in case of http. Otherwise encrypted HLS will fail with [hls,applehttp @ 0x2af39c00] playlist[0] open_input [http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=236000-14.ts], start_seq_no [1], cur_seq_no [14] [hls,applehttp @ 0x2af39c00] open_input curseqno [14] startseqno [1] [hls,applehttp @ 0x2af39c00] HLS request for url 'http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=236000-14.ts', offset 0, playlist 0 [NULL @ 0x2af3a200] KEY_AES_128 seg->key [http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans.key] pls->key_url [http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans.key] [hls,applehttp @ 0x2af39c00] open_input [KEY_AES_128] [hls,applehttp @ 0x2af39c00] : c->persistence [0] [hls,applehttp @ 0x2af39c00] : c->probing [1] [hls,applehttp @ 0x2af39c00] : pls->input [NULL] [hls,applehttp @ 0x2af39c00] using normal http path for URL [crypto+http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=236000-14.ts] [crypto @ 0x2aff7cc0] Protocol not on whitelist 'http,https,tls,rtp,tcp,udp! Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | Update demuxers and protocols for protocol whitelist supportMichael Niedermayer2016-02-02
| | | | | | | | | | Reviewed-by: Andreas Cadhalpun <andreas.cadhalpun@googlemail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | avformat/http: Added http_proxy optionJoel Holdsworth2015-12-27
| | | | | | | | Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | avformat: use AV_OPT_TYPE_BOOL in a bunch of placesClément Bœsch2015-12-04
| |
* | lavf/http: fix incorrect warning in range requestsRodger Combs2015-11-25
| |
* | avformat/http: Initialize .str based default for AV_OPT_TYPE_STRING typesMichael Niedermayer2015-10-31
| | | | | | | | Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | avformat/http: add reconnect_delay_max optionMichael Niedermayer2015-09-09
| | | | | | | | Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | avformat/http: exponentially delay reconnection to avoid flooding the serverMichael Niedermayer2015-09-07
| | | | | | | | | | Reviewed-by: Zhang Rui <bbcallen@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | avformat/http: Add reconnect_at_eof and reconnect_streamed optionsMichael Niedermayer2015-09-07
| | | | | | | | | | | | | | They allow reconnecting endless live streams which fail with eof Reviewed-by: Zhang Rui <bbcallen@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | avformat/http: print error that causes reconnectionMichael Niedermayer2015-09-06
| | | | | | | | Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | avformat/http: require seekability only when seeking to position != 0Michael Niedermayer2015-09-06
| | | | | | | | Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | lavf/http: Remove superfluous parenthesis.Stephan Holljes2015-09-03
| | | | | | | | | | | | Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com> Reviewed-by: Ganesh Ajjanagadde <gajjanag@mit.edu> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | lavf/http: Fix incorrectly placed parenthesis.Stephan Holljes2015-09-03
| | | | | | | | | | | | | | | | The assignment had incorrectly placed parentheses which resulted in ret always being > 0. Reviewed-by: wm4 <nfxjfg@googlemail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | lavf/http: Fix parsing http request data to not read over '\0'.Stephan Holljes2015-08-25
| | | | | | | | Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com>
* | lavf/http: Implement server side network code.Stephan Holljes2015-08-01
| | | | | | | | | | | | | | | | add http_accept, add http_handshake and move handshake logic there, handle connection closing. Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com>
* | Merge commit '5ae178539b91d25710b7bb322d156c31aea9f8bf'Michael Niedermayer2015-07-30
|\| | | | | | | | | | | | | * commit '5ae178539b91d25710b7bb322d156c31aea9f8bf': http: Add the trailing endlines if they are missing Merged-by: Michael Niedermayer <michael@niedermayer.cc>
| * http: Add the trailing endlines if they are missingLuca Barbato2015-07-30
| | | | | | | | | | Makes slightly easier the life of those want to use the option from the command line
* | lavf/http: Correctly terminate session with HTTP POST client.Stephan Holljes2015-06-10
| | | | | | | | | | | | | | | | | | Send a footer to correctly close client sockets. This fixes network errors in client applications. Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com> Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | lavf/http: Add simple autodetection for client HTTP method, based on ↵Stephan Holljes2015-06-06
| | | | | | | | | | | | AVIO_FLAG_READ. Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com>
* | lavf/http: Indent else-clause.Stephan Holljes2015-06-06
| | | | | | | | Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com>
* | lavf/http: Properly process HTTP header on listen.Stephan Holljes2015-06-06
| | | | | | | | Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com>
* | lavf/http: Rudimentary error handling for HTTP requests received from clients.Stephan Holljes2015-06-06
| | | | | | | | Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com>
* | lavf/http: Process HTTP header before sending response.Stephan Holljes2015-06-06
| | | | | | | | Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com>
* | lavf/http: Document method option.Stephan Holljes2015-06-06
| | | | | | | | Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com>
* | avformat/http: Mark lower_proto as const in http_listen()Michael Niedermayer2015-05-10
| | | | | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | lavf/http: support HTTPS when listeningRodger Combs2015-05-02
| | | | | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | Merge commit '1a3eb042c704dea190c644def5b32c9cee8832b8'Michael Niedermayer2015-04-20
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * commit '1a3eb042c704dea190c644def5b32c9cee8832b8': Replace av_dlog with normal av_log at trace level Conflicts: ffplay.c libavdevice/fbdev_dec.c libavfilter/avfilter.c libavfilter/internal.h libavfilter/setpts.c libavfilter/src_movie.c libavfilter/vf_crop.c libavfilter/vf_drawtext.c libavfilter/vf_fieldorder.c libavformat/assdec.c libavformat/avidec.c libavformat/flvdec.c libavformat/http.c libavformat/ipmovie.c libavformat/isom.c libavformat/mov.c libavformat/mpegenc.c libavformat/mpegts.c libavformat/mpegtsenc.c libavformat/mux.c libavformat/mxfdec.c libavformat/nsvdec.c libavformat/oggdec.c libavformat/r3d.c libavformat/rtspdec.c libavformat/utils.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * Replace av_dlog with normal av_log at trace levelVittorio Giovara2015-04-19
| | | | | | | | This applies to every library where performance is not critical.
* | avformat/http: Fix 2 typosMichael Niedermayer2015-04-19
| | | | | | | | | | Found-by: wm4 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | avformat/http: Return an error in case of prematurely ending dataMichael Niedermayer2015-04-19
| | | | | | | | | | | | Fixes Ticket 4039 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | lavf/http: handle case where the server returns a redirect during a seekRodger Combs2015-04-13
| | | | | | | | | | | | | | | | | | | | txoffer (e.g. http://tori.aoi-chan.com/ ) redirects to the same URI on your first request, and serves the actual file on the second. It's stupid, but AFAIK technically compliant. We'd previously see the server not handing back a Range header and return an error; now, instead, we see that there's a redirect and keep track of the offset we want while trying again at the new URL. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>