Лучший подход, чтобы получить RTSP потокового в веб-браузер с IP-камеры?
можно ли получить потоковые данные RTSP в веб-браузере?
Ниже приведены некоторые из моих выводов. Пожалуйста, поправьте меня, если я ошибаюсь?
только Mac OS, и Safari поддерживает RTSP Live Streaming.
HTML 5 видео не поддерживает RTSP.
Я могу использовать плагин VLC, но я не хочу его использовать.
возможность смешивания ffmpeg а websocket?
предположим, что моя IP-камера подключена к Ethernet.
на клиентской машине:
- я запускаю ffmpeg, чтобы получить данные с сервера (т. е. IP)
- клиентская машина запускает websocket.
- как только ffmpeg получает данные с RTSP-сервера, он декодирует и генерирует raw-изображение любого формата (например: yuv).
- теперь я должен отправить это изображение в браузер через websocket.
вопрос:
- это правильный подход ?
- как я могу получить декодированное изображение из видео в браузере ?
Я могу ошибаться в разных местах. Просьба представить информацию.
2 ответов
здесь это запись в блоге или учебник, если хотите, который достигает чего-то очень похожего.
их установка немного отличается, но это резюме:
использовать ffmeg
для преобразования входных данных в mpeg1video:
ffmpeg -i rtsp://whatever -f mpeg1video -b 800k -r 30 http://localhost:8082/yourpassword/640/480/
установить node.js
С stream-server.js
скрипт jsmpeg и ws
пакет WS WebSocket.
для просмотра потока используйте stream-example.html
и jsmpg.js
С jsmpeg. Измените URL WebSocket в stream-example.html
to localhost
и откройте его в своем любимом браузере.
обновление an вот тема предложите два других рабочих решения, с тегом
мне нужно показать потоковую передачу в разных plataforms и браузерах. Чтобы сделать это без использования каких-либо плагинов (не уверен, что он будет работать на смартфонах и планшетах), используется подход, очень похожий на ваш. Задача ffmpeg crontab создает 3 изображения в секунду и сохраняет их в каталоге. Используя Jquery, вызов ajax на php считывает каталог и получает имя файла, чтобы изменить изображение (только изменение атрибута 'src'<img>
), каждые 330ms. Чтобы решить проблему хранения, используется другое задача 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 {} \;
надеюсь, смогут помочь! :)