私は最近、Android用のffmpegとlive555をコンパイルし、独自のメディアクライアントラッパーを作成しました。システム全体は他のすべてのシステム(WindowsおよびLinux)で完全に機能しますが、Androidでは機能せず、UDPパケットを受信できませんでした。TCP接続を使用するRTSP通信は正常に機能します。セッションは正常に開始され、サーバーで実行され続けます。同様のトピックを検索したところ、最初はWi-Fiでマルチキャスト許可を取得する必要があるようです。だから私はしました:
-AndroidManifest.xmlにパーミッションを入れます
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE""/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
-AndroidのActivity::onCreate()に次のJavaコードを配置します
WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
if( wm != null ) {
mMCLock = wm.createMulticastLock( TAG );
mMCLock.acquire();
}
しかし、それでも機能しません。結果は、エミュレーター、Galaxy S2 Phone、GalaxyTab10.1ですべて同じです。私もlive555モジュールを非アクティブ化し、ffmpegを使用します(ffmpegには組み込みのrtspクライアントもありますが、live555ほど安定していないため、live555をAndroidに移植しました)。結果は同じですが、rtsp ok、rtp notです。ここで、rtpはudpを基になるキャリアとして使用します。
DDMSにエラーが登録されています:
アドレスファミリはプロトコルでサポートされていません
問題は、UDPポートがまだブロックされていることだと思います。たぶん、Javaでmulticastlockを取得するだけでは、Androidのユーザーカーネルで実行されているネイティブコードには不十分です。
誰かアイデアがありますか?
スティーブン