Эту главу можно считать вспомогательной относительно самого jCjS, так как в ней мы будем использовать jCjS просто для отдачи текста HTML страницы. Однако это будет не обычная HTML страница, эта страница будет содержать настоящую видеотрансляцию c Вашей USB веб-камеры! Зачем это описывать здесь? Дело в том, что в дальнейшем мы рассмотрим как с помощью jCjS управлять этой трансляцией, а именно управлять поворотной платформой камеры, запускать процесс трансляции, устанавливать параметры трансляции, анализировать поступающие кадры и многое другое. А пока мы вкратце рассмотрим замечательный инструмет проигрыватель-транслятор VLC. Как его установить описано здесь
Установим VLC, - такой видео комбайн, написанный французкими студентами, также подсоединим веб-камеру. Запустим VLC, далее в нем откроем источник: видео: Медиа -> Открыть Источник -> Устройство Захвата -> Video for Linux 2. Назначаем файл устройства /dev/video0, также выберете аудио устройство. Жмем кнопку "Воспроизвести" и убеждаемся, что все работает. Останавливаем и переходим к настройке трансляции.
Медиа -> Передавать -> Устройство Захвата - все то же самое, далее внизу жмем кнопку "Поток", откроется окно мастера, первое окно ничего не настраиваем, кнопка "Следующий". Во вкладке "Destination" выбираем поток по HTTP протоколу и рядом жмем кнопку "Добавить". Появится новая вкладка в которой мы видим, что VLC хочет занять для трансляции порт 8080. Этот порт у нас должен слушать jCjS, поэтому меняем его на 8000 (можно и другой). Жмем кнопку "Следующий", оставляем как есть. Жмем кнопку "Поток", трансляция началась. Чтобы проверить, что трансляция действительно имеет место быть, запустим второй экземпляр программы VLC и в Медиа -> Открыть URL... набираем http://127.0.0.1:8000. Должна появится картинка со звуком. Это многоадресная раздача видео, проверьте что картинка имеет место быть и с удаленной машины.
Для нас представляется более интересным запуск такой же трансляции из командной строки, так как jCjS шелкать по экрану мышью не умеет, но умеет запускать внешние приложения, поэтому все, что мы сделали выше для запуска трансляции производится одной командной строкой терминала
cvlc v4l2:///dev/video0 :input-slave=alsa:// --sout "#transcode{vcodec=h264,vb=0,scale=0,acodec=mpga,ab=128,channels=2,samplerate=44100}:http{mux=ffmpeg{mux=flv},dst=:8000/}" --sout-keep
Копируем, пробуем. Возможно, что что-то пойдет не так, это конечно плохо и разъяснить причины ошибок запуска здесь не представляется возможным, так как тема трансляции - очень обширная тема: куча кодеков, транспортов, мультиплексоров и каждый из них имеет свои параметры. Придется изучать эту тему по документации и форумам. Если все же с трансляцией камеры дела идут плохи (или нет камеры), попробуйте протранслировать файл, это больше имеет права на успех, так как не используется перекодирование, т.е. параметров меньше:
сvlc ~/1.mp4 --sout '#duplicate{dst="standard{access=http,mux=flv,dst=:8000}"}'
Файл 1.mp4 находится в корне локальной папки пользователя. Итак допустим, что у Вас все получилось, теперь нам нужно добиться запуска трансляции через jCjS.
Перенесем строку запуска трансляции VLC предыдущего примера в инициализирующий срипт следующим образом
post.stream = new Process();
post.stream.start('cvlc v4l2:///dev/video0 :input-slave=alsa:// --sout "#transcode{vcodec=h264,vb=0,scale=0,acodec=mpga,ab=128,channels=2,samplerate=44100}:http{mux=ffmpeg{mux=flv},dst=:8000/}" --sout-keep');
Командный скрипт
(function() {
if(http.argCnt == 0 && http.pathCnt == 0) {
http.respTmplFile('stuff@examples/videostream/tmp.html');
return;
}
http.respError(404);
})();
выдает HTML страницу, содержащую следующий текст
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Пример видеотрансляции VLC</title>
</head>
<body>
<h1>Пример видеотрансляции VLC</h1>
<embed type="application/x-vlc-plugin" name="video"
autoplay="yes" loop="yes" width="640" height="480"
target="http://62.182.51.71:8000" />
</body>
</html>
Запускаем jCjS. Видео на странице появляется не сразу. На удаленной машине могут возникнуть проблемы с поиском подходящего плагина, которая решается установкой плагина самого VLC и x-vlc-plugin.
sudo apt-get install vlc browser-plugin-vlc