7

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);
}
4

3 に答える 3

1

ここに JavaScript コードが表示されないため、どのようにカメラ ステアリング コマンドを送信するのかわかりません。とにかく、私はここであなたのケースのための良いアプローチ(https://github.com/wilhelmbot/Paparazzo.js)を見つけます:

JS:

// JavaScript example using jQuery

// Active camera will refresh every 2 seconds
var TIMEOUT = 2000;
var refreshInterval = setInterval(function() {
  var random = Math.floor(Math.random() * Math.pow(2, 31));
  $('img#camera').attr('src', 'video.php?r=' + random);//send a random var to avoid cache
}, TIMEOUT); 

HTML:

<img id="camera" src="video.php" width="640" height="480" />

このコードは、新しい画像を取得するために img 要素を更新するだけです... カメラにリクエストを送信する方法を教えてください。

于 2013-09-13T07:26:28.997 に答える
0

「より単純な」NGINXソリューションを使用してリクエストをプロキシすることもできます。これは間違いなくよりパフォーマンスが高いです。次の(調整された)は私にとってはうまくいきます:

server {
    listen 80;
    server_name [HOST];

    location /video.php {
        proxy_buffering off;
        proxy_set_header Authorization "Basic [KEY]";
        proxy_pass http://[HOST]/mjpg/video.mjpg?$query_string;
    }
}
于 2014-05-24T10:02:07.990 に答える