11

約 6 か月前、PHP で独自の WebSocket サーバー スクリプトを正常にコーディングすることができました。これにより、ローカル ホストで WebRTC ビデオ チャット サービスをセットアップすることができました。それを展開するには、ソケットにアクセスできる Web サーバーが必要であることに気付くまで、私は非常に満足していました。

残念ながら、ソケットを使用できる共有 Web ホスティングはなく、ソケットを提供するすべての Web サーバーは高価です。大規模な場合は効果的なソリューションではありませんが、デモをセットアップして人々に見せるために、シグナル方式を WebSocket から Ajax に変更して、私が作成した WebRTC ビデオ チャット サービスを披露できるようにしたいと考えています。

そのために、私は過去数日間、何かをコーディングしようと試みてきましたが、WebRTC ピアに互いのビデオをキャプチャさせることに成功していません。

現時点では、1 つのクライアントがスクリプトに接続するときに、Ajax を使用して、DB に他のアクティブなユーザーがいるかどうかを確認する PHP スクリプトにリクエストを送信しています。そうでない場合、スクリプトはオファーを作成し、そのオファーを DB に配置します。その後、クライアントは別の PHP スクリプトを毎秒ポーリングして、スクリプトに接続している別のクライアントからの応答を確認します。

その後、別のクライアントからスクリプトに接続し、同じ PHP スクリプトと DB をクエリし、アクティブなユーザー (最初の接続) が既にオファーを投稿していることを認識し、2 番目のクライアントがそれを取得してリモートに設定します。説明。次に、2 番目のクライアントが回答を作成し、それが DB に配置されます。

この時点で、最初のクライアント (毎秒 DB をポーリングしている) は、回答が存在することを検出し、その回答を最初のクライアントのリモート説明として設定します。残念ながら、これらすべてを正常に実行した後でも、他のクライアントのビデオは表示されません。

だからここで私は混乱していて、3つの(マルチパート)質問があります:

1)両方のクライアントがローカルの説明を設定し、そのローカルの説明を他のクライアントに送信し、その説明をリモートの説明として受け取った他のクライアントが onaddstream イベントが発生するはずだったので、リモートを表示できるようになったと思いましたビデオ。しかし、これは起こっていません。以前は WebSocket を使用していたときは問題なく動作していましたが、純粋な Ajax ではまったく動作しません。特に欠けているものはありますか?WebRTC の仕様は過去 6 か月で大幅に変更されましたか? WebRTC の仕様を調べてみましたが、大きな変更は見られません。

2) Ajax で動作しないことに不満を感じた後、WebSocket バージョンに戻り、それをローカル ホストにロードしました。最後にコードを使用してからコードをまったく変更していません (6 か月前は問題なく動作していました) が、現在、使用しようとすると、動作する場合と動作しない場合があります。ローカルまたはリモートの説明を設定できないことに関連するエラーが発生することがあります。これどうしたの?これが発生する原因となる仕様の変更はありましたか? これに関連して、リモート ビデオを Ajax バージョンでポップアップ表示することはできませんが、多くの内容をコンソールにエコーしてきました。Ajax バージョンでも同様のようです。両方のクライアントのリモート ディスクリプションが正常にセットアップされました。また、変更せずに毎回まったく同じスクリプトを実行しているにもかかわらず、何らかの理由でローカル/リモートの説明を設定しようとするとエラーが発生することがあります。Chrome の最新バージョンを使用していますが、バグか何かがあるのではないかと考え始めています。

3) 接続を確立するには、onicecandidate イベント ハンドラが必要ですか? 私の仮定では、ピアは有効なオファーと回答だけで接続を確立でき、onicecandidate イベントは代替ルートなどを提供するために使用され、より良い接続につながる可能性があります (必須ではありません)。私が間違っている?onececandidate 情報が必要な場合、シグナリング方法として Ajax を使用してこれをどのように処理することをお勧めしますか?

私はそれが多くの情報と多くの質問であることを知っていますが、誰でも提供できる情報/洞察は非常に高く評価されます. 私はこれを理解しようとして、過去数日間自分の机に頭をぶつけていましたが、何も意味がありません.

4

4 に答える 4

3

これは実際にはあなたの質問に答えるものではありませんが、シグナリング サーバーについては、Socket.io (ノード上) を参照してください。これを設定する方法を説明するコードラボを書きました: bitbucket.org/webrtc/codelab。非常に簡単です。完全な例はこちらです。シグナリング サーバー コードは約 50 行です。

SimpleWebRTCは、Socket.io を使用する Signalmaster サーバーを実行します

(Robert Nyman は、これを説明する優れたブログ投稿を書きました。)

もう 1 つのオプションは、apprtc.appspot.comの例: code hereに従って、Google Channel API で XHR を使用することです。

于 2013-06-20T12:51:03.653 に答える