2010-11-14 19 views
5

Obecnie piszę program będący rodzajem klienta VoIP. Próbuję ustanowić połączenie między 2 klientami i wysyłać i odbierać dane, które są rejestrowane z mikrofonu.MediaRecorder i UDP (DatagramSocket) w systemie Android

Obecnie używam pliki ale wygląda strasznie realizacji:

Rejestrator rozpoczyna nagrywanie do pliku tymczasowego. Zegar uruchamia się, zatrzymuje rejestrator, sprawdza rozmiar pliku, aby następnie wysłać zawartość za pomocą zestawu DatagramPacket.

Wygląda okropnie źle. Zastanawiam się, czy klasy MediaRecorder i MediaPlayer mają sposób, aby wziąć gniazdo UPD, ponieważ jest to odpowiednio plik wyjściowy i wejściowy (to znaczy DatagramSocket).

Mogę użyć deskryptora pliku z gniazda, ale gniazda używają TCP. Chciałem użyć UDP, więc domyślam się DatagramSocket, ale nie mogę znaleźć sposobu na wykorzystanie go w mojej klasie MediaRecorder i MediaPlayer.

Czy ktoś ma do tego dobre rozwiązanie?

Dziękuję bardzo

Odpowiedz

0

Wszystko,

Jednym ze sposobów można to zrobić poprzez wdrożenie drugi wątek, który ustanawia LocalServerSocket w abstrakcyjnej przestrzeni (Unix nazwie gniazdo). W pierwszym wątku utworzysz LocalSocket, który łączy się z LocalServerSocket. Po tym kroku możesz uzyskać FileDescriptor LocalSocket w pierwszym wątku i ustawić go jako OutputFile dla MediaRecorder. W drugim wątku, który właśnie przeczytałeś ze zerwanego LocalSocket, a następnie zapisz w swoim DatagramSocket. Ez Pz.

Powodzenia B-Rad

+0

To jest całkowicie błędne! Musisz zakodować dane do strumienia, który nie jest obsługiwany natywnie przez Androida. --- Masz rację, możesz po prostu wysadzić ramki przez UDP, ale to nie jest strumień, to są surowe (wideo/audio) ramki! – debracey

3

Jesteś prawdopodobnie zainteresowany ParcelFileDescriptor, a następnie specjalnie funkcja fromDatagramSocket(...), a następnie można użyć funkcji getFileDescriptor ustawić DataSource odtwarzacza

* uaktualnienia : działa to tylko wtedy, gdy masz Androida 4.0 lub nowszego: zobacz limit api

Powiązane problemy