• 締切済み

ソケット通信で連続画像を取得表示するには

お世話になっております、教えて頂きたい事が出てきました。 ソケット通信で連続した画像(jpeg)を取得してファイルには保存せずに ブラウザ上に表示しようと思っていますが、最初の画像は表示されますが 後の画像が表示されません。 (更新されずに同一画像が表示されます) 一応、以下のようなリスト(簡略)で行っていますが、何かいいやり方があるでしょうか。 それとも、そもそもこの方式では連続画像の表示更新は出来ないのでしょうか。 ご存知の方がいらっしゃいましたら、よろしくお願い致します。 //---(概略リスト test.php)------------------------- header('Content-Type: image/jpeg'); // ~一部略~ $fp = fsockopen ('192.168~~', 80, $errno, $errstr, 30); if (!$fp) { //接続できない場合 } else { fputs ($fp, "GET http://192.168~~/hoge.php HTTP/1.0\r\n"); while (!feof($fp)) { // ~中略~ $buf = fgets ($fp,1000); print $buf; } fclose ($fp); }

みんなの回答

  • kalkichi
  • ベストアンサー率64% (22/34)
回答No.2

バイナリを直列に繋いでも期待通りの表示はできません。 No1の方がおっしゃるようにHTMLを挟むか、GDなどで結合する 必要があります。

moo9999
質問者

お礼

kalkichi様、ありがとうございます。 その後、いろいろと試して見ましたが、制約により、やはり出来ないようですね。 (特に今回中に、header('Content-Type: image/jpeg')を使っているのにも関わらず、print分を入れるという間違いもしています) 何か違う方法で検討してみたいと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.1

画像はどのように呼び出しているのでしょう? <img src="test.php?param=1"> <img src="test.php?param=2"> <img src="test.php?param=3"> こんな感じで呼び出しているのでしょうか? それともブラウザのアドレス部分にhttp://192.168.*.*/test.phpこんな感じで呼び出しているのでしょうか? 1回のHTTP通信で表示される画像は1枚となると思うので、後述のような場合は1枚しか表示されないと思います。 表示させるには画像を連結させるなどの工夫が必要になりそうです。 前述のような場合で2枚目、3枚目の画像が表示されないようであればパラメータが間違っているのだと思います。

moo9999
質問者

お礼

mizuno3様、早速のご回答ありがとうございます。 わかりやすくした為に、かなり略していますので、少し分かりにくい部分もあるかと 思いますが、リストの説明をいたします。  while (!feof($fp)) {   // ~中略~   $buf = fgets ($fp,1000);   //ここで、連続したjpeg画像(バイナリー)を組み立てて一塊のデータにしています   //$buf << 加工して $buf (通常のjpeg画像になっています)   print $buf;   //ここで、ブラウザに画像出力しています。($buf)  } 実はこのリストと同等の別のプログラムでは、fgetsで取得したデータ(画像)を 一旦ファイルに落として、別のプログラムで表示しますと連続した画像表示ができています。 (この場合は、<img src="image1.jpg"> のような記述で表示しています) ただ、この場合はプログラムが別になっていますので、書き込みと読み込み表示の タイミングが合いませんので、時々「X」表示が出て、いまいちおもしろくありません。 今回のリストは、ファイルへの書き込みをせずに、読み取ったデータを直接表示することで 不要な「X」が出ないように考えたものです。 よろしくお願い致します。

moo9999
質問者

補足

もう少し補足いたします。  while (!feof($fp)) {   // ~中略~   $buf = fgets ($fp,1000);   //ここで、連続したjpeg画像(バイナリー)を組み立てて一塊のデータにしています   //$buf << 加工して $buf (通常のjpeg画像になっています)   print $buf;   //ここで、ブラウザに画像出力しています。($buf)  } whileのループで、複数の画像データを取り込みながら、その中で一枚ごとの 画像をまとめて、出力しています。   >> print $buf;  //一枚ごとに出力

すると、全ての回答が全文表示されます。

関連するQ&A