2

私はフラッシュでビデオチャットを構築していますが、他のユーザーが機能しているビデオストリームを送信しているかどうかを検出しようとしている部分を除いて、すべてが非常にうまく機能しています。

他のユーザーがビデオを送信しない理由はいくつかあります。

  1. 他のユーザーはカメラを持っていません
  2. 他のユーザーはカメラを手に入れましたが、カメラは現在別のアプリケーション(Skype、フォトブース、Googleトークなど)によって占有されています
  3. 他のユーザーはカメラを持っていますが、自分のカメラの使用を許可していません。
  4. (私が推測する他の予期しない問題...)

では、NetStreamクラスを使用して、他のユーザーから受信したストリームが(上記の理由により)ブラックストリームであるかどうかをどのように検出しますか?

私が思いついた最も近いことは、他のユーザーから受け取ったストリームからcurrentFps()関数をポーリングするタイマーを追加することです。currentFps() == 0しかし、これまでのところ、実際にストリームからビデオを取得した場合でも、これが原因でエラーが発生して表示される可能性があるため、これはかなり信頼できないようです。これは、現在のFPS関数について4秒ごとにAPIをポーリングし、そのポーリングによると00:00:04に「ビデオなし」と表示されたが、00:00:05にビデオが開始されたためです。エラーメッセージが消えるまで次のティックまで待つ必要があります

これは私の現在の世論調査がどのように見えるかです

function subscribingStatusPoll(e:TimerEvent):void {
  if (subscribingStream.currentFPS == 0){
    error.text = "No video found from the other user..."
  } else {
    error.text = "";
  }
}

これは私がこれを検出するために思いつくことができる唯一のハックですが、これは信頼性が低く、実際には、受信したストリームにこの醜いポーリングなしで動作するビデオが添付されているかどうかを即座に検出する方法を好みます。

4

2 に答える 2

3

サーバー側から「空白」のストリームを送信しないことに同意しますが、サーバー側にアクセスできない可能性があるため、状況には当てはまりません。クライアント側では、一定の間隔でストリームからフレームを取得して変更を確認するか、タイムスタンプを確認することができます(時間の経過とともに増加を確認します)。これらのオプションはハックっぽく見えるかもしれませんが、Flashでは間違いなく機能するはずです。

これを自分で開発する必要がある場合は、このエッジ検出コードから始めて、Webカメラグラブを再生ストリームからのフレームグラブに置き換えます。

http://www.laserpirate.com/as3edgeandmotion/

于 2011-08-12T15:16:49.130 に答える
1

間違ったアプローチ。
受信側でデータを検証することは素晴らしいアイデアですが、ストリームが実際のデータであるかどうかを検出する方法はありません。
あなたの場合、送信されているストリームは真のカメラストリームではありませんが、それでもストリームです。
これに対する検出はありません。
送信側クライアントで検証を処理しないのはなぜですか?

于 2011-08-09T20:24:59.083 に答える