GNOME Bugzilla – Bug 704053
souphttpsrc: Don't treat errors on HEAD request as fatal
Last modified: 2013-07-25 17:21:47 UTC
Since 1.1.2 I can no longer play shoutcast streams. This worked fine on 1.1.1. gst-launch-1.0 -v playbin uri=http://50.117.121.163:80 Now fails in either this way: ERROR: from element /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstSoupHTTPSrc:source: Connection terminated unexpectedly Additional debug info: gstsouphttpsrc.c(943): gst_soup_http_src_finished_cb (): /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstSoupHTTPSrc:source: libsoup status code 7 ERROR: pipeline doesn't want to preroll. or this way: ERROR: from element /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstSoupHTTPSrc:source: Message Corrupt Additional debug info: gstsouphttpsrc.c(943): gst_soup_http_src_finished_cb (): /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstSoupHTTPSrc:source: libsoup status code 8 ERROR: pipeline doesn't want to preroll.
Here's some more debugging output: Setting pipeline to PAUSED ... /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: ring-buffer-max-size = 0 /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: buffer-size = -1 /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: buffer-duration = -1 /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: use-buffering = false /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: download = false /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: uri = http://50.117.121.163:80 /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: connection-speed = 0 /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: source = "\(GstSoupHTTPSrc\)\ source" 0:00:00.107875996 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:1298:gst_soup_http_src_start:<source> start("http://50.117.121.163:80") 0:00:00.108020578 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:669:gst_soup_http_src_session_open:<source> Creating session 0:00:00.110126390 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:1368:gst_soup_http_src_get_size:<source> get_size() = FALSE 0:00:00.110211583 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:649:gst_soup_http_src_session_open:<source> Session is already open 0:00:00.110928301 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:1206:gst_soup_http_src_build_message:<source> request headers: 0:00:00.110981313 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:727:gst_soup_http_src_headers_foreach:<source> Connection: close 0:00:00.111027454 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:727:gst_soup_http_src_headers_foreach:<source> icy-metadata: 1 0:00:00.111070356 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:1256:gst_soup_http_src_do_request:<source> Queueing connection request 0:00:00.223118839 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:926:gst_soup_http_src_finished_cb:<source> finished 0:00:00.223192774 31090 0x814a0a0 WARN souphttpsrc gstsouphttpsrc.c:943:gst_soup_http_src_finished_cb:<source> error: Message Corrupt 0:00:00.223241251 31090 0x814a0a0 WARN souphttpsrc gstsouphttpsrc.c:943:gst_soup_http_src_finished_cb:<source> error: libsoup status code 8 0:00:00.223664610 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:1093:gst_soup_http_src_response_cb:<source> got response 8: Message Corrupt 0:00:00.223740494 31090 0x814a0a0 WARN souphttpsrc gstsouphttpsrc.c:1141:gst_soup_http_src_parse_status:<source> error: Server sent bad data. 0:00:00.223781637 31090 0x814a0a0 WARN souphttpsrc gstsouphttpsrc.c:1141:gst_soup_http_src_parse_status:<source> error: Message Corrupt (8), URL: http://50.117.121.163:80 0:00:00.223973156 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:1413:gst_soup_http_src_do_seek:<source> do_seek(0--1) 0:00:00.224019307 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:1418:gst_soup_http_src_do_seek:<source> Seek to current read/end position and no seek pending Pipeline is PREROLLING ... 0:00:00.225085925 31090 0x8161950 DEBUG souphttpsrc gstsouphttpsrc.c:1206:gst_soup_http_src_build_message:<source> request headers: 0:00:00.225167524 31090 0x8161950 DEBUG souphttpsrc gstsouphttpsrc.c:727:gst_soup_http_src_headers_foreach:<source> Connection: close 0:00:00.225227665 31090 0x8161950 DEBUG souphttpsrc gstsouphttpsrc.c:727:gst_soup_http_src_headers_foreach:<source> icy-metadata: 1 0:00:00.225281479 31090 0x8161950 DEBUG souphttpsrc gstsouphttpsrc.c:1256:gst_soup_http_src_do_request:<source> Queueing connection request ERROR: from element /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstSoupHTTPSrc:source: Message Corrupt Additional debug info: gstsouphttpsrc.c(943): gst_soup_http_src_finished_cb (): /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstSoupHTTPSrc:source: libsoup status code 8 ERROR: pipeline doesn't want to preroll. Setting pipeline to NULL ... 0:00:00.226058533 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:1333:gst_soup_http_src_unlock:<source> unlock() 0:00:00.226686764 31090 0x8161950 DEBUG souphttpsrc gstsouphttpsrc.c:1238:gst_soup_http_src_do_request:<source> interrupted 0:00:00.226764940 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:1349:gst_soup_http_src_unlock_stop:<source> unlock_stop() 0:00:00.226891120 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:1309:gst_soup_http_src_stop:<source> stop() 0:00:00.227013456 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:926:gst_soup_http_src_finished_cb:<source> finished 0:00:00.227064063 31090 0x814a0a0 WARN souphttpsrc gstsouphttpsrc.c:943:gst_soup_http_src_finished_cb:<source> error: Cancelled 0:00:00.227103141 31090 0x814a0a0 WARN souphttpsrc gstsouphttpsrc.c:943:gst_soup_http_src_finished_cb:<source> error: libsoup status code 1 0:00:00.227352580 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:1093:gst_soup_http_src_response_cb:<source> got response 1: Cancelled Freeing pipeline ... 0:00:00.228341403 31090 0x814a0a0 DEBUG souphttpsrc gstsouphttpsrc.c:329:gst_soup_http_src_finalize:<source> finalize
Created attachment 248980 [details] [review] souphttpsrc: ignore errors from HEAD request HEAD requests are used to check the server headers to see if it seekable. Ignore errors from those requests as they shouldn't be critical.
commit 9a7321872f6902dd829599aab02f193eec307ac7 Author: Thiago Santos <thiago.sousa.santos@collabora.com> Date: Thu Jul 11 20:41:23 2013 -0300 souphttpsrc: ignore errors from HEAD request HEAD requests are used to check the server headers to see if it seekable. Ignore errors from those requests as they shouldn't be critical. https://bugzilla.gnome.org/show_bug.cgi?id=704053
This change seems to fix the issue, thanks!
*** Bug 704241 has been marked as a duplicate of this bug. ***
While some errors due to HEAD requests now don't cause fatal issues, I ran into a problem with a IIS web server returning a 404 on a HEAD request. The exact same GET request however returns the expected result. In gst_soup_http_src_parse_status() only transport errors during HEAD requests are ignored. Other errors like client or server errors in response to a HEAD request are still always fatal, breaking such streams. Ignoring client/server errors for HEAD requests fixes this problem.
This was fixed in master earlier today