Change #257141
| Category | ffmpeg |
| Changed by | Niklas Haas <git@haasn.dev> |
| Changed at | Sat 07 Feb 2026 11:02:36 |
| Repository | https://git.ffmpeg.org/ffmpeg.git |
| Project | ffmpeg |
| Branch | master |
| Revision | e03b034e45e68450e16f913c8aaf5ec362bc1446 |
Comments
avformat/http: re-use keep-alive connection for small seeks When the previous reply was a partial response (e.g. due to a seek to the end of the file), and the remaining data from that partial response is below the short seek size threshold, we can serve this seek by just draining that data and re-using the existing connection. This can currently only happen when using keep-alive connections (-multiple_requests 1) and seeking from the end of the file to somewhere else, in which case the file's tail can be drained and the connection re-used. Under other circumstances, however, we still need to force a reconnection, because we do not yet send partial range requests. (This will be changed in the following commit) We need to take special care not to regress the existing fallback logic for when `http_open_cnx` fails, so here is a quick case analysis: non-drain path: - identical to the current soft drain fails: (ffurl_read error path) - s->hd = old_hd = NULL - http_open_cnx() always opens a new connection - on failure, old buffer is restored and s->hd remains NULL soft drain succeeds, http_open_cnx() fails: - s->hd is set to NULL by http_open_cnx() failure path - old_hd was never set, so remains NULL - old buffer is restored, s->hd remains NULL In either case, the outcome that any (previously valid) buffer is left as-is, the offset is unchanged, and the connection ends up closed (s->hd == NULL). This is okay to do after the previous change to http_buf_read, which allows it to internally re-open the connection if needed.
Changed files
- libavformat/http.c