2

Существует осевая камера, которая подключена к нашему сайту (camba.tv) через компонент подключения одним щелчком мыши (который действует как прокси). Мы можем общаться с этой камерой только через http, установив прокси на адрес нашего сервера OCCC. Если мы хотим получить потоки RTSP (h.264), у нас остается только опция "RTSP over HTTP". Для этого я следовал оси VAPIX 3 документации раздел 3.3. Я выдаю запросы через фиддлер, но не получаю никакого ответа. Но когда я помещаю URL-адрес (axrtsphttp://1.00408CBEA38B/axis-media/media.amp) в проигрыватель Windows Media (с прокси-сервером, установленным на сервере OCCC 212.78.237.156:3128), проигрыватель может получить поток RTSP через HTTP после Вход в систему. Я создал запрос трассировки связи между камерой и Windows Media Player через Wireshark и запрос, который приносит поток выглядит

 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 ответ1

0

"RTSP через HTTP" фактически состоит из 2 сеансов. Первый - это GET-сессия, которая используется для потоковой передачи данных и ответов на команды, а второй - это POST-сессия, которая используется для отправки команд. Вы описали только первый сеанс. Чтобы получить поток RTSP, вы должны реализовать и второй сеанс. Взаимодействие должно выглядеть следующим образом:

  1. Создайте первое соединение и отправьте GET-запрос с соответствующими заголовками x-sessioncookie и Authorization.
  2. Создайте второе соединение и отправьте POST-запрос с соответствующими заголовками и вашей командой.
  3. Получите ответ на вашу команду при первом подключении как часть GET-ответа.
  4. Продолжайте отправлять команды во втором соединении и получать данные в первом соединении.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .