Android: Transmitir datos de la cámara y escribirlos en el servidor

Transmito los datos de la webcam a mi cliente.

Puedo ver que los datos llegan escuchando ('datos'). Sin embargo, cuando lo creo no puedo verlo y es probablemente datos de basura o faltan algunos encabezados. VLC no puede reproducirlo.

Mi siguiente paso es hacerlo en tiempo real streamable al navegador.

¿Qué estoy haciendo mal?

net = require('net'); fs = require('fs'); // Start a TCP Server net.createServer(function (socket) { console.log("client connected"); var file = fs.createWriteStream("temp.mp4"); socket.pipe(file, {end: false}); socket.on('end', function(){ console.log("ended"); }); }).listen(5000); 

He probado para ver si realmente capturar la salida de vídeo:

 $ mediainfo temp.mp4 General Complete name : temp.mp4 Format : H.263 Format version : H.263 File size : 126 KiB Video Format : H.263 Width : pixel0 Height : pixel0 Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Compression mode : Lossy 

Y este es el siguiente código Android de configuración de mediaRecorder (Supongamos que socket está conectado, no hay problema)

  mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); mediaRecorder.setVideoSize(320, 240); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); mediaRecorder.setOutputFile(pfd.getFileDescriptor()); mediaRecorder.setMaxDuration(5000); mediaRecorder.setMaxFileSize(5000000); 

Existen algunos proyectos de código abierto que solucionan este problema, como Spydroid (navegador / streaming VLC) y Android IP Camera (navegación por navegador). Tu implementación parece similar a Spydroid, así que tal vez puedas adaptar algo de su código.

El problema central es que MediaRecorder está escribiendo marcos de vídeo sin procesar en el zócalo. Debe esperar hasta que el video termine de escribir los encabezados, pero deben aparecer al principio del archivo. Dado que el socket no se puede buscar, los encabezados no se pueden escribir en la ubicación correcta. Los proyectos relacionados anteriormente tratan este problema mediante la empaquetado de la secuencia en RTSP (Spydroid) o "streaming" de una serie de imágenes fijas al navegador (Android IP Camera).

  • Decodificación de flujo de vídeo en Android de DJI drone
  • Subtítulos / Soporte de subtítulos en Android
  • Rotar vídeo con Mp4parser
  • Android: dibuja el video de YouTube en SurfaceTexture
  • ¿Es esto posible tener la opinión de la textura para la cámara en forma circular para el androide?
  • Android: el video se puede reproducir desde la galería pero cuando lo reproduzco usando el video de tipo Intent.ACTION_VIEW, no se puede reproducir
  • Android SDK: Reproducción de vídeo mediante el protocolo mms
  • ¿Cómo utilizar exoplayer para reproducir un mp4 mientras estoy descargando desde un proxy local?
  • Grabar y reproducir vídeo en directo en android
  • ¿Cómo obtener vídeo de la intención de la cámara y guardarlo en un directorio?
  • Android: graba vídeo en la misma orientación independientemente de la orientación del dispositivo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.