视频流可以手动重新加载页面,但不能通过编程重新加载

时间:2018-12-07 04:25:31

标签: php html video-streaming raspberry-pi3

我有一个网页,在2个独立的iframe中显示来自2个USB网络摄像头的实时视频。有时这些流会死掉(也许是由于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>

这是Web页面定期调用的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实例,它们之间的睡眠时间为2s。

如果网页显示“重新启动!”命令,它将执行以下命令:

location.reload();
await sleep(2000);
location.reload();

第二次重新加载是尝试模拟实际有效的手动页面重新加载,但似乎没有任何作用。

0 个答案:

没有答案