Reālā laika ziņošanas protokols

**Reālā laika ziņošanas protokols** (angļu:*Real Time Messaging Protocol (RTMP)*) sākumā bija protokols, kurš piederēja uzņēmumam Macromedia. Tas tika izstrādāts ar nolūku straumēt audio, video un citus datus caur internetu starp kādu serveri un gala iekārtu, kurai ir Flash atskaņotājs. Macromedia tagad pieder uzņēmumam Adobe, has izlaida nepabeigtu protokola specifikāciju, priekš publiskas lietošanas.

RTMP protokolam ir vairākas variācijas:
# "Parastais" protokols, kurš strādā uz TCP un pēc noklusējuma lieto porta numuru 1935.
# RTMPS, kas ir RTMP pa SSL savienojumu.
# RTMPE, kas ir RTMP, šifrēts, izmantojot paša Adobe izveidotu drošības mehānismu. Kaut gan detaļas par šo implementēto šifrējumu ir Adobe īpašums, šis mehānisms lieto industrijas standarta kriptogrāfiskos primitīvus. Bet galu galā RTMPE dizains ir kļūdains un īstenībā nesagādā aizsardzību.
# RTMPT, kas ir RTMP, iekapsulēts HTTP pieprasījumos, lai tiktu cauri ugunsmūriem. RTMPT bieži izmanto parasta teksta pieprasījumus TCP portos 80 un 443 ar mērķi apiet lielāko daļu uzņēmumu datuplūsmas filtru. Iekapsulētā sesija var saturēt RTMP, RTMPS vai RTMPE paketes.
Kaut gan sākotnējā motivācija RTMP izgudrošanā bija Flash video straumēšana, to lieto arī citās lietotnēs, piemēram Adobe LiveCycle Data Services ES.

## Vispārējā darbība

RTMP (izņemot RTMFP) ir TCP bāzēts protokols, kurš notur nepārtrauktu savienojumu un atļauj mazas aiztures komunikāciju. Lai straumētu vienmērīgi un nosūtītu pēc iespējas vairāk informāciju, tas sadala straumes fragmentos un to izmērs tiek dinamiski mainīts. Izmērus nosaka dažādi parametri starp serveri un klientu, un ir reizes, kad tas netiek mainīts. Pēc noklusējuma fragmenti ir 64 baitu lieli priekš audio un 128 baitu lieli priekš video un citiem datiem. Fragmenti no dažādām straumēm var tikt starplikti un multipleksēti vienā savienojumā. Ar garākiem datu posmiem protokols nes tikai viena baita galveni katram fragmentam, padarot to ļoti ergonomisku. Tomēr praksē individuāli fragmenti netiek starplikti. Starplikšana un multipleksēšana notiek ar veselām paketēm, kur RTMP paketes vairākos atsevišķos aktīvos kanālos tiek starpliktas tā, lai nodrošinātu, ka katrs kanāls atbilst saviem ātruma, aiztures un citiem parametriem. Paketes, starpliktas šādā veidā, ir nesadalāmas, tāpēc fragmenti netiek atsevišķi starplikti.

RTMP nodefinē vairākus virtuālus kanālus, kuros paketes var tikt sūtītas un saņemtas un kuras strādā atsevišķi no citām. Piemēram, ir kanāls priekš RPC pieprasījumiem un atbildēm, kanāls priekš video datiem, kanāls priekš audio datiem, kanāls priekš kontroles ziņojumiem (fragmentu izmēru izlemšana utt.) un citi. Parastā RTMP sesijā vairāki kanāli var būt aktīvi vienlaicīgi, jebkurā brīdī. Kad RTMP tiek kodēti, tiek uzģenerēta paketes galvene. Paketes galvenē tiek norādīti dažādi parametri, kā kanāla ID, pa kuru tā jāsūta, laiks, kad tā uzģenerēta (ja nepieciešams), un paketes izmērs. Pēc tam seko pakete, kura sadalīta fragmentos, kuru lielums izlemts dialogā starp klientu un serveri. Galvene nekad netiek fragmentēta, un tās izmērs netiek piesaistīts pirmajam paketes fragmentam. Tas nozīmē, ka tikai pakešu saturs (mediju dati) var tikt fragmentēti.

Augstākā līmenī RTMP iekapsulē MP3 vai AAC audio un FLV1 video multimēdiju straumējumus, un var veikt Attālināto procedūru izsaukumus (angļu:*Remote procedure call (RPC)*) izmantojot Darbības Ziņu Formātu (angļu:*Action Message Format*). Visi vajadzīgie RPC servisi tiek veikti asinhroni, izmantojot viena klienta/servera pieprasījuma/atbildes modeli.

### Šifrēšana

RTMP sesija var tikt šifrēta, izmantojot vienu no šīm divām metodēm:
* Izmantojot industrijas standarta SSL mehānismus. RTMP sesija vienkārši tiek ievietota normālā SSL sesijā.
* Izmantojot RTMPE, kas ievieto RTMP sesiju vieglākā šifrējuma kārtā.

Ir plaši saprasts, ka SSL rokasspiediens sesijas sākumā ir prasīgs. Ņemot to vērā, Adobe izstrādāja RTMPE kā vieglāku alternatīvu, lai lielas datu plūsmas saites varētu vienkāršāk apstrādāt šifrētus straumējumus. Adobe reklamē RTMPE kā metodi priekš drošas datu sūtīšanas, aizsargājot no klienta datu viltošanas, bet tas ir nepatiess apgalvojums. RTMPE lieto tikai anonīmo Diffe-Hellman, kurš nesagādā nekādu apstiprinājumu par jebkuras puses identitāti, līdz ar to šī metode nav pasargāta no trešās personas uzbrukumiem, kad sesija tiek palaista.

### HTTP tunelēšana

Tunelētā RTMP (RTMPT) RTMP dati tiek iekapsulēti un apmainīti caur HTTP. Ziņas no klienta (mediju atskaņotāja šinī gadījumā) tiek nosūtītas uz portu 80 (noklusējuma portu priekš HTTP) uz servera.

Kaut gan ziņas, nosūtītas, izmantojot RTMPT, ir lielākas, nekā to attiecīgās RTMP ziņas sakarā ar HTTP galveņu izmēru, RTMPT var veikt RTMP darbības, kur RTMP nestrādātu, piemēram, kad klients ir aiz ugunsmūra un bloķē ne-HTTP un ne-HTTPS ārā ejošo plūsmu.

Šis protokols strādā sūtot komandas caur POST saiti un AMF ziņas caur POST saturu.

Piemērs būtu
::POST /open/1 HTTP/1.1
lai atvērtu savienojumu.