前回のままだと、クライアント側(ブラウザ)を撮影中に閉じてしまうと、動画撮影を終了する人がいなくなってしまいます。
これを防ぐためには、クライアントが生存していることを常に確認する処理が必要になります。
まぁ、今回はプレビュー画面で常にデータのやりとりを行っているので、これを利用しましょう。
def do_GET(self):
parsed = urlparse(self.path)
if parsed.path == '/Streaming':
global lasttime
lasttime = time.time()
enc = sys.getfilesystemencoding()
プレビュー画をリクエストがあったら、その時間を記憶しておきます。
def videoCapture():
global capture
global out
while capture:
nowtime = time.time()
if nowtime - lasttime > 10:
capture = False
out.release()
out = None
break
_, img = cap.read()
out.write(img)
ビデオキャプチャーの周期処理の中で、現在時刻と、プレビュー画要求時の時刻を比較します。
周期処理の時刻がキャプチャー時の時刻より10秒経過していたら撮影を終了します。
ブラウザを撮影途中で閉じた場合、プレビュー画要求時の時刻が更新されなくなりますので、こうすることで、ブラウザを閉じてから10秒後に撮影は終了します。
さて、カメラでやりたいことが終わってしまった・・・
次何しようかな。