Кіріспе

Интернет арқылы деректерді ағынды таратудың байланыс протоколы (Real Time Messaging Protocol, RTMP) – аудио, бейне және деректерді Интернет арқылы ағынды таратуға арналған байланыс протоколы. Бастапқыда Macromedia компаниясы Flash Player мен Flash Communication Server арасындағы ағынды трансляция үшін құпия протокол ретінде әзірлеген, ал Adobe (Macromedia компаниясын сатып алғаннан кейін) протокол спецификациясының толық емес нұсқасын жалпы қолданысқа шығарды. RTMP протоколының бірнеше түрі бар: негізгі RTMP, Transmission Control Protocol (TCP) үстінде жұмыс істейтін және әдепкі бойынша 1935 порт нөмірін пайдаланатын "жай" протокол. RTMPS, яғни RTMP Transport Layer Security (TLS/SSL) қосылысы арқылы жүзеге асырылады. RTMPE, Adobe-нің жеке қауіпсіздік механизмін қолдана отырып шифрланған RTMP. Ішкі жұмысы құпия болғанымен, механизм өнеркәсіптік стандарттағы криптографиялық алгоритмдерді пайдаланады. RTMPT, ол өрт қабырғаларын (firewalls) өтпелеу үшін HTTP сұраныстарының ішінде капсуладанған. RTMPT көбінесе корпоративтік трафик сүзгілерін айналып өту үшін TCP порттары 80 және 443 арқылы ашық мәтіндік сұраныстарды қолданады. Капсулаланған сеанс жай RTMP, RTMPS немесе RTMPE пакеттерін қамтуы мүмкін. RTMFP, TCP орнына User Datagram Protocol (UDP) арқылы RTMP, RTMP Chunk Stream-нің орнын басады. Secure Real Time Media Flow Protocol жиынтығы Adobe Systems компаниясымен әзірленді және соңғы пайдаланушыларға бір-бірімен тікелей байланысуға және қарым-қатынас жасауға мүмкіндік береді (P2P). RTMP-нің бастапқы мақсаты Flash видеоны ойнату протоколы болғанымен, ол Adobe LiveCycle Data Services ES сияқты басқа да қолданбаларда қолданылады.

Негізгі жұмыс

RTMP – тұрақты қосылымдарды сақтайтын және төмен задерлілікті қамтамасыз ететін TCP негізіндегі протокол. Ағындарды үздіріссіз жеткізу және мүмкіндігінше көп ақпаратты тарату үшін, ол ағындарды фрагменттерге бөледі, ал олардың көлемі клиент пен сервер арасында динамикалық түрде келісіледі. Кейде ол өзгеріссіз қалады; әдепкі фрагмент өлшемдері аудио деректер үшін 64 байт, бейне деректер мен басқа да дерек түрлері үшін 128 байт. Әртүрлі ағындардан алынған фрагменттер бір-бірімен араласып, жалғыз қосылым арқылы мультиплекстеуге болады. Деректердің үлкен бөліктерімен протокол әр фрагмент үшін бір байттық қана бас жазуды қолданады, демек, өте аз қосымша шығындар туындайды. Бірақ, практикада жеке фрагменттер көбінесе араласпайды. Оның орнына, араласу және мультиплекстеу пакет деңгейінде жүзеге асырылады, бірнеше белсенді арна бойынша RTMP пакеттері өзара байланыстырылып, әрбір арнаның өткізу қабілеті, задерлілігі және басқа да қызмет сапасы талаптарына сәйкес келеді. Осылайша араластырылған пакеттер бөлінбес болып саналады және фрагмент деңгейінде араластырылмайды. RTMP пакеттерді жіберу және қабылдау үшін бір-бірінен тәуелсіз жұмыс істейтін бірнеше виртуалды арнаны анықтайды. Мысалы, RPC сұраныстарын және жауаптарды өңдеуге арналған арна, бейне ағыны деректері үшін арна, аудио ағыны деректері үшін арна, жолақты бақылаудан тыс хабарламалар үшін арна (фрагмент көлемін келісу және т.б.) бар. Типик RTMP сессиясы кезінде бірнеше арна бір уақытта белсенді болуы мүмкін. RTMP деректері кодталғанда пакет бас жазуы жасалады. Пакет бас жазуы, басқа мәселелермен қатар, оның жіберілетін арнасының идентификаторын, жасалған уақытының белгісін (қажет болса) және пакеттің жүктемесінің көлемін көрсетеді. Бұл бас жазудан кейін пакеттің нақты жүктемесі орналасады, ол қосылым арқылы жіберілгенге дейін ағымдағы келісім бойынша фрагмент өлшеміне сәйкес фрагменттеледі. Пакет бас жазуы ешқашан фрагменттелмейді және оның көлемі пакеттің бірінші фрагментіндегі деректерге қосылмайды. Яғни, тек пакеттің нақты жүктемесі (медиа деректері) ғана фрагменттеледі. Жоғары деңгейде RTMP MP3 немесе AAC аудио және FLV1 бейне мультимедиа ағындарын қамтиды және Action Message Format форматында қашықтықтан процедураларды шақыруға мүмкіндік береді. Кез келген RPC қызметтері асинхронды түрде, бір клиент/сервер сұранысы/жауап моделі арқылы жүзеге асырылады, сондықтан нақты уақыт байланысы қажет емес.

HTTP туннельдеу

RTMP Tunneled (RTMPT) жүйесінде RTMP деректері HTTP арқылы капсулаланып, алмастырылады, ал клиенттен (осы жағдайда медиа ойнатқыштан) келген хабарламалар сервердегі 80-ші портқа (HTTP үшін стандартты) жіберіледі. RTMPT-дегі хабарламалар HTTP тақырыптарының болуына байланысты, HTTP арқылы жіберілмейтін RTMP хабарламаларына қарағанда үлкен болғанымен, RTMPT, HTTP және HTTPS емес шығыс трафигін тоқтатып тастайтын қабырға қорғағыш (firewall) артында клиент орналасқан жағдайларда, HTTP арқылы жіберілмейтін RTMP-ді пайдалануға мүмкіндік береді. Протокол POST URL арқылы командаларды және POST мәндік бөлігі (body) арқылы AMF хабарламаларын жіберу арқылы жұмыс істейді. Мысалы:

POST /open/1 HTTP/1.1

қосылысты ашу үшін.

Анықтамалық құжат және патенттік лицензия

Adobe 2012 жылдың 21 желтоқсанында хаттаманың 1.0 нұсқасының сипаттамасын жариялады. Осы сипаттамаға сілтеме жасайтын веб-бетте «Өз мазмұнын қорғауды қалайтын клиенттер үшін ашық RTMP сипаттамасына Adobe-дің ерекше қауіпсіз RTMP шаралары кірмейді» деп көрсетілген. Adobe сипаттамасына қоса берілген құжат, хаттаманың барлық іске асырылымдарына «ексклюзивті емес, роялтисіз, берілмейтін, үшінші тарапқа лицензияланбайтын, жеке, бүкіл әлемдік» патенттік лицензия береді, екі шектеумен: бірі – ағынмен келетін деректерді ұстауға тыйым салады («кәндей-да бір құрылғыда немесе медиада сақтау үшін ағынмен келетін бейне, аудио және/немесе деректерді ұстап алатын кез келген технология»), ал екіншісі – «аудио, бейне және/немесе деректерді қорғауға арналған технологиялық шараларды, соның ішінде Adobe-нің қауіпсіз RTMP шараларын» айналып өтуге тыйым салады.

Патенттер және оларға байланысты сот ісі

Стефан Рихтер, Flash туралы бірнеше кітаптың авторы, 2008 жылы Adobe RTMP-ге қатысты қандай патенттер қолданылатыны туралы нақты мәлімдеме жасамайтынын, бірақ олардың бірі болуы мүмкін екенін атап өтті. 2011 жылы Adobe, Wowza Media Systems компаниясын сотқа берді, олардың ішінде RTMP патенттерін бұзу фактісі де болды. 2015 жылы Adobe және Wowza сот ісінің аяқталғанын және қайта қарастырылмауға жатқанын жариялады.

ServerBw/ClientBw хабарлама құрылымы (0x05, 0x06)

Бұл клиенттен жоғары ағын мен серверден төмен ағын бит жылдамдығына қатысты хабарламаларға байланысты. Хабарламаның мазмұны жолақтың енін көрсететін төрт байттан тұрады, және шектеу түрін анықтайтын қосымша бір байт болуы мүмкін. Бұл үш түрдің бірі болуы мүмкін: қатаң, жұмсақ немесе динамикалық (жұмсақ немесе қатаң).

Бөлшектің өлшемін орнату (0x01)

Денедегі төрт байттан алынған мән. 128 байт көлемінде әдепкі мән болады, және хабарлама өзгеріс қажет болған жағдайда ғана жіберіледі.

Қол алысу

TCP қосылысын орнатқаннан кейін, алдымен RTMP қосылысы құрылады, екі тараптан үш пакет алмасу арқылы қолдасу жүзеге асырылады (ресми құжаттамада Chunks деп те аталады). Бұлар ресми спецификацияда клиент жіберген пакеттер үшін C0 2 және сервер жағынан S0 2 деп аталады, оларды қолдасу толыққаннан кейін ғана алмастырылатын RTMP пакеттерімен шатастыруға болмайды. Бұл пакеттердің өзіндік құрылымы бар, ал C1 пакеті "эпоха" уақыт белгісін орнататын өріссіз емес, бірақ үшінші тараптық жүзеге асыруларда нөлге орнатылуы мүмкін болғандықтан, пакеттің құрылымын жеңілдетуге болады. Клиент қосылымды 0x03 тұрақты мәні бар C0 пакетін жіберу арқылы бастайды, бұл протоколдың ағымдағы нұсқасын көрсетеді. Ол S0 пакетін күтпей, бірден C1 пакетін жібереді, онда 1536 байт бар, алғашқы төртеуі эпохалық уақыт белгісін, келесі төртеуі нөлдерді, ал қалған бөлігі кездейсоқ мәндерді (немесе үшінші тараптық жүзеге асыруларда нөлдерді) қамтиды. C2 және S2 пакеттері S1 және C1 пакеттерінің қайталануы болып табылады, бірақ екінші төртеу байты тиісті хабарламаның қабылданған уақытын (нөлдің орнына) көрсетеді. C2 және S2 пакеттері алынғаннан кейін қолдасу толыққан болып есептеледі.

Видеоны орындау

Видео ағынын бастау үшін клиент "createStream" шақыруын, одан кейін пинг хабарламасын, содан кейін файл атауын аргумент ретінде беріп "play" шақыруын жібереді. Сервер бұған "onStatus" командаларының сериясымен және RTMP хабарламаларында қамтылған бейне деректерімен жауап береді. Қосылыс орнатылғаннан кейін, медиа мазмұны аудио үшін 8-ші, бейне үшін 9-шы типтегі RTMP хабарламаларына FLV тегтері арқылы енгізіліп жіберіледі.

rtmpdump

Ашық кодты RTMP клиенті rtmpdump командалық жол құралы, Adobe шифрлау үшін қолданатын RTMPE протоколының ішінде толық RTMP ағынын ойнатуға немесе дискіге сақтауға арналған. RTMPdump Linux, Android, Solaris, Mac OS X және көптеген басқа Unix негізіндегі операциялық жүйелерде, сондай-ақ Microsoft Windows жүйесінде жұмыс істейді. Бастапқыда Windows 98-ді қоса алғанда, 32 биттік Windows-тың барлық нұсқаларын қолдаған, бірақ 2.2 нұсқасынан бастап бағдарламалық қамтамасыз ету тек Windows XP және одан жоғары нұсқаларда жұмыс істейді (алдыңғы нұсқалар толыққанды жұмыс істей береді). rtmpdump бағдарламалық жасақтамасының пакеттері негізгі ашық кодты репозиторийлерде (Linux дистрибутивтерінде) қолжетімді. Оларға "rtmpdump", "rtmpsrv" және "rtmpsuck" алдыңғы интерфейс қолданбалары кіреді. RTMPdump-тың дамуы 2009 жылдың қазан айында АҚШ-тан тыс жерде, MPlayer сайтында қайта басталды. Ағымдағы нұсқасы функционалдық жағынан жақсартылған және C бағдарламалау тілінің мүмкіндіктерін пайдалану үшін қайта жазылған. Негізгі функционалдық кітапханаға (librtmp) енгізілген, оны басқа қолданбалар оңай пайдалана алады. RTMPdump әзірлеушілері MPlayer, FFmpeg, XBMC, cURL, VLC және басқа да ашық кодты жобалар үшін librtmp қолдауын жасады. librtmp-ны пайдалану осы жобаларға қосымша әзірлеу жұмысын қажет етпей, RTMP-нің барлық түрлерін толық қолдауды қамтамасыз етеді.

FLV-тірілгіші

FLVstreamer – RTMPdump-тің кодсыз жасалған түйінді нұсқасы, Adobe АҚШ-тағы DMCA заңын бұзады деп санайды. Бұл, Adobe компаниясының 2008 жылы RTMPdump-ты тоқтатуға жасаған әрекетіне жауап ретінде әзірленді. FLVstreamer – кез келген RTMP серверінен аудио немесе бейне ағынын дискіге сақтайтын RTMP клиенті, егер ағында шифрлау (RTMPE) қосылмаса.

Қосымша РТМП

RTMP-дегі Flash бейне контейнері көптеген жағдайларда H264 кодегімен шектеледі. Осы себепті, The Veovera Software Organization, оның ішінде Adobe, Google және Veriskope Flash Video контейнері FLV-де VP9, H265 және AV1 кодектерін қолдайтын жаңартталған RTMP спецификациясын жариялады.