Connects OK but no stream
Opened this issue · 13 comments
Hi,
I am trying to use the mjpeg-relay to relay a IP camera mjpeg stream. When launching the streamer, everything is looking fine. The terminal looks like this:
andre@rs209835:~/mjpeg-relay$ python relay.py -d -w 54018 http://admin:****@dyndns-host:8091/mjpeg/stream.cgi?chn=1
Starting new HTTP connection (1): dyndns-host
send: 'GET /mjpeg/stream.cgi?chn=1 HTTP/1.1\r\nHost: dyndns-host:8091\r\nAccept: /\r\nAccept-Encoding: gzip, deflate\r\nAuthorization: Basic YWRtaW46MTIzNDU2\r\nUser-Agent: python-requests/2.3.0 CPython/2.7.3 Linux/3.2.0-102-generic\r\n\r\n'
reply: 'HTTP/1.1 401 Unauthorized\r\n'
header: WWW-Authenticate: Digest realm="IPCamera Login", nonce="d2196ed82d421beea792716429f434d0", qop="auth"
header: Content-Type: text/html
header: Content-Length: 351
header: Connection: close
header: Date: Tue, 07 Mar 2017 21:09:09 GMT
header: Server: lighttpd/1.4.35
"GET /mjpeg/stream.cgi?chn=1 HTTP/1.1" 401 351
send: 'GET /mjpeg/stream.cgi?chn=1 HTTP/1.1\r\nHost: dyndns-host:8091\r\nAuthorization: Digest username="admin", realm="IPCamera Login", nonce="d2196ed82d421beea792716429f434d0", uri="/mjpeg/stream.cgi?chn=1", response="caf37f39406629b9aee0eba02ded2e75", qop="auth", nc=00000001, cnonce="bb118369fb119c46"\r\nAccept-Encoding: gzip, deflate\r\nAccept: /\r\nUser-Agent: python-requests/2.3.0 CPython/2.7.3 Linux/3.2.0-102-generic\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Cache-Control: public,max-age=0
header: Accept-Ranges: bytes
header: Content-Type: multipart/x-mixed-replace;boundary=ipcamera
header: Connection: close
header: Transfer-Encoding: chunked
header: Date: Tue, 07 Mar 2017 21:09:10 GMT
header: Server: lighttpd/1.4.35
"GET /mjpeg/stream.cgi?chn=1 HTTP/1.1" 200 None
Connected to stream source, boundary separator: --ipcamera
I can see the to-be-relayed stream OK from the internet and on my local network. When I run the mjpeg-relay, I can see the status page and I do see a incoming bandwidth. When I connect to the /stream URL, I do see that the outbound bandwidth goes up. But 1. I do not see the mjpeg in the browser/-Tag. 2. Also VLC does not play the outgoing stream. I tried running the relay on a different server but makes no difference. Anything else I can look at?
Does the /snapshot
url displays a snapshot? Can you paste the result of curl --raw -v http://localhost:54321/stream
somewhere (I want to look at the headers).
My guess right now is that Transfer-Encoding: chunked
confuses the parser.
No. The returning image is empty (also double checked wget - resulting file is empty)
curl --raw -v http://timemelter.com:54321/stream
- Hostname was NOT found in DNS cache
- Trying 5.35.251.83...
- Connected to timemelter.com (5.35.251.83) port 54321 (#0)
GET /stream HTTP/1.1
User-Agent: curl/7.37.0
Host: timemelter.com:54321
Accept: /
- HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Connection: close
< Server: MJPEG-Relay
< Cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0
< Pragma: no-cache
< Expires: -1
< Content-Type: multipart/x-mixed-replace;boundary=--ipcamera
<
Ok, give https://github.com/Silex/mjpeg-relay/tree/chunked-encoding-support a try and report.
Btw, in your above paste after the headers there's nothing?
My commit is based on http://docs.python-requests.org/en/master/user/advanced/#chunk-encoded-requests
git clone git://github.com/Silex/mjpeg-relay
git checkout chunked-encoding-support
Ah thanks.
Done that. When I run the relay now, it looks ok again, but the /status page show no incoming bandwidth..
python relay.py -d -w 54018 http://admin:****@dyn-url:8091/mjpeg/stream.cgi?chn=1
Starting new HTTP connection (1): dyn-url
send: 'GET /mjpeg/stream.cgi?chn=1 HTTP/1.1\r\nHost: dyn-url:8091\r\nAccept: /\r\nAccept-Encoding: gzip, deflate\r\nAuthorization: Basic YWRtaW46MTIzNDU2\r\nUser-Agent: python-requests/2.3.0 CPython/2.7.3 Linux/3.2.0-102-generic\r\n\r\n'
reply: 'HTTP/1.1 401 Unauthorized\r\n'
header: WWW-Authenticate: Digest realm="IPCamera Login", nonce="0c84df3082134992e588ef7d1dfe739f", qop="auth"
header: Content-Type: text/html
header: Content-Length: 351
header: Connection: close
header: Date: Tue, 07 Mar 2017 22:04:09 GMT
header: Server: lighttpd/1.4.35
"GET /mjpeg/stream.cgi?chn=1 HTTP/1.1" 401 351
send: 'GET /mjpeg/stream.cgi?chn=1 HTTP/1.1\r\nHost: dyn-url:8091\r\nAuthorization: Digest username="admin", realm="IPCamera Login", nonce="0c84df3082134992e588ef7d1dfe739f", uri="/mjpeg/stream.cgi?chn=1", response="c7d421e513fa43b1e48079761fcf6896", qop="auth", nc=00000001, cnonce="10cbc87611e2c11f"\r\nAccept-Encoding: gzip, deflate\r\nAccept: /\r\nUser-Agent: python-requests/2.3.0 CPython/2.7.3 Linux/3.2.0-102-generic\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Cache-Control: public,max-age=0
header: Accept-Ranges: bytes
header: Content-Type: multipart/x-mixed-replace;boundary=ipcamera
header: Connection: close
header: Transfer-Encoding: chunked
header: Date: Tue, 07 Mar 2017 22:04:09 GMT
header: Server: lighttpd/1.4.35
"GET /mjpeg/stream.cgi?chn=1 HTTP/1.1" 200 None
Connected to stream source, boundary separator: --ipcamera
mjpeg-relay status
Summary
Parameter Value
Clients 0
Incoming bandwidth 0.0000Mb/s
Outgoing bandwidth 0.0000Mb/s
Please use a pastebin or use github's code blocks.
Anyway, you are sure http://admin:****@dyndns-host:8091/mjpeg/stream.cgi?chn=1
works properly? Is it possible to setup some temporary viewer user for us to use?
Hello,
Just had a quick attempt, looks like that gives a 401 even when connecting directly without using mjpeg-relay. Please check the credentials
The credentials are fine, you need to use digest auth.
The problem is more like the camera only accepts very few connections... curl -v --raw --anyauth "http://test:test@dev.scw-services.com:8091/mjpeg/stream.cgi?chn=1"
timeouts before sending the stream.
In all my attempts it only sent the MJPG once, and thus I could not debug.