我有一个网页,在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();
第二次重新加载是尝试模拟实际有效的手动页面重新加载,但似乎没有任何作用。