問題タブ [webrtc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sip - SIP と WebRTC による着信
SIP と WebRTC を使用し、PTSN に接続するブラウザベースの VOIP ソリューションの実装を検討しています。基本的に、ユーザーは私に SIP クレデンシャルを提供し、私は WebRTC を使用してマイクとスピーカーにアクセスします。このページでは、SIP クライアントを実行する予定です。
PTSN からの着信コールを実装するにはどうすればよいですか? ユーザーの SIP サーバーに接続する何らかのリスナーが必要ですか?
これが幅広い質問であることは承知していますが、オンラインで調査を行った後でも、着信コールの SIP 実装について多少混乱しています。
webrtc - WebRTC + JSEP + Google Channel API - remoteStream を受信できません
私はこれを機能させようとしてきましたが、何が問題なのかわかりません。助けてもらえますか? こんな感じでWebRTCのコードを修正してみました。
- 呼び出し元と呼び出し先の両方が Web に入ります
- ウェブはユーザー名に基づいてチャネルを作成します
- 発信者は通話ボタンをクリックし、特定のチャネルに特定のユーザーのユーザー名にメッセージを送信します。発信者が通話ボタンをクリックすると、peerConnection を作成し、localStream を追加します。
- 呼び出し先はメッセージを受け取り、プロセスは WebRTC サンプル コードのように続きます。呼び出し先がオファーを受け取ると、peerConnection を作成し、localStream を追加してから、回答を作成して送信します。
私のコードは次のようになります
waitForRemoteVideo になると、関数は else 条件を呼び出します。しかし、remoteVideo のブロブ URL は存在します。
webrtc - 複数のリモート ピアへのローカル ストリームの送信
ローカル ビデオ ストリームを複数のリモート ピアに送信するにはどうすればよいですか? PeerConnection
リモート ピアごとに 1 つインスタンス化する必要がありますか? またはPeerConnection
、すべてのリモート ピアに対して同時に同じものを使用できますか?
webrtc - WebRTC-JSEP:2つの異なるネットワーク間でピアを接続できません
誰かがこれを発行したかどうかはわかりませんが、尋ねたくありません。私の問題は次のようなものでした:
- 2つのChromeタブを使用してapprtc.appspot.comからのビデオチャットを使用できます(つまり、自分自身を呼び出します)。すべてがうまくいきました。
- それらのラップトップが同じネットワーク上にある場合は、2つの異なるラップトップでもapprtcを使用できます。大学のネットワークをプロキシの背後で使用しました。
- ただし、モデム上の1つのラップトップと、LAN上の他のラップトップで使用した場合、apprtcは機能しませんでした。
誰かが何が起こったのか説明できますか?これはSTUN/ICEの問題ですか?またはJSEP?
webrtc - WebRTCコードのトラブルシューティング
これで髪を抜いています。1か月ほど前、SignalRの優秀な人々からのサンプルコードを使用して、概念実証WebRTCデモをまとめることができました。デモはここにあり、そのソースはここにあり、本来の機能を果たします。
しかし、そのコードを実際のアプリケーションに移動したとき、それを機能させることができませんでした。もちろん、コードを大幅に変更する必要がありました。さまざまなバックエンド、さまざまなフレームワークのセット、サポートコード、複数の同時接続のサポートなどですが、コアロジックは非常に似ています。しかし、私はそれを機能させることができません。
問題を示すサンプルアプリをここにまとめました。
https://bitbucket.org/smithkl42/signalr.webrtc
コアWebRTCロジックは、すべてこのTypeScriptファイルに含まれています。
数百行なので、ここに投稿することはしませんが、上のリンクをクリックすると表示されます。
実行すると、次のような出力が生成されます。
12:17:58.531 WebRTCController.call():準備が完了したときに7d9e0d39-5047-4afe-86e5-e6e01b9f5955を呼び出します
12:17:58.533 WebRTCController.prepareForCall():呼び出しの準備:localSessionId = '39d2df53-6854-415a-8748-b5230eda2eb1'; remoteSessionId = '7d9e0d39-5047-4afe-86e5-e6e01b9f5955'
12:18:0.139 Object。():ユーザーがメディアデバイスへのアクセスを許可したため、通話の準備に進みます
12:18:0.141 Connection.createPeerConnection():ピア接続を作成しています。stunServerの使用stun:stun1.l.google.com:19302
12:18:0.144():準備が終了しました。JSEPオファーの作成と送信。Util.js:21
12:18:0.272 Connection.handleIceCandidate():STUNサーバーがICE候補を検出しました(event.type ='icecandidate')。
12:18:0.282 Connection.handleIceCandidate():STUNサーバーがICE候補を検出しました(event.type ='icecandidate')。
(もっとそのように)
12:18:0.655 WebRTCController.handleJsepAnswer():7d9e0d39-5047-4afe-86e5-e6e01b9f5955からのJsepAnswerの処理
12:18:0.694 Object。():ICE候補をリモートマシンに送信しています:{"sdpMLineIndex":0、 "sdpMid": "audio"、 "candidate": "a = candidate:2999745851 1 udp 2113937151 192.168.56.1 62978 typホスト生成0\r \ n "}
12:18:0.706 Object。():ICE候補をリモートマシンに送信しています:{"sdpMLineIndex":0、 "sdpMid": "audio"、 "candidate": "a = candidate:2999745851 2 udp 2113937151 192.168.56.1 62978 typホスト生成0\r \ n "}
(もっとそのように)
しかし、その後は接続されません。つまり、反対側からのビデオの再生が開始されることはありません。シグナリングレイヤーでは、ログとコードをステップスルーすることで、最初のブラウザーがJSEPオファーを送信していることを確認できます。2番目のブラウザはそれを受信して保存し、適切なJSEP回答を送り返します。そして最初のマシンはその答えを保存しています。次に、各peerConnectionはICE候補を見つけて、それらをリモートマシンに送信します。そして、各peerConnectionは、それらのICE候補を受信し、明らかに試行しています。そしてpeerConnectionsはonaddstream
イベントを発生させています。ただし、ビデオの再生は開始されません。
ずっとpeerConnectionオブジェクトの状態は次のようになります:
(iceGatheringState=new; iceState=starting; readyState=active)
イライラするのは、20回に1回程度の頻度で機能することです。つまり、両方の動画が表示されます。だから私はすべてを間違っているわけではありません。ある種のタイミングの問題のように聞こえますが、それが何であるかはわかりません。そして、私が知る限り、WebRTCオブジェクト(特にRTCPeerConnection)には、何が問題になっているのかを伝えるものはほとんどありません。
他の人にトラブルシューティングを依頼するのは嫌いですが...まあ、オプションが不足しています。他の誰かが私が明らかに間違っていることを見ていますか?
更新2012-12-19:私はいくつかの進歩を遂げています。peerConnection.setLocalDescription()
同期的に、つまりコールバックを指定せずに呼び出していることに気づきました。これで、次のようなコード行がいくつかあります。
そして、setLocalDescription()
エラーコールバックはこのエラーを示しています:
16:14:42.439 WebRTCController.handleJsepOffer():作成された回答からのローカル記述の設定中にエラーが発生しました:SetLocalDescriptionが失敗しました。; answer = {"sdp": "v = 0 \ r \ no =-439659381 2 IN IP4 127.0.0.1 \ r \ ns =-\ r \ nt = 0 0 \ r \ na = group:BUNDLE audio video \ r \ na = msid-semantic:WMS u9fhVrWeLLweqb5ubLkw61Ijsh6BM6vZLhjf \ r \ nm = audio 1 RTP / SAVPF 103104111 0 8107106105 13126 \ r \ nc = IN IP4 0.0.0.0 \ r \ na = rtcp:1 INIP40.0。 0.0 \ r \ na = ice-ufrag:vOKflTJ56gV0R9i0 \ r \ na = ice-pwd:9nuXPMDvQ2mZATFCQyEzPRQz \ r \ na = sendrecv \ r \ na = mid:audio \ r \ na = rtcp-mux \ r \ na = crypto: 1 AES_CM_128_HMAC_SHA1_80インライン:m9q9pmLgLuFnfFC09KXKW5p8TjsKk + VdqX0OWv77 \ r \ na = rtpmap:103 ISAC / 16000 \ r \ na = rtpmap:104 ISAC / 32000 \ r \ na = rtpmap:111 opus / 48000/2 PCMU / 8000 \ r \ na = rtpmap:8 PCMA / 8000 \ r \ na = rtpmap:107 CN / 48000 \ r \ na = rtpmap:106 CN / 32000 \ r \ na = rtpmap:105 CN / 16000 \ r \ na = rtpmap:13 CN / 8000 \ r \ na = rtpmap:
ここで、メソッドから直接得られる特定のSDPcreateAnswer()
が失敗する理由を理解する必要があります。
更新2012-12-20:ここで問題のオンラインデモンストレーションを作成しました:http ://srdemo.alanta.com/ 。Chromeのデバッグログもオンにした結果、次のようなエラーが多数表示されます。
[6584:7308:1220/091356:ERROR:rtc_peer_connection_handler.cc(84)] Native session description is null.
[6584:7308:1220/091356:ERROR:rtc_peer_connection_handler.cc(84)] Native session description is null.
[6584:7308:1220/091356:ERROR:rtc_peer_connection_handler.cc(84)] Native session description is null.
[6584:7308:1220/091356:ERROR:rtc_peer_connection_handler.cc(84)] Native session description is null.
[6584:7308:1220/091356:ERROR:rtc_peer_connection_handler.cc(84)] Native session description is null.
彼らが私の問題とどのような関係にあるのかはわかりませんが、私はそれを調査し続けています。
* 2012年12月20日編集:問題を絞り込むことができました(私は思います)。より正確な詳細については、この質問を参照してください。
signalr - SignalR を WebRTC のサービス レイヤーとして使用する
これは私が尋ねた別の質問のフォローアップですが、より正確な情報があります。
WebRTC をデモする 2 つの基本的に同一の Web ページがあります。1 つは XSockets をバックエンド シグナル レイヤーとして使用し、もう 1 つはバックエンド シグナル レイヤーとして SignalR を使用します。
2 つのバックエンドは基本的に同一であり、クライアントにデータを送信する方法が (明らかに) 異なる点のみが異なります。同様に、2 つのクライアントの TypeScript/JavaScript WebRTC コードは、シグナリング層を抽象化したので完全に同一です。
問題は、XSockets サイトが一貫して動作する一方で、SignalR サイトが失敗することです (完全ではありませんが、ほぼ一貫して)。通常、呼び出し中に失敗しますがpeerConnection.setLocalDescription()
、サイレントに失敗することもあります。または、(場合によっては)機能することもあります。
ここで、2 つの異なるページの動作を確認できます。
XSockets サイト: http://xsockets.demo.alanta.com/
SignalR サイト: http://signalr.demo.alanta.com/
両方のソース コードはhttps://bitbucket.org/smithkl42/xsockets.webrtcにあり、XSockets バージョンはxsockets
ブランチに、SignalR バージョンはsignalr
ブランチにあります。
だから私の質問は: ある信号層を別の層の代わりに使用すると WebRTC に違いが生じる理由を誰か知っていますか? たとえば、どちらか一方が ANSI ではなく Unicode 文字列を返しますか? それとも、私が問題を誤診したのでしょうか?本当の違いは別の場所にありますか?
google-plus - Google+ ハングアウト API: 参加者のビデオ データにアクセスし、キャンバスで操作します
API を使用して、次の Google+ ハングアウト アプリを作成したいと考えています。次の手順で説明します。
- バックグラウンド減算のために参加者のビデオ フィードのスナップショット イメージを取得するためのボタンが用意されています。
- 参加者がビデオ フィードに入ります。フィードは、#1 で取得した背景画像を使用して背景を差し引くように処理されます。フィードは処理され (たとえば、背景が白で前景が黒になるように)、画像ストリームとして扱うことができるものを取得します。
- すべてのユーザーからの処理済みフィード (イメージ ストリームとして表される) は、プログラムによって結合され、キャンバスに表示されます (たとえば、白が TRUE で黒が FALSE の場合、すべての参加者フィードのピクセル単位の論理 AND を実行できます)。
現在の Google+ Hangouts API でこれを行うことはできますか? そうでない場合は、これを行うためのテクノロジ スイートをお勧めできますか (WebRTC を使用し、サーバーを介してビデオ データを中継するために料金を支払う必要がない、つまり P2P または無料のインフラストラクチャを使用することをお勧めします)。
ノート:
あまり調べずに質問します。
ビデオ フィードは完全なイメージ ストリームではなく、遅延とある程度の非同期性があることは承知しています。
three.js - WebRTCを使用してシェーダーを適用するThree.js
ビデオテクスチャを持つthree.jsオブジェクトにシェーダーを適用する方法がわかりません。
私はwebRTCとthree.jsで遊んでいて、標準のマテリアルを使用してビデオテクスチャをメッシュに正常にマッピングしました。
このテクスチャにシェーダー(この例ではsobelシェーダー)を適用して、さらに一歩進めたいと思います。私の試みはここにあります:http://jsfiddle.net/xkpsE/1/
大量のINVALID_OPERATION警告を受け取りましたが、問題のデバッグ方法を理解するのに問題があります。私も他の誰もこれをしているのを見たことがないので、この知識が公開されることは有益だと思います:)
どんな助けでもいただければ幸いです。
webrtc - WebRTC - カメラが停止したかどうかの検出
WebRTC に関する質問
ユーザーのカメラが途中でストリーミングを停止した場合のイベントはありますか?
WebRTC は Peer2Peer に接続できます。Peer1 がストリームを持ち、複数のオブザーバーが表示しているのはどうですか?
ありがとう
webrtc - WebRTC PeerConnection を作成するとき、ICE (STUN/TURN) 検出プロセスをスキップできますか?
私のセットアップでは、音声とビデオを処理するカスタム サーバーがクラウド内にあるため、「私はどこにいるのか、私のプライベート アドレスとパブリック アドレスは何か」などは必要ありません (そしてしたくありません)。発見プロセス。基本的に、私は SDP オファーが必要であり、IP アドレス/ポートは気にしません。そのオファーはサーバーに送信され、サーバーはコーデックを選択してSRTPキーを取得し、パブリックアドレス、コーデックの選択、およびそのキーを含むブラウザへのSDP回答で応答します. 理想的には、ブラウザがサーバーへのメディアの送信を開始し、サーバーは単に「ピア」メディアを元の場所から送り返します (これは、UDP に適した NAT デバイスを介してトンネルで戻されます)。
Win32/OSXデスクトップクライアントですでにこれを行っているため、これが技術的に可能であることはわかっています...問題は、これはWebRTCで可能RTCPeerConnection
ですか? {}
など、いくつかの構成タイプを試しました{ "iceServers": [] }
が、まだ発見の渦を巻いているようです。プロセスを短縮する他の方法はおそらくありますか? ありがとう!