souphttpsrc: Fails to reconnect to live source
When viewing live MJPEG stream from IP camera, any break in communication with the camera causes souphttpsrc reconnect attempts to fail and stop the pipeline. This appears to be due to a request for a specific stream position, i.e. to continue where the camera left off. This should not happen if is-live
is set.
Pipeline used to test/log the issue (location URL is to local IP camera).
gst-launch-1.0.exe --gst-debug=souphttpsrc:7 souphttpsrc location='http://192.168.10.100/mjpeg?res=half&fps=10&x0=0&y0=0&x1=960&y1=540' is-live=true retries=-1 ! queue ! decodebin ! d3dvideosink
Relevant GStreamer output, log starts right before disconnecting CAT6. Trimmed log is attached, if needed. httpsrc.log
0:00:34.180909200 9588 e11960 DEBUG souphttpsrc gstsouphttpsrc.c:1836:gst_soup_http_src_create:<souphttpsrc0> Returning 0 ok
0:00:34.181173500 9588 e11960 DEBUG souphttpsrc gstsouphttpsrc.c:1724:gst_soup_http_src_read_buffer:<souphttpsrc0> Read 2900 bytes from http input
0:00:34.181195200 9588 e11960 LOG souphttpsrc gstsouphttpsrc.c:1642:gst_soup_http_src_check_update_blocksize:<souphttpsrc0> Checking to update blocksize. Read: 2900 bytes, blocksize: 4096 bytes, time since last read: 0:00:00.000285000
0:00:34.181214400 9588 e11960 DEBUG souphttpsrc gstsouphttpsrc.c:1836:gst_soup_http_src_create:<souphttpsrc0> Returning 0 ok
0:00:49.185736600 9588 e11960 DEBUG souphttpsrc gstsouphttpsrc.c:1724:gst_soup_http_src_read_buffer:<souphttpsrc0> Read -1 bytes from http input
0:00:49.185772100 9588 e11960 DEBUG souphttpsrc gstsouphttpsrc.c:1836:gst_soup_http_src_create:<souphttpsrc0> Returning -100 custom-error
0:00:49.185893800 9588 e11960 LOG souphttpsrc gstsouphttpsrc.c:1583:gst_soup_http_src_do_request:<souphttpsrc0> Running request for method: GET
0:01:06.526178200 9588 e11960 INFO souphttpsrc gstsouphttpsrc.c:1129:gst_soup_http_src_got_headers:<souphttpsrc0> got headers
0:01:06.526261200 9588 e11960 DEBUG souphttpsrc gstsouphttpsrc.c:1836:gst_soup_http_src_create:<souphttpsrc0> Returning -100 custom-error
0:01:06.526282300 9588 e11960 LOG souphttpsrc gstsouphttpsrc.c:1583:gst_soup_http_src_do_request:<souphttpsrc0> Running request for method: GET
0:01:23.866718100 9588 e11960 INFO souphttpsrc gstsouphttpsrc.c:1129:gst_soup_http_src_got_headers:<souphttpsrc0> got headers
0:01:23.866804100 9588 e11960 DEBUG souphttpsrc gstsouphttpsrc.c:1836:gst_soup_http_src_create:<souphttpsrc0> Returning -100 custom-error
0:01:23.866824000 9588 e11960 LOG souphttpsrc gstsouphttpsrc.c:1583:gst_soup_http_src_do_request:<souphttpsrc0> Running request for method: GET
0:01:26.210788100 9588 e11960 INFO souphttpsrc gstsouphttpsrc.c:1129:gst_soup_http_src_got_headers:<souphttpsrc0> got headers
0:01:26.210878100 9588 e11960 DEBUG souphttpsrc gstsouphttpsrc.c:1270:gst_soup_http_src_got_headers:<souphttpsrc0> Content-Type: multipart/x-mixed-replace
0:01:26.210898300 9588 e11960 DEBUG souphttpsrc gstsouphttpsrc.c:1556:gst_soup_http_src_send_message:<souphttpsrc0> Successfully got a reply
0:01:26.211036100 9588 e11960 WARN souphttpsrc gstsouphttpsrc.c:1615:gst_soup_http_src_do_request:<souphttpsrc0> error: Server does not support seeking.
0:01:26.211057000 9588 e11960 WARN souphttpsrc gstsouphttpsrc.c:1615:gst_soup_http_src_do_request:<souphttpsrc0> error: Server does not accept Range HTTP header, URL: http://192.168.18.101/mjpeg?res=half&fps=10&x0=0&y0=0&x1=960&y1=540, Redirect to: (NULL)
0:01:26.211098700 9588 e11960 DEBUG souphttpsrc gstsouphttpsrc.c:1836:gst_soup_http_src_create:<souphttpsrc0> Returning -5 error
ERROR: from element /GstPipeline:pipeline0/GstSoupHTTPSrc:souphttpsrc0: Server does not support seeking.
Additional debug info:
../gst-plugins-good-1.16.2/ext/soup/gstsouphttpsrc.c(1615): gst_soup_http_src_do_request (): /GstPipeline:pipeline0/GstSoupHTTPSrc:souphttpsrc0:
Server does not accept Range HTTP header, URL: http://192.168.18.101/mjpeg?res=half&fps=10&x0=0&y0=0&x1=960&y1=540, Redirect to: (NULL)
Execution ended after 0:01:26.103642700
Setting pipeline to PAUSED ...
HTTP GET request during re-connection attempt from Wireshark capture. Contains Range field, which should not be included when is-live=true
.
// Initial Connection
GET /mjpeg?res=half&fps=10&x0=0&y0=0&x1=960&y1=540 HTTP/1.1
Host: 192.168.18.101
User-Agent: GStreamer souphttpsrc 1.16.2 libsoup/2.70.0
icy-metadata: 1
Connection: Keep-Alive
...
// View from camera, then break in network communication (me removing CAT6 cable for a second)
...
// Reconnection GET attempt
GET /mjpeg?res=half&fps=10&x0=0&y0=0&x1=960&y1=540 HTTP/1.1
Host: 192.168.18.101
User-Agent: GStreamer souphttpsrc 1.16.2 libsoup/2.70.0
icy-metadata: 1
Connection: Keep-Alive
Range: bytes=3980361-