Having trouble Getting “RTSP over HTTP”

http-proxyrtspstreamingvideowireshark

There is an axis camera that is connected to our site (camba.tv) through axis one click connection component (which acts as proxy). We can communicate with this camera only through http by setting the proxy to our OCCC server's address. If we want to get RTSP streams (h.264) we are only left with "RTSP over HTTP" option. For this I have followed axis VAPIX 3 documentation section 3.3. I issue requests through fiddler but don't get any response. But when i put the URL (axrtsphttp://1.00408CBEA38B/axis-media/media.amp) in windows media player (with proxy set to OCCC server 212.78.237.156:3128) the player is able to get RTSP stream over HTTP after logging in. I have created a request trace of communication between camera and windows media player through wireshark and the request that brings the stream looks like

 http://1.00408cbea38b/axis-media/media.amp HTTP/1.1

    x-sessioncookie: 619

    User-Agent: Axis AMC

    Host: 1.00408CBEA38B

    Proxy-Connection: Keep-Alive

    Pragma: no-cache

    Authorization: Digest username="root",realm="AXIS_00408CBEA38B",nonce="000a8b40Y0100409c13ac7e6cceb069289041d8feb1691",uri="/axis-media/media.amp",cnonce="9946e2582bd590418c9b70e1b17956c7",nc=00000001,response="f3cab86fc84bfe33719675848e7fdc0a",qop="auth"



    HTTP/1.0 200 OK

    Content-Type: application/x-rtsp-tunnelled

    Date: Tue, 02 Nov 2010 11:45:23 GMT



    RTSP/1.0 200 OK

    CSeq: 1

    Content-Type: application/sdp

    Content-Base: rtsp://1.00408CBEA38B/axis-media/media.amp/

    Date: Tue, 02 Nov 2010 11:45:23 GMT

    Content-Length: 410



    v=0

    o=- 1288698323798001 1288698323798001 IN IP4 1.00408CBEA38B

    s=Media Presentation

    e=NONE

    c=IN IP4 0.0.0.0

    b=AS:50000

    t=0 0

    a=control:*

    a=range:npt=0.000000-

    m=video 0 RTP/AVP 96

    b=AS:50000

    a=framerate:30.0

    a=transform:1,0,0;0,1,0;0,0,1

    a=control:trackID=1

    a=rtpmap:96 H264/90000

    a=fmtp:96 packetization-mode=1; profile-level-id=420029; sprop-parameter-sets=Z0IAKeNQFAe2AtwEBAaQeJEV,aM48gA==

    RTSP/1.0 200 OK

    CSeq: 2

    Session: 3F4763D8; timeout=60

    Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=060922C6;mode="PLAY"

    Date: Tue, 02 Nov 2010 11:45:24 GMT



    RTSP/1.0 200 OK

    CSeq: 3

    Session: 3F4763D8

    Range: npt=0-

    RTP-Info: url=rtsp://1.00408CBEA38B/axis-media/media.amp/trackID=1;seq=7392;rtptime=4190934902

    Date: Tue, 02 Nov 2010 11:45:24 GMT
[Binary Stream Content]

But when i copy this request to fiddler, I only get 200 status code with content-type set to application/x-rtsp-tunneled and there is no stream data. The only thing i do different with stream is to use Basic in authorization header instead of Digest and I do not get 401 (Un authorized) status code. Can anyone explain what's happening here? How can I write request sequences to get stream in fiddler? If it is needed, I can upload the wireshark request dump somewhere.

Best Answer

"RTSP over HTTP" actually consists of 2 sessions. First one is GET-session that is used for streaming data and for command responces, and second one is POST-session, that is used for sending commands. You have described only the first session. To get the RTSP stream you have to implement the second session too. Interaction should look like the following:

  1. Create first connection and send GET-request with appropriate x-sessioncookie and Authorization headers.
  2. Create second connection and send POST-request with appropriate headers and your command.
  3. Receive the response to your command in the first connection as part of the GET-response.
  4. Continue with sending commands in the second connection and receive data in the first connection.
Related Question