2011-03-13 10 views
14

Obecnie pracuję nad strumieniowym przesyłaniem wideo między dwoma telefonami z Androidem. Napisałem aplikację, która jest w stanie nagrać wideo do pliku SD (przy użyciu MediaRecorder); i napisałem kolejną aplikację, która jest w stanie wyświetlić wideo pliku. Obie aplikacje działają doskonale.Strumień wideo na żywo między dwoma telefonami z Androidem

Znalazłem stronę internetową na temat "Transmisja wideo z systemem Android - bez zapisywania do plików lokalnych" w następującej witrynie. Dokładnie to chciałem zrobić.

http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system

zmodyfikowałem mój kod.

Dla magnetowidu, to:

socket=severSocket.accept(); 
ParcelFileDescriptor=pfd; 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 
recorder.setVideoFrameRate(15); 
recorder.setVideoSize(320, 240); 
recorder.setPreviewDisplay(holder.getSurface()); 
pfd = ParcelFileDescriptor.fromSocket(socket); 
recorder.setOutputFile(pfd.getFileDescriptor()); 
recorder.prepare(); 
recorder.start(); 

Dla Odtwarzacz wideo:

Socket socket = new Socket(IP,PORT); 
mMediaPlayer = new MediaPlayer(); 
pfd = ParcelFileDescriptor.fromSocket(socket); 
mMediaPlayer.setDataSource(pfd.getFileDescriptor()); // <-- here is the problem 
mMediaPlayer.setDisplay(holder); 
mMediaPlayer.prepare(); 
mMediaPlayer.setOnBufferingUpdateListener(this);    
mMediaPlayer.setOnCompletionListener(this);    
mMediaPlayer.setOnPreparedListener(this);    
mMediaPlayer.setOnVideoSizeChangedListener(this); 
mMediaPlayer.start(); 

Program zgniatać na mMediaPlayer.setDataSource(pfd.getFileDescriptor()); na MediaPlayer wiem strzału skonfigurować DataSource poprawnie. Muszą być dodatkowe ustawienia dla ParcelFileDescriptor, aby umieścić je w MediaPlayer.

Czy ktoś wie, jak używać ParcelFileDescriptor dla MediaPlayer? Wszelkie pomocne doradztwo lub porady byłoby miło ......

Dziękuję

Will

+0

Dostałeś to działa? – B770

+1

czy to działa dla Ciebie? jeśli to działa, plz powiedz mi, jak rozwiązać ten problem. – Aravi

+0

Chciałbym wiedzieć, czy to też wymyśliłeś. Mam dokładnie ten sam problem, a poniższa odpowiedź nie pomaga – steveh

Odpowiedz

1

Android nie natywnie obsługiwać wideo strumieniowe w Androidzie 2.1 lub poniżej. To, co zrobiliśmy, to uzyskać obrazy klatka po klatce; i rozbić każdy płomień na BYTE [] i wysłać przy użyciu klasy Socket. Po stronie odbiorcy przebudowujemy obrazy przy użyciu otrzymanych danych.

+1

Czy możesz pokazać nam przykładowy kod? –

4

na stronie odtwarzania wideo należy utworzyć powitalny gniazdo

ServerSocket welcomeSocket = new ServerSocket(portNumber); 
socket soc = welcomeSocket.accept(); 

i używać

mMediaplayer.prepareAsync(); 

zamiast

mMediaplayer.prepare(); 
+0

Cześć, wygląda na to, że ustawiłeś tylko numer portu, a co z adresem IP hosta? –

Powiązane problemy