2011-03-13 22 views
14

Attualmente sto lavorando allo streaming video tra due telefoni Android. Ho scritto un'applicazione che è in grado di registrare il video sul file SD (utilizzando MediaRecorder); e ho scritto un'altra applicazione che è in grado di visualizzare il video del file. Entrambe le applicazioni funzionano perfettamente.Streaming video live tra due telefoni Android

Ho trovato un sito Web su "Trasmissione di video con Android - senza scrittura su file locali" nel seguente sito Web. È esattamente quello che volevo fare.

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

ho modificato il mio codice.

Per il videoregistratore, è:

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(); 

Per Video Player:

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(); 

cotta Programma su mMediaPlayer.setDataSource(pfd.getFileDescriptor()); sul MediaPlayer so che didnt impostare il DataSource in modo corretto. Ci devono essere impostazioni aggiuntive per ParcelFileDescriptor da inserire in MediaPlayer.

Qualcuno sa come usare ParcelFileDescriptor per MediaPlayer? Qualsiasi consiglio utile o suggerimenti sarebbe bello ......

Thank You

Will

+0

hai preso a lavorare? – B770

+1

è quello che funziona per te? se funziona, per favore dimmi come risolvere questo problema. – Aravi

+0

mi piacerebbe sapere se hai capito anche questo. Ho esattamente lo stesso problema e la risposta qui sotto non aiuta – steveh

risposta

1

Android non supporta nativamente lo streaming video in Android 2.1 o al di sotto. Quello che abbiamo fatto è stato ottenere le immagini fotogramma per fotogramma; e rompere ogni fiamma in BYTE [] e inviare usando la classe Socket. E dal lato del ricevitore, ricostruiamo le immagini usando i dati BYTE[] ricevuti.

+1

Puoi mostrarci qualche codice di esempio? –

4

nel lato di riproduzione video di è necessario creare un socket di benvenuto

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

e utilizzare

mMediaplayer.prepareAsync(); 

invece di

mMediaplayer.prepare(); 
+0

ciao, sembra che tu abbia impostato solo il numero della porta, che ne dici dell'indirizzo IP dell'host? –

Problemi correlati