2011-03-01 14 views
9

Estoy desarrollando una aplicación para Android que debería ser capaz de transmitir video a un servidor local en mi red sin almacenarlo en la tarjeta SD.Android MediaRecorder setOutPutFile() para transmitir usando Socket

Para esto he hecho aplicación de socket simple en C# que escucha la IP específica: PUERTO

Por parte de Android, que me había propuesto el setOutputFile() a esta IP: PUERTO usando zócalo.

Esta aplicación se inicia perfectamente en un teléfono Android pero no muestra una vista previa y cuando comienzo a grabar sale sin excepción. Tampoco envía ningún flujo de datos a la red.

Cuando configuro el setOutPutFile() en la tarjeta SD, funciona perfectamente y también graba video.

Para la parte del servidor, cuando envío datos de cualquier otra aplicación (desde PC) a la misma IP: PORT, recibe los datos.

En resumen, quiero establecer el canal de comunicación entre PC y Android utilizando un socket para la transmisión.

Aquí está mi código Android:

Socket soc=new Socket("192.168.1.3",8210); 
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(soc); 
... 
... 
// other Recorder setup steps 
... 
... 
Recorder.setOutputFile(pfd.getFileDescriptor()); // working fine for sdcard 
Recorder.setPreviewDisplay(holder.getSurface()); 
Recorder.prepare(); 

Aquí es mi aplicación de servidor que se encuentra en C# y se ejecuta en el PC:

socketForServer = new TcpClient("192.168.1.3", 8210); 
NetworkStream networkStream = socketForServer.GetStream(); 
byte[] rData = new byte[1024]; 
networkStream.Read(rData, 0, 1024); 
... 
... 
// process rData 
... 
... 

no soy capaz de entender el problema eso está ocurriendo aquí. ¿Voy en la dirección correcta?

+0

Hola Vinod, ¿podría liberar el código fuente de la aplicación para Android? Intento hacer lo mismo, pero el video se congela, y no sé por qué ... Gracias. – Rob

+0

Hola, lo siento, no puedo lanzar el código como es de un proyecto comercial. Si pudiera enviarme su código, intentaré solucionar el problema. Gracias –

+0

Básicamente hago lo mismo que tú, pero estoy luchando en el formato ... Recibo algo, pero sin el buen encabezado, creo. Mi problema está muy bien descrito aquí (http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system) pero no sé cómo tratar con. ¿Podría mostrar esa pequeña parte? Gracias. – Rob

Respuesta

5

Hubo un problema en el código de mi servidor.

Tuve que usar TcpListener en lugar de TcpClient.

siguiente es el código correcto:

TcpListener listener = new TcpListener(ipAddress, 8210); 
Socket s = listener.AcceptSocket(); 
NetworkStream ns = new NetworkStream(s); 
. 
. 
. 
//reading the data from stream 
. 
. 
. 
+1

Hola Vinod, estoy tratando de hacer lo mismo, pero el lado del servidor .NET no funciona bien en mi caso, ¿hay alguna posibilidad de obtener tu código de trabajo? – Giuseppe

+0

@Giuseppe, el código ahora es un IP así que no puedo compartir el código, pero si puede elaborar su problema, entonces puedo ayudarlo. –

+1

Entonces, ¿puede transmitir desde el MediaPlayer de Android con el PFD -> FD a través de Socket? – ChiefTwoPencils

Cuestiones relacionadas