私はフラッシュでビデオチャットを構築していますが、他のユーザーが機能しているビデオストリームを送信しているかどうかを検出しようとしている部分を除いて、すべてが非常にうまく機能しています。
他のユーザーがビデオを送信しない理由はいくつかあります。
- 他のユーザーはカメラを持っていません
- 他のユーザーはカメラを手に入れましたが、カメラは現在別のアプリケーション(Skype、フォトブース、Googleトークなど)によって占有されています
- 他のユーザーはカメラを持っていますが、自分のカメラの使用を許可していません。
- (私が推測する他の予期しない問題...)
では、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 = "";
}
}
これは私がこれを検出するために思いつくことができる唯一のハックですが、これは信頼性が低く、実際には、受信したストリームにこの醜いポーリングなしで動作するビデオが添付されているかどうかを即座に検出する方法を好みます。