Якщо ви хочете запустити платформу для трансляції відео з мінімальною затримкою, у вас буде вельми обмежена кількість протоколів потокового передавання даних для вирішення цього завдання. Водночас якщо в якості каналу передачі відеопотоку ви хочете використовувати інтернет, вибір буде ще меншим, оскільки вам потрібно буде подолати низку труднощів, наприклад - джиттер, лаги або втрата пакетів. У цій статті ми порівняємо два таких протоколи зв'язку - RTMP і RTSP, опишемо їхні переваги та недоліки, а також дамо деякі рекомендації щодо вибору найбільш підходящого для вас варіанту.
Якщо порівняти відео, які потрібно надіслати глядачам, з автомобілем, то протокол потокового передавання - це правила дорожнього руху і сама дорога, якою автомобіль переміщується з одного місця в інше. Якщо дорога хороша, машина без проблем доїде до своєї мети. Якщо ж на дорозі будуть вибоїни і ями, то рух триватиме довше, і машина може отримати пошкодження.
З відеоданими все так само: якщо протокол хороший, відеосигнал добереться до глядача з мінімальною затримкою і буде високої якості. Якщо ж протокол погано реалізовано або він не відповідає завданню, то відео на екрані глядача може "сипатися", часто перериватися для підзавантаження, містити артефакти, зовсім не вантажитися або аудіо- та відеосигнали будуть розсинхронізовані.
Різні протоколи потокової передачі даних орієнтовані на різні аспекти потоку (завдання). Зазвичай їх ділять на протоколи з адаптивним бітрейтом, які націлені на зменшення затримок і буферів для відеопотоку, і ті, що спрямовані на максимальне скорочення затримки, що дає змогу передавати відеосигнал глядачам практично в реальному часі - live streaming.
RTMP і RTSP - це, мабуть, два найпоширеніші протоколи, орієнтовані на стримінг відео з мінімальною затримкою. І хоча вони створені для досягнення схожих цілей, при пильному порівнянні між ними легко виявити суттєві відмінності, які важливо знати.
Протокол обміну повідомленнями в реальному часі, або RTMP - це стандартизований протокол для передачі мультимедійних даних через інтернет. Цю технологію розробила Macromedia (нині належить Adobe), і спочатку її використовували для передавання даних між RTMP-сервером і Flash-плеєром на пристрої користувача. Зараз Flash більше не використовується через проблеми з безпекою, але RTMP все ще популярний.
Як протокол зв'язку технологія RTMP націлена на забезпечення стабільного і плавного передавання зростаючих обсягів даних, необхідних для передавання і приймання відео в реальному часі. Що досягається за допомогою фрагментування потоку даних на невеликі однакові частини (за замовчуванням становлять 64 байти для аудіоданих і 128 байт для відеоданих) та їхнє послідовне передання на приймаючий пристрій, який потім знову збирає їх у відеопотік.
Після того як Flash застарів 2020 року (Google та інші великі гравці повністю припинили підтримку Adobe Flash Player), RTMP почали використовувати як протокол із відкритим вихідним кодом для внеску першої милі (передавання від кодувальника до мережевого відеохосту). Саме таким чином RTMP зараз використовує Facebook, YouTube, Periscope і більшість інших платформ.
Наразі RTMP існує у 5 варіантах:
Як правило, пряма відеотрансляція працює так: камера знімає відео (або відеокарта захоплює екран) та надсилає його на хост або сервер відеоплатформи через кодувальник (цей етап зазвичай називають "першою милею"). Потім сервер або відеоплатформа обробляє цей потік і передає його далі через мережу доставки контенту (CDN) для поширення відеопотоку на пристрої користувачів (це "остання миля"). Коли ще працював Flash, обидва ці етапи проходили за допомогою RTMP, але відтоді, як Flash застарів, RTMP більше не працює на "останній милі". З цього моменту потік повинен перехопити інший протокол зв'язку (HLS, MPEG-DASH, CMAF або WebRTC).
Доставку пакетів RTMP здійснює за кілька секунд у три етапи:
Для забезпечення плавного та узгодженого потокового передавання даних RTSP використовує два інших мережевих протоколи зв'язку - TCP для видачі та приймання команд управління (наприклад, запиту на відтворення або зупинку) і UDP (протокол користувацьких датаграм) для доставки аудіо, відео та даних. Завдяки цьому клієнт може почати відтворювати RTSP-потік під час завантаження потоку.
Хоча RTSP можна використовувати як для прямих трансляцій, так і для передавання відео за запитом, наразі його зазвичай використовують на останній милі для передавання відеопотоку з хмари до програвача пристрою користувача, оскільки цей протокол дає змогу глядачеві відтворювати, призупиняти та перемотувати відео. Крім того, RTSP також популярний у системах, де потрібно передати відеосигнал з камер по IP, наприклад з IP-камер або камер відеоспостереження.
Щойно пристрій (плеєр) дізнається список команд і як зробити запит, він передає запит опису відеоконтенту на сервер потокової передачі, і сервер відповідає описом цього мультимедіа. Далі пристрій надсилає запит на завантаження, а сервер відповідає інформацією про транспортний механізм, і далі ініціюється процес потокового передавання відео через зазначений механізм.
Оскільки RTSP залежить від виділеного сервера і покладається на RTP, цей протокол не підтримує шифрування відеоконтенту або повторну передачу втрачених пакетів. Крім того, RTSP не сумісний з HTTP, отже, він не дає змоги безпосередньо відтворювати відеопотік у веб-браузері. Для цього потрібно конвертувати відеопотік через спеціальний проміжний сервер.
У переважній більшості випадків вибір між RTMP і RTSP визначається завданням проекту і пристроями, використовуваними для потокової передачі відео в реальному часі. Ось кілька рекомендацій про те, коли який протокол потокового передавання відео краще використовувати у вашому випадку.
IP-камери → RTSP. Практично всі IP-камери підтримують RTSP, що обумовлено тим, що IP-камери існували задовго до створення протоколу RTMP. І оскільки RTSP був (і залишається) досить простим і ефективним інструментом для передавання відеосигналу, немає необхідності щось змінювати.
У зв'язці RTSP і IP-камери, сама IP-камера діє як RTSP-сервер. Це означає, що для під'єднання відеокамери до сервера IP-камери і трансляції відео необхідно запустити RTSP-клієнт, наприклад, за допомогою Restreamer Red5 Pro. Цей плагін дає змогу під'єднатися до потоку як клієнту та перенаправити його на інші кінцеві точки, що підтримують Red5 Pro (браузер, що працює з WebRTC).
IoT-пристрої → RTSP або RTMP. Датчики, дрони, роботи, машини та інші пристрої Інтернету речей можуть виграти від можливості транслювати відео в реальному часі. Оскільки така трансляція не тільки покаже, що "бачить" IoT-пристрій, а й дасть змогу керувати ним у реальному часі. Добре, що в більшість цих пристроїв від початку вбудовано програмне забезпечення з підтримкою RTSP. Однак деякі виробники, такі як DJI, віддають перевагу RTMP.
Red5 Pro Mobile SDK → RTSP. Зазвичай мобільні пристрої не підтримують RTSP. Однак його можна легко додати за допомогою Red5 Pro Mobile SDK, який використовує RTSP для трансляції відеоконтенту в реальному часі на мобільні пристрої та назад через додаток Red5 Pro. Таким чином можна створювати як окремі з'єднання джерело-глядач, так і вести велику кількість трансляцій до великої кількості глядачів (передплатників стримера).
YouTube, Twitch, Facebook → RTMP. Незважаючи на відмову від Flash Media Player, RTMP досі використовується як протокол приймання в багатьох сторонніх потокових сервісах і додатках, наприклад, у YouTube Live, Twitch і Facebook. У Zoom також вбудована підтримка виведення відео потоку за RTMP.
Старий апаратний кодувальник → RTMP. Багато апаратних кодувальників відео (особливо це актуально для старих пристроїв) приймають тільки RTMP-потоки. Якщо ваше завдання / проєкт вимагає використання такого кодувальника, то вибір між RTMP і RTSP для вас буде очевидний.
Суперечки про те, який протокол потокового передавання кращий - RTMP або RTSP, тривають уже понад двадцять років, і, схоже, їм не буде кінця, поки один із протоколів не застаріє остаточно. Що, найімовірніше, станеться ще нескоро через різке зростання кількості влогерів, стримерів та інших ентузіастів live-трансляцій.
Щоправда, якщо подумати, вам не обов'язково вибирати між одним із цих протоколів потокового відео. Обравши надійного технічного партнера, такого як компанія-розробник Merehead, ви можете розробити рішення, яке вбере в собі найкраще з цих двох протоколів і омине їхні недоліки. Кастомна розробка потребуватиме трохи більше часу та ресурсів, ніж готові рішення, але в довгостроковій перспективі вона все одно буде більш вигідною.