5

Android の RTP クラスを使用して、あるデバイスから他の多くのデバイスにオーディオ ストリームをマルチキャストしようとしています。

可能であれば、サードパーティのライブラリを使用したくありません。

AudioStreamお互いの IP アドレスを使用して設定し、2 つのデバイス間で双方向オーディオをストリーミングできAudioGroupますが、マルチキャスト グループにストリーミングしたいと考えています。

AudioStreamなどのマルチキャスト アドレスを使用して をインスタンス化しようとする239.1.1.1と、他のデバイスaudioStream.associate()で同じマルチキャスト アドレスを使用しますが、ストリームが聞こえません。

マルチキャストをサポートしていない Android デバイスについて読んだことがありますが、私のデバイス (両方の Samsung Galaxy Tab 2s) はマルチキャストをサポートしています。マルチキャスト ロックを取得するために、コードに以下を追加しました。

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
            multicastLock = wifi.createMulticastLock("multicastLock");
            multicastLock.setReferenceCounted(true);
            multicastLock.acquire();

さらに、マニフェスト ファイルに次の権限があります。

   <uses-permission android:name="android.permission.INTERNET" />
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
   <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
   <uses-permission android:name="android.permission.RECORD_AUDIO" />
4

1 に答える 1

4

これをよく調べた結果、RTP クラスはマルチキャストの送信をサポートしているが、受信はサポートしていないことがわかりました。おそらくこれは、使用されるソケットがMulticastSockets ではないためです。

また、興味のある方のために説明すると、Tab 2 は実際にはマルチキャスト グループへの参加をサポートしていないデバイスの 1 つですが (つまり、IGMP Join パケットを送信しません)、ネットワーク インフラストラクチャで静的マルチキャスト グループを設定すると、パケットが受信されるため、上記で述べたように、パケットがサポートされていることがわかっているのはそのためです。

/proc/net/igmpAndroid デバイスがマルチキャスト グループへの参加をサポートしているかどうかを確認する簡単な方法は、ファイルの存在を探すことです。

于 2013-10-10T09:20:25.207 に答える