Як можна відобразити відеопотік RTSP на веб-сторінці?


95

У мене є ip-камера, яка забезпечує прямий потік відео RTSP. Я можу використовувати медіаплеєр VLC для перегляду стрічки, надавши їй URL-адресу:

rtsp://cameraipaddress

Але мені потрібно відображати стрічку на веб-сторінці. Постачальник камери поставив елемент керування ActiveX, який я працював, але він дійсно глючить і змушує браузер часто зависати.

Хто-небудь знає про будь-які альтернативні відео-плагіни, якими я міг би скористатися, які підтримують RTSP?

Камеру можна налаштувати для потокової передачі у форматі H264 або MPEG4.


1
Я також вивчав цю можливість з моїми кількома камерами RTSP, і я не хочу ніяких елементів керування ActiveX. Я хотів би створити власний веб-сервер, на якому веб-сторінка постійно отримує зображення JPEG для відображення на веб-сторінці. Таким чином його можна підтримувати в таких браузерах, як Safari, і переглядати на iPhone.
Джеррі Додж


@JerryDodge Я спробував ідею з Java WebSocket Server, який щосекунди надсилає ім'я файлу зображення у вигляді рядка, наприклад "photo1.jpeg" до веб-браузера. JavaScript у веб-браузері використовує ім'я файлу для встановлення srcатрибута <img>тегу HTML. Він працює, але дуже повільно, що не схожий на потокове відео. Ви вже спробували свою ідею? Це працює швидко?
О Коннор,

@OConnor Для дуже базового рівня з низькою частотою кадрів найкраще для клієнта тягнути, ніж для сервера. Також розглянемо TCP проти UDP. У них обох є свої плюси і мінуси. Клієнту найпростіше запитувати нове зображення, коли це потрібно.
Джеррі Додж

Відповіді:


28

VLC також постачається з плагіном ActiveX, який може відображати стрічку на веб-сторінці:

http://wiki.videolan.org/ActiveX/HTML

<OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"
     codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab"
     width="640" height="480" id="vlc" events="True">
   <param name="Src" value="rtsp://cameraipaddress" />
   <param name="ShowDisplay" value="True" />
   <param name="AutoLoop" value="False" />
   <param name="AutoPlay" value="True" />
   <embed id="vlcEmb"  type="application/x-google-vlc-plugin" version="VideoLAN.VLCPlugin.2" autoplay="yes" loop="no" width="640" height="480"
     target="rtsp://cameraipaddress" ></embed>
</OBJECT>

2
Для запису, на цей момент VLC Media Player був побудований 774 розробниками.
Джеррі Додж

15
chrome заблокував плагіни npapi після 1 вересня 2015 р. він більше не працює.
user2988855

1
посилання axvlc.cab мертве
hailinzeng

що робити, якщо плагін заблоковано будь-яким іншим доступним альтернативним рішенням?
naveenkumar.s

18

Показати прямий відеопотік з IP-камери на веб-сторінці непросто, оскільки вам потрібна широка пропускна здатність Інтернету та чудовий відеоплеєр, сумісний з основними браузерами.

Але на щастя, є деякі хмарні служби, які можуть виконати цю роботу за нас. Одним з найкращих є IPCamLive . Ця послуга може приймати відеопотік RTSP / H264 з IP-камери і може транслювати його глядачам. IPCamLive має компонент відеопрогравача Flash / HTML5, який відображатиме відео на ПК, MAC, планшеті чи мобільному телефоні. Найкраще те, що цей сайт генерує необхідний фрагмент HTML для вбудовування відео в прямому ефірі так:

<iframe src="http://ipcamlive.com/player/player.php?alias=szekesfehervar" width="800px" height="600px"/>

Тому нам просто потрібно скопіювати вставте його у наш HTML-файл без будь-яких змін.


1
Це круто. Настільки необхідне рішення.
Zakir HC

Оновлення: мабуть, зараз не працює. Показує це: "Цю камеру не можна вбудовувати. Для вбудування перейдіть на стандартний або професійний пакет."
muglikar

1
Все, що вам потрібно зробити, це оновити вашу камеру до стандартного / професійного пакету, і ви зможете вбудувати свою камеру у свою веб-сторінку.
Adorjan Princz

17

Приблизно у вас є 3 варіанти відображення потоку відео RTSP на веб-сторінці:

  1. Справжній гравець
  2. Швидкий програвач
  3. Програвач VLC

Ви можете знайти код для вставки ActiveX за допомогою пошуку Google.

Наскільки мені відомо, для кожного гравця існують певні обмеження.

  1. Realplayer спочатку не підтримує відео H.264, для встановлення декодування H.264 потрібно встановити плагін швидкого доступу для Realplayer.
  2. Програвач Quicktime не підтримує транспорт RTP / AVP / TCP, а транспорт RTP / AVP (UDP) не включає пробивання отворів NAT. Таким чином, єдиним можливим транспортом є тунелювання HTTP при розгортанні глобальної мережі.
  3. VLC не підтримує пробивання отворів NAT для транспортування RTP / AVP, але доступний транспорт RTP / AVP / TCP.

2
Останні версії Quicktime Player припинили підтримку RTSP, починаючи з Mavericks.
Mike

тотем на linux / ubuntu також підтримує потік rtsp
Окі Ері Рінальді,

8

Якщо ви хочете транслювати RTSP безпосередньо на веб-сторінку, я боюся, що єдиним вашим варіантом є використання засобу перегляду елементів керування ActiveX, який постачається з камерою. Це пряме з'єднання IP Cam -> Viewer, і насправді має бути найшвидшим. Не впевнені, чому у вас виникають проблеми; Axis ActiveX для мене працює досить добре.

Однак ця опція насправді не ефективно використовувати пропускну здатність, і ви не можете обслуговувати декілька одночасних глядачів (більшість IP-камер мають обмеження у 10 глядачів). Кращим варіантом є завантаження одного потоку RTSP на централізований сервер потокового передавання, який перетворить ваш потік на RTMP / MPEG-TS і опублікує його у програвачах Flash / телеприставках.

Wowza, Erlyvideo, Unreal Media Server, Red5 - це ваші варіанти.


Це, безумовно, шлях. Покращене управління пропускною здатністю, а також перекодування у формат, придатний для Інтернету, наприклад, RTMP для флеш-плеєра. Хто-небудь має досвід використання будь-якого з вищезазначених медіасерверів і може детальніше розповісти про простоту налаштування, продуктивності, затримки тощо? Я пробував з Red 5, але виявив, що деякі речі трохи складні, щоб працювати.
elMarquis

8

Знайшов просте та робоче рішення з офіційної документації VLC для веб-плагіна

https://wiki.videolan.org/Documentation:WebPlugin/

Трохи змінив код і змусив його працювати. Ось мій код-

<embed type="application/x-vlc-plugin" pluginspage="http://www.videolan.org" autoplay="yes" loop="no" width="300" height="200" target="rtsp://10.20.50.15:554/0/888888:888888/main" />
<object classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921" codebase="http://download.videolan.org/pub/videolan/vlc/last/win32/axvlc.cab" style="display:none;"></object>

Примітка: У наведеному вище фрагменті використовується rtspформат url, який підтримується моєю IP-камерою. Тож вам потрібно отримати те саме для вашої камери. Ви можете отримати цю інформацію, звернувшись до служби підтримки постачальника камер. Також майте на увазі, що я тестував його в Chrome (за допомогою плагіна ActiveX для Chrome), і інші браузери (включаючи браузери мобільних телефонів) можуть не підтримуватися.


3
майте на увазі, що у деяких вікнах ви знайдете лише лайно ActiveX, а не "рішення", як ви його називаєте, і воно не буде працювати ні на чому іншому (реальні ОС, мобільні телефони, консолі тощо).
nonchip

@nonchip ах ну, я думаю, у вас є краще рішення проблеми. Більше того, я протестував плагін і на телефонах Android, так що це не лише Windows . І в будь-якому випадку, я б дуже хотів знати, яку альтернативу між платформами ви маєте на увазі для відображення стрічок із камер відеоспостереження.
Свастик Падхі

вибачте, але це брехня. вбудований вами Activex - за визначенням - лише виграш. те, що робить chrome на android, - це розпізнавати x-vlc-plugin, ігнорувати власні речі і просто натиснути на додаток vlc. також про крос-платформні альтернативи, про які ви згадали: єдиним поточним рішенням буде використання ffmpeg / avconv / etc на веб-сервері для перепакування потоку rtsp до http / websocket / webrtc. тоді просто додайте <video>тег, і все готово.
nonchip

1
потік не відтворюється, можливо ця проблема (кодова база) http://download.videolan.org/pub/videolan/vlc/last/win32/axvlc.cab404 не знайдена
Вара Прасад

7

Також ви можете спробувати OpenSource WebRTC Media Server Kurento

Який може відтворювати відеопотік RTSP і відправляти його в WebRTC або перекодувати в RTMP або зберігати на сервері.

Ми використовуємо його на виробництві для таких випадків:

 - WebRTC до Webrtc (багато до багатьох)
 - WebRTC до RTMP
 - RTSP на WebRTC

1
посилання більше не працює, в будь-якому випадку, дякую за інформацію.
medskill

посилання резервне копіювання @medskill
activedecay

5

Wowza

  1. Повторне потокове передавання RTSP на RTMP (Flash Player) Не працює з Android Chrome або FF (Flash не підтримується)
  2. Повторне потокове передавання RTSP до HLS

Сервер веб-дзвінків (Flashphoner)

  1. Потокове передавання RTSP до WebRTC (функція власного браузера для Chrome та FF на Android або на робочому столі)

  2. Потокове передавання RTSP на веб-сокети (iOS Safari та Chrome / FF Desktop)

Погляньте на цю статтю .


Це справді чудова стаття. Flashphoner виглядає перспективним рішенням.
elMarquis

3

Я знаю, що ця публікація застаріла, але днями я шукав щось дуже схоже (перегляньте відео-канал RTSP моєї IP-камери на простій HTML-сторінці без будь-яких вишуканих плагінів ActiveX). Пощастило мені, я знайшов рішення! Він базується на ffmpeg, NodeJS, NGINX (не обов'язково, але корисно) та Node Media Server .

Опис у посиланні детальний та простий у виконанні, але мені все-таки довелося вирішити кілька налаштувань, перш ніж я запрацював (щодо кінцевих точок на сервері NodeJS). Я власноруч поставив для нього запитання і отримав гарну та робочу відповідь .


3

Спробуйте програвач QuickTime! Ось мій JavaScript, який генерує вбудований об’єкт на веб-сторінці та відтворює потік:

//SET THE RTSP STREAM ADDRESS HERE
var address = "rtsp://192.168.0.101/mpeg4/1/media.3gp";

var output = '<object width="640" height="480" id="qt" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab">';
    output += '<param name="src" value="'+address+'">';
    output += '<param name="autoplay" value="true">';
    output += '<param name="controller" value="false">';
    output += '<embed id="plejer" name="plejer" src="/poster.mov" bgcolor="000000" width="640" height="480" scale="ASPECT" qtsrc="'+address+'"  kioskmode="true" showlogo=false" autoplay="true" controller="false" pluginspage="http://www.apple.com/quicktime/download/">';
    output += '</embed></object>';

    //SET THE DIV'S ID HERE
    document.getElementById("the_div_that_will_hold_the_player_object").innerHTML = output;

Дякую. Я вивчив опцію швидкого завантаження, але з нею були дуже погані затримки.
elMarquis

Це через 3-секундний буфер QuickTime ... це мене теж дратує ... Ей, якщо ви знайдете щось інше, що працює, будь ласка, розмістіть тут! До побачення!
Cipi

2
Привіт, у вас є помилка, пізніше "адреса" пишеться як "адреса". Вітаємо
Клінтон Грін

3
Чому це написано на JavaScript?
Томас Беннетт,

@ Клінтон: Виправлено.
AlastairG

2

Перевірте бібліотеку медіа-потоків від Axis, яка передає інформацію про розширення Медіа-джерело

Вони реалізують конвеєр, схожий на Gstreamer в JS, з оплатою h264. Примітка: потокове споживання в js не є безпосередньо rtsp, а інкапсульоване в ws: // самою бібліотекою на проксі-сервері node.js rtsp-websocket.


2

Я опублікував проект на Github, який допоможе вам транслювати ip / мережеву камеру до веб-браузера в режимі реального часу без використання плагіна, і я зробив внесок у проект з відкритим кодом під ліцензією MIT, який може відповідати вашим потребам. Ось:

Потокове передавання IP / мережевої камери у веб-браузері за допомогою NodeJS

Повного пакету фреймворку поки що немає, але це кікстарт, який може дати вам можливість рухатися далі.
Будучи студентом, я сподіваюся, це буде корисним і, будь ласка, внесіть свій вклад у цей проект.


2

Одним із варіантів було б використання якогось потокового сервера / шлюзу. Я спробував різні рішення (vlc, ffmpeg та ще кілька), і найкращим для мене працював сервер Janus WebRTC. Це дещо складно налаштувати, і вам доведеться компілювати його з джерела (коли я спробував, версія в репозиторіях Ubuntu не підтримувала RTSP), але вони мають докладні інструкції зі складання та документацію про те, як все налаштувати.

Мені вдалося отримати відео та аудіо стрічку з 3 камер FullHD у локальній мережі з дуже невеликими затримками. Я можу підтвердити, що це працює з камерами Dahua та Hikvision (не впевнений, чи всі моделі).

Я використовував Ubuntu Server 18.04, на якому працював веб-сервер Apache, і Chrome як браузер (він не працював у Firefox за замовчуванням, але, можливо, для цього є шляхи вирішення).


1

Microsoft Mediaplayer може зробити все, що вам потрібно. Я використовую MS Mediaservices 2003/2008 Server для передачі відео у форматі Broadcast та Unicast Stream. Ця служба може ОТРИМАТИ потік з камери та транслювати його. Потім у вас є "лише" проблема "відобразити" цю картинку у ВСІХ браузерах на всіх ОС-системах

Моя порада: спочатку перевірте ОС, а потім завантажте плагін. на Windows легко взяти WMP, на інших візьміть MS Silverligt ...


1

Для таких цілей я використовую VLC як сервер перерозподілу. Ви сказали, що зможете зловити відео за допомогою VLC? Клацніть правою кнопкою миші на носії у VLC, виберіть "потік" та виберіть свої параметри. Ви також можете зробити це за допомогою командного рядка, який дає вам потенційні переваги різних опцій (перекодування, масштабування, стиснення, деінтерлейсинг). Ось пакет, який розпочинає розповсюдження VLC від джерела до власного порту 555 (тому вам потрібно буде ввести rstp: // myvlcserveripaddress: 555 у вашому параметрі src на веб-сторінці, щоб отримати потік)

cd \
cd C:\Program Files (x86)\VideoLAN\VLC\

vlc --logo-file C:\logo.png --logo-position 5 --logo-opacity 200 --logo-x 900 --logo-y -2 "mmsh://typeyoursourceIPhere:554" :sout=#transcode{vcodec=div3,vb=800,scale=0,acodec=mpga,ab=128,channels=2,samplerate=44100}:duplicate{dst=rtp{mux=ts,sdp=rtsp://:555/stream}} :sout-all :sout-keep

Тут у вас є зразок веб-сторінки, яка вбудовує програвач (на основі плагіна VLC).


-7

Всі вищезазначені рішення не працюють більше або занадто трудомістко, щоб зрозуміти.

Це остаточна відповідь. Ви можете вставити посилання rtsp на свій веб-сайт.

Скопіюйте наведений нижче код у свій редактор html:

<!--- BEGIN PLAYER --->

<!-- webbot bot="HTMLMarkup" startspan ---->

<object ID="MediaPlayer" WIDTH="320" HEIGHT="270" CLASSID="CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95" STANDBY="Loading Windows Media Player components..." TYPE="application/x-oleobject" CODEBASE="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,7,1112">

<param name="autoStart" value="True">

<param name="filename" value="rtsp://xxx.xxx.xxx:xxxx">

<param NAME="ShowControls" VALUE="False">

<param NAME="ShowStatusBar" VALUE="False">

<embed TYPE="application/x-mplayer2" SRC="rtsp://xxx.xxx.xxx:xxxx" NAME="MediaPlayer" WIDTH="320" HEIGHT="270" autostart="1" showcontrols="0"></embed></object>

<!-- webbot bot="HTMLMarkup" endspan ---->

<!--- end PLAYER --->

Якщо все це занадто складно і все ще не вирішує, дозвольте мені допомогти вам.

Я зробив це для своїх клієнтів.

Клацніть тут http://www.mhcreative.com.my/ipcameratowebsite/


Дивно, але це завершує вбудовування VLC Media Player, чи не тому, що VLC вважається "медіапрогравачем за замовчуванням" для веб-сторінок?
Джеррі Додж

Зачекайте, це WMP, я припускаю, що це буде працювати лише в Windows.
Джеррі Додж

2
реалізація вашого сайту - це не те, що ви описали у своїй відповіді. Ви використовуєте послугу click2stream, будь ласка, змініть свою відповідь, оскільки ми витрачаємо час. Ви говорите про інші, які не працюють, але ваше рішення не існує.
stefan2410

3
Дивно, що ви пишете: "Це остаточна відповідь". Що можна сказати про те, щоб бути смиренним, особливо коли відмовляєшся від відповіді з такою відсутністю якості?
Pille

1
Цей підхід використовує активний елемент керування x (для IE 10 і нижче), а потім повертається до іншого плагіна для інших браузерів. Як уже згадувалося, в більшості випадків, здається, вбудований медіаплеєр VLC. Це не страшний підхід, але змусити користувачів встановити плагін завжди буде трохи невдалим. З іншого боку, якщо у вас обмежена аудиторія і ви можете диктувати їх налаштування, такий підхід може бути нормальним.
elMarquis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.