Видеопотоки работают с ручной перезагрузкой страницы, но не с запрограммированной перезагрузкой - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть веб-страница, которая отображает видео в реальном времени с 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();

Вторая перезагрузка - попытка смоделировать перезагрузку страницы руководства, которая действительно работает, но, похоже, ничего не делает.

...