Android:stream摄像机数据并写入服务器

我将networking摄像头数据stream到我的客户端。

我可以看到数据通过监听('data')来到达。 但是,当我创build它时,我无法查看它,它可能是垃圾数据或缺less一些标题。 VLC不能播放它。

我的下一步是使浏览器能够实时传输。

我究竟做错了什么?

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

我testing过是否真的捕获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 

这是以下Android代码设置mediaRecorder (假设套接字连接,没问题)

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

有几个解决这个问题的开源项目,比如Spydroid (浏览器/ VLCstream媒体)和Android IP Camera (浏览器stream媒体)。 你的实现看起来和Spydroid类似,所以也许你可以修改一些代码。

中心问题是MediaRecorder正在将原始video帧写入套接字。 它需要等到video完成写入标题,但它们需要出现在文件的开头。 由于套接字不可查找,所以标题不能写在正确的位置。 上面链接的项目通过将stream打包成RTSP(Spydroid)或将一系列静止图像“stream”到浏览器(Android IP Camera)来解决这个问题。