获取“RTSP over HTTP”时遇到问题

获取“RTSP over HTTP”时遇到问题

有一个 axis 摄像机通过 axis one click connection 组件(充当代理)连接到我们的网站 (camba.tv)。我们可以通过将代理设置为我们的 OCCC 服务器地址,仅通过 http 与此摄像机通信。如果我们想要获取 RTSP 流 (h.264),我们只剩下“RTSP over HTTP”选项。为此,我遵循了axis VAPIX 3 文档第 3.3 节。我通过 fiddler 发出请求,但没有得到任何响应。但是当我将 URL(axrtsphttp://1.00408CBEA38B/axis-media/media.amp)放入 Windows Media Player(代理设置为 OCCC 服务器 212.78.237.156:3128)时,播放器在登录后能够通过 HTTP 获取 RTSP 流。我通过 wireshark 创建了摄像机和 Windows Media Player 之间通信的请求跟踪,带来流的请求看起来像

 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]

但是当我将此请求复制到 fiddler 时,我只得到 200 状态代码,内容类型设置为 application/x-rtsp-tunneled,并且没有流数据。我对流所做的唯一不同的事情是Basic在授权标头中使用而不是Digest,我没有得到 401(未授权)状态代码。有人能解释一下这里发生了什么吗?我如何编写请求序列以在 fiddler 中获取流?如果需要,我可以将 wireshark 请求转储上传到某处。

答案1

“RTSP over HTTP”实际上由 2 个会话组成。第一个是 GET 会话,用于流式传输数据和命令响应,第二个是 POST 会话,用于发送命令。您只描述了第一个会话。要获取 RTSP 流,您还必须实现第二个会话。交互应如下所示:

  1. 创建第一个连接并发送带有适当的 x-sessioncookie 和授权标头的 GET 请求。
  2. 创建第二个连接并发送带有适当标头和命令的 POST 请求。
  3. 在第一次连接中接收对您的命令的响应作为 GET 响应的一部分。
  4. 在第二个连接中继续发送命令,并在第一个连接中接收数据。

相关内容