Web サイトで mjpeg ビデオをストリーミングする際に問題が発生しました。カメラにはプライベート IP があります (プライベート/ローカルのままにする必要があります) が、公開 Web サイトに表示される必要があります。
次のコードを試しました:
HTML
<img src="video.php?ip=IPADDRESS&name=NAME" width="640" height="480" />
PHP (ビデオ.php)
<?php
// ... some code to get the camera object
header('Content-Type: multipart/x-mixed-replace; boundary=myboundary');
ob_end_flush();
readfile('http://'.$cam->user.':'.$cam->pwd.'@'.$cam->ip.'/mjpg/video.mjpg');
?>
それはこれまでのところうまくいきます。しかし、問題は、jQuery 経由でいくつかの要求 (カメラ ステアリング) を送信すると、Web サイトを更新するか閉じるまで送信できないことです。ステアリングは、画像の src タグに直接ファイルを書き込む場合にのみ機能します。もちろん、ストリームはローカル Web サーバーでのみ表示されます。私の質問: 公開 Web サイトでビデオをストリーミングする最良の方法は何ですか?
よろしく
ブラックボンジュール
編集
ここにjQueryコード:
$('#container').on('click', '.steer', function()
{
$.post('handle_post.php',
{
action: 'move-cam',
ip: $('#camIP').val(),
name: $('#camNAME').val(),
move: $(this).attr('alt')
});
});
完全なコードではありませんが、ステアリング関数はこれですべてです。
アップデート 17.09
ここ数日問題に取り組みましたが、まだ解決策がありません。ステアリングを行う新しいウィンドウを開こうとしました。問題は、javascript でウィンドウを開いた場合でも、カメラを制御できないことです。別のブラウザを開いて「コントローラ」に直接アクセスすると、カメラを制御できます。しかし、これは私が望むものではありません。JS (Ajax) でカメラを制御するにはどうすればよいですか?
次に、php をスローしたストリームを読むと、サーバーと PC が非常に遅くなります。どうすれば修正できますか?
ストリームを読み取るために次のコードを使用します。
$fp = fsockopen($cam->ip, 80, $errno, $errstr, 30);
if(!$fp)
{
echo $errstr.' ('.$errno.')<br />'."\n";
}
else
{
$urlstring = "GET /mjpg/video.mjpg HTTP/1.0\r\nAuthorization: BASIC ".base64_encode($cam->user.':'.$cam->pwd)."\r\n\r\n";
fputs($fp, $urlstring);
while($str = trim(fgets($fp, 4096)))
{
header($str);
}
fpassthru($fp);
flush();
fclose($fp);
}