最近、アンドロイド用にffmpegとlive555をコンパイルし、独自のメディアクライアントラッパーを構築しました。システム全体は、他のすべてのシステム(WindowsとLinux)では完全に動作しますが、アンドロイドでは動作しません。UDPパケットは受信できません。 TCP接続を使用するRTSP通信は正常に動作します。セッションは正常に開始され、サーバーで稼動し続けます。似たような話題を探した後、最初にwifiでマルチキャストの許可を取得しなければならないようです。プット権限NDKでコンパイルされたAndroid rtspクライアントはUDPパケットを受信できません
<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"/>
のAndroidManifest.xmlに - - アンドロイド活動におけるJavaのコードを以下の::のonCreate()
WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
if(wm != null) {
mMCLock = wm.createMulticastLock(TAG);
mMCLock.acquire();
}
を置くが、それはまだない
:だから私がやりましたGalaxy S2 PhoneのエミュレータとGalaxy Tab 10.1の の結果はすべて同じです。でも、私はlive555モジュールを無効にし、ffmpegだけを使用します(ffmpegにはビルドインrtspクライアントもありますが、live555ほど安定ではありません。したがって、live555をアンドロイドに移植しました)。結果は同じですが、rtsp ok、rtp not、rtpはudpを基本キャリアとして使用します。 DDMSで
がエラー登録されている:私は思うプロトコル
でサポートされていない
アドレスファミリ、問題はUDPポートがまだブロックされていることです。多分 でマルチキャストロックを取得しているJavaは、アンドロイドのユーザカーネルで動作しているネイティブコードでは不十分です。
誰もが知っていますか?
スティーブン
ありがとう、私はlive555モジュールでチェックします。 BTW。私は今、クライアントがtcp要求でrtpを送信するように切り替えました。すべてうまく動作し、udp要求はまだ機能しません。 UDP接続はリアルタイムメディアプレイヤーにとってはるかに優れたパフォーマンスを発揮します。TCPではパケットがTCPスタックに到達する前にネットワークインターフェイスで重いパケットが失われています。 – Steven