前提・実現したいこと
phpを用いてffmpegでの録画を開始したい。
MJPG-streamerでストリーミングしている動画について
ウェブ上から録画開始をさせたいです。
該当のソースコード
php
1<?php 2$cmd = 'sh rec_start.sh'; 3exec($cmd,$opt,$return_var) 4echo '実行結果:'.$return_var; 5?>
シェルスクリプトはPHPファイルと同ディレクトリにあります。
sh
1#!/bin/bash 2#filename: rec_start.sh 3cd /home/pi/mjpg-streamer/mjpg-streamer-experimental/REC 4ffmpeg -i http://127.0.0.1:8080/?action=stream -an -vcodec flv $(date "+%Y_%m_%d_%H_%M_%S").flv 5
発生している問題・エラーメッセージ
コマンドライン上でのrec_start.shの実行は正常に開始されるものの
exec()を用いて実行させることが出来ません。
$return_var = 1
試したこと
rec_start.shをコマンドライン上で実行した場合、継続して処理が実行され続けることから、
PHP関数のecec()だとハングしている?と仮定しました。
https://www.php.net/function.exec より引用
プログラムがこの関数で始まる場合、 バックグラウンドで処理を続けさせるには、 プログラムの出力をファイルや別の出力ストリームにリダイレクトする必要があります。 そうしないと、プログラムが実行を終えるまで PHP はハングしてしまいます。
sh のバックグラウンド実行 (コマンドの後ろに、&アンドをつけて実行)
sh
1cd /home/pi/mjpg-streamer/mjpg-streamer-experimental/REC 2ffmpeg -i http://127.0.0.1:8080/?action=stream -an -vcodec flv $(date "+%Y_%m_%d_%H_%M_%S").flv & 3
実行結果: $return_var = 0 となったが動画ファイルは生成されていませんでした。
あなたの回答
tips
プレビュー