RTSP (Real Time Streaming Protocol)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:36, 21 июня 2016.
Open book.svg Авторство
М.С. Смольникова
Согласовано: 08.05.2016
Протоколы передачи

RTSP (англ. Real Time Streaming Protocol, или, потоковый протокол реального времени) – это прикладной протокол, в котором описаны команды для управления видеопотоком. RTSP не выполняет сжатие, а также не определяет метод инкапсуляции мультимедийных данных и транспортные протоколы. Передача потоковых данных сама по себе не является частью протокола RTSP. Большинство серверов RTSP используют для этого стандартный транспортный протокол реального времени, осуществляющий передачу аудио- и видеоданных.

Протокол (RTSP) дает возможность клиенту запрашивать живые или предварительно записанные потоки с мультимедийных серверов, подобно тому, как HTTP позволяет клиентам выдавать запросы к Web-cepверам. Фактически RTSP перенял большую часть своего синтаксиса и семантики от НТТР/1.1, поскольку формалыю оба протокола выполняют схожие функции. Сходство подчеркивает общий характер многих реализованных в HTTP концепций. Однако протоколы имеют ряд ключевых отличий, которые связаны с уникальными требованиями для мультимедийных потоков и ограниченностью возможностей НТТР/1.1 по передаче мультимедийных данных.

Управляющие команды протокола

По синтаксису и операциям протокол RTSP похож на HTTP. Однако между протоколами RTSP и HTTP есть ряд существенных различий. Одно из основных заключается в том, что в первом и сервер, и клиент способны генерировать запросы. Например, видеосервер может послать запрос для установки параметров воспроизведения определенного видеопотока. Далее, протоколом RTSP предусматривается, что управление состоянием или связью должен осуществлять сервер, тогда как HTTP вообще никакого отношения к этому не имеет. Наконец, в RTSP данные могут передаваться вне основной полосы (out-of-band) другими протоколами, например RTP, что невозможно в случае HTTP. RTSP-сообщения посылаются отдельно от мультимедийного потока. Для них используется соединение по специальному порту, по умолчанию с номером 554.

Запрос на сервер посылается в текстовом виде в формате: "метод абсолютный_адрес контент версия_протокола". Вместе с запросом могут быть переданы дополнительные служебные поля (на новых строчках запроса).

Пример запроса: "PLAY rtsp://server/path/test.mpg RTSP/1.0"

Real Time Streaming Protocol

Options

Возвращает список поддерживаемых методов (OPTIONS, DESCRIBE и т.д.)

C->S:  OPTIONS rtsp://example.com/media.mp4 RTSP/1.0
       CSeq: 1
       Require: implicit-play
       Proxy-Require: gzipped-messages
S->C:  RTSP/1.0 200 OK
       CSeq: 1
       Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

Describe

Запрос описания контента, описывает каждый трек в формате SDP

C->S: DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 2
S->C: RTSP/1.0 200 OK
      CSeq: 2
      Content-Base: rtsp://example.com/media.mp4
      Content-Type: application/sdp
      Content-Length: 460
      m=video 0 RTP/AVP 96
      a=control:streamid=0
      a=range:npt=0-7.741000
      a=length:npt=7.741000
      a=rtpmap:96 MP4V-ES/5544
      a=mimetype:string;"video/MP4V-ES"
      a=AvgBitRate:integer;304018
      a=StreamName:string;"hinted video track"
      m=audio 0 RTP/AVP 97
      a=control:streamid=1
      a=range:npt=0-7.712000
      a=length:npt=7.712000
      a=rtpmap:97 mpeg4-generic/32000/2
      a=mimetype:string;"audio/mpeg4-generic"
      a=AvgBitRate:integer;65790
      a=StreamName:string;"hinted audio track"

Setup

Запрос установки соединений и транспорта для потоков.

C->S: SETUP rtsp://example.com/media.mp4/streamid=0 RTSP/1.0
      CSeq: 3
      Transport: RTP/AVP;unicast;client_port=8000-8001
S->C: RTSP/1.0 200 OK
      CSeq: 3
      Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001;ssrc=1234ABCD
      Session: 12345678

Play

Старт вещания.

C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 4
      Range: npt=5-20
      Session: 12345678
S->C: RTSP/1.0 200 OK
      CSeq: 4
      Session: 12345678
      RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012

Teardown

Остановка вещания.

C->S: TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 8
      Session: 12345678
S->C: RTSP/1.0 200 OK
      CSeq: 8

Record

Запрос на записывание контента сервером

C->S: RECORD rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 6
      Session: 12345678
S->C: RTSP/1.0 200 OK
      CSeq: 6
      Session: 12345678

GET_PARAMETER

Запрос GET_PARAMETER извлекает значение параметра, заданного в URI.

S->C: GET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 9
      Content-Type: text/parameters
      Session: 12345678
      Content-Length: 15
      packets_received
      jitter
C->S: RTSP/1.0 200 OK
      CSeq: 9
      Content-Length: 46
      Content-Type: text/parameters
      packets_received: 10
      jitter: 0.3838

SET_PARAMETER

Установка параметров сервера

C->S: SET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 10
      Content-length: 20
      Content-type: text/parameters
      barparam: barstuff
S->C: RTSP/1.0 451 Invalid Parameter
      CSeq: 10
      Content-length: 10
      Content-type: text/parameters
      barparam

Redirect

Перенаправление на другой контент.

S->C: REDIRECT rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 11
      Location: rtsp://bigserver.com:8001
      Range: clock=19960213T143205Z-

Announce

Обновление данных описания контента

C->S: ANNOUNCE rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 7
      Date: 23 Jan 1997 15:35:06 GMT
      Session: 12345678
      Content-Type: application/sdp
      Content-Length: 332
      v=0
      o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4
      s=SDP Seminar
      i=A Seminar on the session description protocol
      u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
      e=mjh@isi.edu (Mark Handley)
      c=IN IP4 224.2.17.12/127
      t =2873397496 2873404696
      a=recvonly
      m=audio 3456 RTP/AVP 0
      m=video 2232 RTP/AVP 31
S->C: RTSP/1.0 200 OK
      CSeq: 7

Реализация

Серверы

  • Darwin Streaming Server - Open-sourced версия QuickTime Streaming Server, которая поддерживается Apple;
  • Feng - Open-source потоковый сервер, разработанный итальянской командой университета Politecnico di Torino для проекта LScube;
  • FFmpeg - включает ffserver GPL или LGPL;
  • Helix Universal Server - коммерческий потоковый сервер для RTSP, RTMP, iOS, Silverlight и HTTP потоковых медиа-клиентов;
  • LIVE555 - Open source C++ сервер и клиентские библиотеки, которые используют известные клиенты, например VLC и mplayer;
  • Managed Media Aggregation - написан в полностью управляемом коде;
  • pvServer - ранее назывался Packet Video Streaming Server, это потоковый сервер продукта Alcatel-Lucent;
  • QuickTime Streaming Server - потоковый сервер с закрытым исходным кодом от Apple, который поставляется с Mac OS X Server;
  • VideoLAN - Open-source медиа-проигрыватель и потоковый сервер;
  • VX30 - потоковый видео сервер и встроенный Java клиент от Maui X-Stream;
  • Windows Media Services - потоковый сервер от Microsoft, который использует RTSP, модифицированный с помощью расширений Windows Media;
  • Wowza Media Server - мультиформатный потоковый сервер для RTSP/RTP, RTMP, MPEG-TS, ICY, HTTP;
  • Xenon Streaming Server - мобильный потоковый сервер от Vidiator Technology:
  • YouTube.

Клиенты

  • cURL
  • FFmpeg
  • GStreamer
  • Media Player Classic
  • MPlayer
  • MythTV via Freebox
  • QuickTime
  • RealPlayer
  • Skype
  • Spotify
  • VLC media player
  • Winamp
  • Windows Media Player
  • xine
  • JetAudio
  • Managed Media Aggregation
  • Astra
  • omxplayer

Ссылки