Вывод видео с карты видео захвата в тег <video> html?

121
13 сентября 2019, 01:30

Есть устройство, к нему подключаем карту видео захвата (пока с ней, но в идеале напрямую через vga). Устройство и карта на стороне клиента. Как мне вывести видео в тег <video>?

Правильно ли я себе представляю работу такого ресурса:

  • Есть клиент, на котором устанавливается сервер
  • Есть удалённый сервер(ресурс), на котором есть html элемент для проигрывания онлайн видео
  • При переходе клиента в броузере на удалённый сервер он подгружает инструмент для просмотра онлайн видео (html страницу)
  • Загруженная страница с удалённого сервера делает запрос к локальному серверу (сервер на стороне клиента, например OpenServer) по определённому порту (Например: 127.0.0.1:3333) при помощи библиотеки hls.js
  • Локальный сервер отдаёт файлы .m3u8, предварительно закодировав их.

В итоге видео идущее с карты захвата можно просматривать в режиме онлайн.

UPD Накидал скриптик с html:

Выводит видео с карты видео захвата AverMedia DVD EZMaker 7 C039. Операционная система Ubuntu 18.04. Работает только в Chrome. В FF выдаёт ошибку:

MediaStreamError { name: "AbortError", message: "Starting video failed", constraint: "", stack: "" }

    const video = document.querySelector('#videoElement'); 
    navigator.mediaDevices.getUserMedia({ 
        audio: false, 
        video: true, 
    }).then(stream => { 
        video.srcObject = stream; 
    }).catch( error => { 
        console.error(error); 
    });
#container { 
  padding: 10px; 
  border: 1px solid grey; 
} 
video{ 
  border: 1px solid grey; 
}
<div id="container"> 
    <video autoplay="true" id="videoElement"> 
 
    </video> 
</div>

Answer 1

Ffmpeg стрим в hls в папку www. Создается плэйлист и фрагменты видео рядом. Ссылку на плейлист в тег видео.

Так как карта захвата на клиенте, то надо запустить ffmpeg в hls на клиенте. Заклинание это в одну строку, но есть пара вариантов. Дальше нужен на клиенте вэб сервер, чтоб это видео отдать в браузер. Если сайта не будет, то можно попробовать через file://

Средствами php только если снимать jpeg и слать в mjpeg.

Answer 2

Вам нужно организовать потоковую трансляцию на стороне web сервера.

Получаете с видеопоток с карты видеозахвата и отправляете его в сеть через web сервер. По другому в Вашем случае никак.

К сожалению, лично я не знаю готовых продуктов, которые поддерживали бы потоковую передачу с карт видеозахвата. Вполне вероятно, что всё необходимое ПО Вам придётся написать самостоятельно.

Это если плата на стороне сервера.

Если устройство на клиенте, ищите как "поженить" "видеозахват" с WebRTC. Или развернуть на клиенте ПО с web интерфейсом (дальше см. написанное про сервер).

READ ALSO
Как заставить цикл ждать событие?

Как заставить цикл ждать событие?

Начал учить JS и возникло желание написать небольшую игру, по типу "показывается цифра в блоке и вам нужно ее ввести за определенное время"Так...

137
fetch запрос POST

fetch запрос POST

Конструктор в классе Category:

146