2011-03-13 18 views
14

Actualmente estoy trabajando en la transmisión de video entre dos teléfonos con Android. Escribí una aplicación que puede grabar el video en el archivo sd (usando MediaRecorder); y escribí otra aplicación que puede mostrar el video del archivo. Ambas aplicaciones funcionan perfectamente.Transmisión de video en vivo entre dos teléfonos Android

Encontré un sitio web sobre "Transmitir video con Android - sin escribir en archivos locales" en el siguiente sitio web. Es exactamente lo que quería hacer.

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

he modificado mi código.

Para que la grabadora de vídeo, es:

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

Para Reproductor de vídeo:

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

aplastamiento Programa de mMediaPlayer.setDataSource(pfd.getFileDescriptor()); en MediaPlayer sé que no me gustó la configuración del origen de datos correctamente. Debe haber configuraciones adicionales para ParcelFileDescriptor para poner en MediaPlayer.

¿Alguien sabe cómo usar ParcelFileDescriptor para MediaPlayer? Algún consejo útil o consejos sería bueno ......

Gracias

Será

+0

¿Lo tienes trabajo? – B770

+1

¿funciona para usted? si funciona, por favor dime cómo resolver este problema. – Aravi

+0

Me encantaría saber si usted también lo descubrió. tengo exactamente el mismo problema y la respuesta a continuación no ayuda – steveh

Respuesta

1

Android no soporta de forma nativa la transmisión de vídeo en Android 2.1 o por debajo. Lo que hicimos fue obtener las imágenes cuadro por cuadro; y divida cada llama en BYTE [] y envíela usando la clase Socket. Y en el lado del receptor, reconstruimos las imágenes usando los datos BYTE[] recibidos.

+1

¿Puede mostrarnos algún código de muestra? –

4

en el lado de reproducción de vídeo debe crear un socket de bienvenida

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

y utilizar

mMediaplayer.prepareAsync(); 

en lugar de

mMediaplayer.prepare(); 
+0

hola, parece que solo configura el número de puerto, ¿qué hay de la dirección IP del host? –

Cuestiones relacionadas