Лучший подход к потоку RTSP в веб-браузере с IP-камеры?

Возможно ли получить данные RTSP Streaming в веб-браузере?

Ниже приведены некоторые мои выводы. Пожалуйста, поправьте меня, если я ошибаюсь?

  • Только Mac OS и Safari поддерживают RTSP Live Streaming.

  • Видео HTML 5 не поддерживает RTSP.

  • Я могу использовать плагин VLC, но я не хочу его использовать.

Возможность смешивания ffmpeg и websocket?

Предположим, что моя IP-камера подключена к Ethernet.

В клиентской машине:

  • Я запускаю ffmpeg для получения данных с сервера (т.е. IP)
  • Клиентская машина запускает websocket.
  • Как только ffmpeg получает данные с сервера RTSP, он декодирует и генерирует необработанное изображение любого формата (например: yuv).
  • Теперь я должен отправить это изображение в браузер через websocket.

Вопрос:

  • Это правильный подход?
  • Как получить декодированное изображение из ffmpeg в браузере?

Возможно, я ошибаюсь в разных местах. Просьба предоставить ввод.

Ответ 1

Здесь - это запись в блоге или учебник, если хотите, что достигает чего-то очень похожего.

Их настройка немного отличается, но это сводка:

используйте ffmeg, чтобы преобразовать ваш вход в mpeg1video:

ffmpeg  -i rtsp://whatever -f mpeg1video -b 800k -r 30 http://localhost:8082/yourpassword/640/480/

Установите node.js с помощью stream-server.js script из jsmpeg и ws ws пакет WebSocket.

Чтобы просмотреть поток, используйте stream-example.html и jsmpg.js из jsmpeg. Измените URL-адрес WebSocket в stream-example.html на localhost и откройте его в своем любимом браузере.

Обновить тема SO предлагает два других рабочих решения: <video> tag: stream-m Сервер Java или ffserver.

Ответ 2

Мне нужно показать потоки в разных платах и ​​браузерах. Чтобы сделать это без использования каких-либо pluggins (не уверен, что это будет работать на смартфонах и планшетах), используется подход, очень похожий на ваш. Задача ffmpeg crontab создает 3 изображения в секунду и хранится в каталоге. Используя Jquery, ajax-вызов php читает каталог и получает имя файла, чтобы изменить изображение (только изменяя атрибут src <img>), каждые 330 мс. Чтобы решить проблему хранения, используется другая задача crontab, которая удаляет файлы более 1 минуты. Это не настоящая потоковая передача, а перекрестный браузер и решает проблему довольно хорошо.

Задача ffmpeg

ffmpeg -i "rtsp://path/to/cam" -s 320x240 -f image2 -vf fps=fps=3 cache/%04d.jpg

Пример вызова ajax

$.ajax({
        url: '_read_dir.php',
        type: 'POST',
        dataType: 'json'
    })
    .done(function(result) {        
        $("#img_cam").prop('src',"cache/" + result.img);            
    });

Задача управления хранением

find /var/www/path/to/dir -mmin +1 -exec rm -f {} \;

Надежда может помочь!:)