У меня есть веб-страница, которая отображает видео в реальном времени с 2 веб-камер USB в 2 отдельных iframe
с.Иногда эти потоки умирают (возможно, из-за глюков USB), поэтому каждые несколько секунд программа PHP проверяет, запущены ли их процессы.Если нет, он запускает скрипт bash для перезапуска экземпляров mjpg_streamer
и запускает JavaScript для перезагрузки веб-страницы.
Все это работает, за одним исключением: при перезапуске стримеров работает только один из них.Чтобы заставить работать другой, мне нужно вручную перезагрузить страницу в браузере.Это довольно последовательно и воспроизводимо.
Это элементы, которые отображают потоки:
<div class="left_frame" id="left_frame">
<iframe
scrolling="no"
width="640"
height="480"
src="http://10.0.0.172:8085/javascript_simple.html"
frameborder="0"
allowfullscreen>
</iframe>
</div>
<div class="right_frame" id="right_frame">
<iframe
scrolling="no"
width="640"
height="480"
src="http://10.0.0.172:8086/javascript_simple.html"
frameborder="0"
allowfullscreen>
</iframe>
</div>
Это скрипт PHP, который периодически вызывается веб-страницей и подсчитывает количество экземпляров работающих потоков:
if ($bash_result < 2) { //if there is only 1 (or zero) instances of mjpg_streamer currently running, attempt to reboot.
$vidStop = exec("/etc/init.d/videocastinit stop");
$sleepCmd = exec("sleep 1s");
$vidStart = exec("/etc/init.d/videocastinit start");
echo "reboot!";
} else {
echo "mjpg_streamer ok";
}
Вызов сценария videocastinit stop
просто выполняет killall
, а команда start
запускает 2 экземпляра mjpg_streamer
на разных портах с 2-секундным сном между ними.
Если веб-страница получает "перезагрузку!"команда, она выполняет это:
location.reload();
await sleep(2000);
location.reload();
Вторая перезагрузка - попытка смоделировать перезагрузку страницы руководства, которая действительно работает, но, похоже, ничего не делает.