Ich kompilierte vor kurzem ffmpeg und live555 für Android, und baute meine eigene Media-Client-Wrapper. Das ganze System funktioniert perfekt in allen anderen Systemen (Windows und Linux), aber nicht in Android, nur UDP-Pakete konnten nie empfangen werden. Die RTSP-Kommunikation funktioniert gut, die TCP-Verbindung verwendet. Die Sitzung wird erfolgreich gestartet und auf dem Server ausgeführt. Nachdem ich nach den ähnlichen Themen gesucht habe, scheint es, dass ich zuerst eine Multicasting-Erlaubnis mit WLAN erwerben muss. Also habe ich:
- Put-Berechtigungen in AndroidManifest.xmlAndroid RTP-Client kompiliert mit NDK kann keine UDP-Pakete empfangen
<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"/>
- setzen Java-Codes in Android-Aktivität folgende :: onCreate()
WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
if(wm != null) {
mMCLock = wm.createMulticastLock(TAG);
mMCLock.acquire();
}
es gibt aber noch nicht Arbeit, die Ergebnisse sind alle gleich in Emulator, in Galaxy S2 Phone und in Galaxy Tab 10.1. Sogar ich deaktiviere das live555-Modul und benutze nur ffmpeg (ffmpeg hat auch seinen eingebauten rtsp-Client, aber nicht so stabil wie live555, dafür portierte ich live555 nach android). Die Ergebnisse sind die gleichen, rtsp ok, rtp nicht, wobei rtp UDP als zugrunde liegenden Träger verwendet.
In DDMS ist ein Fehler registriert:
Adresse Familie nicht durch Protokoll unterstützt
denke ich, das Problem ist, dass das UDP-Port gesperrt ist nach wie vor. Vielleicht ist das Erhalten von Multicastlock in Java nicht genug für nativen Code, der im Benutzerkern von Android läuft.
Hat jemand eine Idee?
Steven
Danke, ich werde es in live555 Modul überprüfen. Übrigens. Ich habe jetzt meinen Client umgeschaltet, um rtp über TCP-Anfrage zu senden, dann funktioniert alles gut, nur die UDP-Anfrage funktioniert immer noch nicht. Eine UDP-Verbindung macht eine viel bessere Leistung für Echtzeit-Media-Player, mit TCP habe ich schwere Paket verloren in der Netzwerkschnittstelle, bevor die Pakete den TCP-Stack erreichen. – Steven