問題タブ [rtcdatachannel]

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.

0 投票する
1 に答える
1732 参照

blob - WebRTC: blob を使用する場合と、dataChannel.binaryType に arraybuffer を使用する場合は?

WebRTC/RTCDataChannel 経由でバイナリ データを送信するには、binaryTypeを「blob」または「arraybuffer」に設定できます。

どのような場合にバイナリ データを blob として送信し、いつ ArrayBuffers として送信する必要があるかわかりません。ヒントはありますか?

0 投票する
0 に答える
370 参照

webrtc - WebRTC データ チャネルを介した標準化されたファイルまたはデータ転送

データ、特にファイルを転送するためにデータ チャネルを使用する webrtc アプリケーションを開発しています。

いくつかの調査の後、 https ://webrtc.github.io/samples/src/content/datachannel/filetransfer/ https://www.webrtc-experiment.com/docs/how-ファイルブロードキャスト-works.html

どちらのソリューションも問題なく機能しており、そこでアプローチを使用する予定ですが、ここでの問題は、両方のソリューションがファイルをチャンクして再構築するためのファイル転送プロトコルを作成したことです。このアプローチでは、受信側はプロトコルを認識し、そのプロトコルの要件を適用する必要があります。

ファイルをデータ URL に変換し、チャンクに分割する予定です。すべてのメッセージで、データ チャンク、チャンクの現在のインデックス、およびチャンク合計数を送信しますが、この方法ではプロトコルを記述しており、サード パーティのアプリケーションがプロトコルを理解することは期待できません。

私が聞きたいのは、webrtc チャネルを介したデータ転送の標準化はありますか? それのためのRFCはありますか?

ありがとう、よろしく、 ウグルカン

0 投票する
1 に答える
950 参照

webrtc - WebRTC RTCDataChannel - 信頼できるように構成するには?

を起動しましたがRTCDataChannel、デフォルトでは信頼できないモードになっているようです。

パケット配信を保証するために信頼できるように構成したいのですが、RTCDataChannelInit構成にはそのための設定がないようです。

また、RTCDataChannel.isReliableは読み取り専用プロパティです。

信頼できるモードになるようにチャネルを構成するにはどうすればよいですか?

0 投票する
1 に答える
689 参照

ios - 現在の webrtc ios スタティック ライブラリ - 例 libwebrtc_arm64.a?

私はブラウザでWebRTC DataConnection APIを使用して、p2p 通信を行いました。今、私は iOS アプリ内で同じことをしたいと思います。

私は、インターネット アクセスが非常に遅い遠隔地に住んでおり、開発を行っています。そのため、静的ライブラリを生成するために 6 GB 以上のダウンロードを伴うwebrtcソースを自分で構築することは非常に困難です。別の場所から試みましたが、ビルド プロセスが複雑なために失敗し、デバッグする時間がなくなりました。

libjingle_peerconnection cocoa podを見つけましたが、これが提供する静的ライブラリは 70MB を超えており、iOS アプリには大きすぎるようです。不要な libjingle と webrtc ビデオ (RTCDataChannels を使用したいだけ) のコードが含まれているかどうか疑問に思っていますか?

ビルド済みの iOS arm64 ライブラリが必要なだけです

0 投票する
1 に答える
167 参照

webrtc - RTCDataChannel が接続を開始するために使用するプロトコル パケットの種類はどれですか?

RTCDataChannel が接続を開始するために SCTP を使用していることは知っていますが、接続を開始するために SCTP パケット (データ チャンクなどを含む) を使用していないようです。SDP パケットを使用します。

このデモを試してみて、コンソールを確認すると、次のようなパケットが送信されます。

私が知っているように、これはSDPパケットのフォーマットです。

それで、誰でもそれについて明確にするのを手伝ってくれる?

0 投票する
4 に答える
4011 参照

javascript - RTCDataChannel send メソッドがデータを送信しない

RTCDataChannel で奇妙な問題が発生しています。

私はWebRTCについていくつかの調査を行っており、すでにWebRTCオーディオ/ビデオチャットを行っています。ここで、RTCDataChannel を使用してテキスト チャットとファイル共有を追加したいと考えました。

次のように RTCDataChannel を作成しました。

そして、私が両側で受け取る唯一のものは、dataChannel.onopenの最初の行からのログです。dataChannel.onmessageからログを受け取りません。

エラーなし..

手動でdataChannel.sendを呼び出すと、結果は同じです。

テスト済み:
Google Chrome (50.0.2661.94)
Firefox (45.0.2)

誰でもそれを手伝ってくれる?

0 投票する
1 に答える
2903 参照

javascript - WebRTC DataChannel: Firefox では動作するが Chrome では動作しない

私はWebRTCでかなり新しいです。オーディオもビデオも使用せずに、2 つのピア間に単純なデータ チャネルを確立しようとしています。ただのテキストデータ。最後はゲームマスターとなるピアに2~7人のピアが接続するゲームになります。

html5rocks、MDN、その他のスタックの投稿を何時間もグーグルで調べて読んだ後、私は多くのことを試しましたが、まだうまくいきません。

2 つの異なる Firefox タブでページを開くと、すべて正常に動作します。タブの 1 つが「Hello, world!」を送信していることがわかります。もう一方は「うまくいきました!」と送信します。DataChannel は十分に確立されており、両方のタブがそれぞれのピアのメッセージを取得します。

ただし、Chromeで実行すると機能しません。私のテストの 1 つでは、何かを送信する前に DataChannel が不思議なことに閉じられましたが、別のテストでは、RTCPeerConnection.ondatachannel イベントがまったく呼び出されていないようです (詳細は後述)。Firefox と Chrome を順番に通信させようとすると、setRemoteDescription の失敗に関するさまざまな謎のエラーが発生します。

もちろん、これらのケースのいずれにおいても、Web/JavaScript コンソールにエラー メッセージが表示されることはありません。簡単すぎたでしょう。

私の問題はシグナリング プロセスにあるわけではありません。少なくともそうは思いません。非常に単純な Node.js サーバーとの通信には、プレーンな WebSocket が使用されます。PeerJS などのライブラリの使用は避けたいと思います。まず第一に、手動で行うことで物事を学ぶほうがよいからです。第二に、シグナリング Node.js サーバーをシグナリング以外の目的で使用したいからです。それ自体は Node 側では問題ではありませんが、ブラウザ側の問題です (100 KB 以上の縮小/難読化されたソース コードの海で小さな雨滴を見つけるつもりはないため)。

基本的なシナリオは非常に単純です。現在接続しているユーザーのリストは、ページ上で 15 秒ごとに自動的に更新されます。ユーザー名をクリックすると、彼に接続され、「Hello, world!」が送信されます。彼が「それはうまくいく!」と答えている間。同時に; とりあえず食べる。シンプルなチャット テキスト ボックスは、基本的なコミュニケーションを設定できるようになったら、もちろん次の論理的なステップです。

より具体的には、ユーザー A がユーザー B をクリックすると、次のようになります。

  1. シグナリングWebSocketを介して、AはBに電話をかけたいことを示すメッセージを送信します
  2. B は WebRTC オファーで A に返信します
  3. A はオファーを取得し、WebRTC 回答で応答します。
  4. DataChannel が確立されました
  5. B 側の DataChannel が開くと、彼は「Hello, world!」を送信します。Aへ
  6. A 側の DataChannel が開いたら、「It works!」と送信します。Bに; これは逆の順序で発生する可能性があります

    • 使用するブラウザに関係なく機能させるには、何を変更すればよいですか? (もちろん、現在 Firefox と Chrome でしか動作しないことはわかっています)
    • おまけのオプションの質問です。特に接続が正常に確立された後でも、複数の ICE 候補が表示されるのはなぜですか?

最新の Firefox と Chrome が必要だと思います。Windows 7 64 ビットでは、45 および 49。

以下は私の JavaScript コードです。次に、いくつかのシナリオに対応する出力、そして最後に、他の投稿やチュートリアルを読んでこれまでに得たいくつかの考えを示します。

FirefoxがFirefoxに接続したときの出力は次のとおりです。これは完全に機能します:

発信者:

と呼ばれる:

Chrome が Chrome に接続したときの出力は次のとおりです。

発信者:

呼ばれる:

Firefox が Chrome に接続したときの出力は次のとおりです。

Fiefox 発信者:

Chrome と呼ばれる:

これは、Firefox が逆方向に Chrome に接続したときの出力です。これも失敗します: Chrome caller:

Firefox の呼び出し:

さて、いくつかのこと:

  1. オファーが送信される前に DataChannel を作成する必要があることを何度も読みました。したがって、次のようにコードを変更して、それが事実であることを確認しようとしました:

    pc.createOffer(desc=>{ pc.setLocalDescription(desc, _=>say("setLocalDescription 成功"), fail=>say("setLocalDescription 失敗: " + 失敗)); say("オファーを送信中 " + o. from); ws.send({type: 'RTCSignal', to: o.from, answer: true, sdp: desc}); }, fail=>say("createOffer failed: "+fail), sdpOptions); pc.channel = createDataChannel(pc, 'チャット');

この変更は、Firefox では何も変更しません。以前と同じように機能し続けます。Chrome では、まだ機能しません。しかし、出力は異なります。以前は、setRemoteDescription を呼び出す直前に、何かを送信できるようになる前に、DataChannel が神秘的に閉じられているように見えました。ただし、この場合、ニュースはありません。DataChannel は接続状態のままです。出力は次のとおりです。

発信者:

呼ばれる:

いずれにしても、イベント RTCPeerConnection.ondatachannel は決して呼び出されないようです。ハンドラーがまったく呼び出されないのか、接続が確立されていないのか、よくわからないような気がします。

また、別の時点で DataChannel を作成しようとしましたが、成功しませんでした。たとえば、両側で setRemoteDescription が呼び出された後。その場合、Firefox はオファーの作成を拒否します。これは、オーディオ/ビデオも、トラック (それが何であるかわからない) も、DataChannel (まだ作成されていない) も要求していないためです。したがって、これまでのところ、オファーを送信する前にチャネルを作成するのが正しい方法であるというのが私の結論です。少なくとも Firefox で動作する唯一のものです。

また、オーディオ/ビデオを要求していないことを考えると、オファーと回答を送信する義務はないということも何度も読みました. しかし、コードからそれを絞り出しても、何も起こらないようです。ICEサーバーの交換などはありません...別の場所で、setLocalDescriptionが呼び出される前にICEサーバーが開始されないことを読みました。そのため、setLocalDescription を呼び出す必要があるため、オファーを作成する必要があります。そこから、シグナリング チャネルを介して他のピアに送信する義務があること、setRemoteDescription を呼び出す義務があること、および応答する必要があることは論理的に思えます。

オーディオ/ビデオ ストリームを送信する予定はありませんが、コードで sdpOptions = {mandatory: { OfferToReceiveAudio: true, OfferToReceiveVideo: false } };`` を使用しています。両方を false に設定すると、Chrome が ICE サーバーを開始しないため、P2P 接続ができなくなることに気付く前に、すでに多くのことをグーグルで検索しました。

そしてこれ:{DtlsSrtpKeyAgreement: true}, {RtpDataChannels: true }] チュートリアルからコピーしたもので、実際に何をするのかよくわかりません。とにかく、それをすべて削除するか、どちらかを false に設定しても、結果は何も変わりません。

長い文章を読んでいただきありがとうございます。どうすれば問題を解決できるか考えていただければ幸いです。私が何をすべきか教えてください、または少なくともそれが何であるかについての手がかりを教えてください.

ご助力ありがとうございます。

編集:OMG!コードのすべての行が 1 つの大きな行にまとめられているようです。大変申し訳ありません、予想外でした。ちょっとしたコメントで、次回のためにこれを修正する方法を教えてください. ありがとうございました。

0 投票する
0 に答える
338 参照

ios - WebRTC リアルタイム データチャネル フロー制御アルゴリズム?

画面共有を使用して iOS アプリを開発しています。iOS の screenshsring は Apple でサポートされていないため、唯一の方法はスクリーンショットを撮って送信することです。

WebRTC DataChannel を使用して、スクリーンショットをブラウザーに共有しています。それはまともに機能しますが、機能するには良好で安定したアップロード速度が必要です.

私の問題は、ネットワークが遅い場合、または速度が上下する場合です。画面共有を比較的リアルタイムにしたいからです。ある種のフロー制御を実装する必要があります。接続が遅くなったりラグスパイクが発生したりすると、レシーバー側で遅延が発生します。

そのため、速度が遅い場合は、1 秒あたりのスクリーンショットの送信速度を遅くしたいと考えています。およびその逆。私は時計を ntp と同期しており、現時点ではスクリーンショットが撮られた時間を送信する素朴な実装があり、それを使って私が作った素朴なアルゴリズムを実行しています。しかし、それは私が必要とするほどうまく機能しません。

あなたが私に推薦できるリアルタイムフロー制御アルゴリズム、または他のアイデアはありますか?