android - from - fragment interaction listener
Android: transmita los datos de la cámara y escríbalos en el servidor (1)
Hay algunos proyectos de código abierto que resuelven este problema, como Spydroid (navegación por navegador / VLC) y la cámara IP de Android (transmisión de navegador). Su implementación parece similar a Spydroid, así que tal vez pueda adaptar parte de su código.
El problema central es que MediaRecorder
está escribiendo marcos de video en bruto en el zócalo. Debe esperar hasta que finalice el video para escribir los encabezados, pero deben aparecer al principio del archivo. Como el socket no es buscable, los encabezados no se pueden escribir en la ubicación correcta. Los proyectos vinculados anteriormente se ocupan de este problema al empaquetar el flujo en RTSP (Spydroid) o "transmitir" una serie de imágenes fijas al navegador (Cámara IP Android).
Transmitir datos de cámara web a mi cliente.
Puedo ver que los datos están llegando escuchando (''datos''). Sin embargo, cuando lo creo, no puedo verlo y probablemente sea basura o falten algunos encabezados. VLC no puede jugarlo.
Mi siguiente paso es hacerlo en tiempo real para el 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);
Probé para ver si realmente capturaba la salida de video:
$ 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 de Android para configurar mediaRecorder
(supongamos que el 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);