2012-11-21 3 views
7

웹캠 데이터를 클라이언트로 스트리밍합니다.Android : 카메라 데이터를 스트리밍하여 서버에 저장

('데이터') 수신으로 데이터가 도착하는 것을 볼 수 있습니다. 그러나 그것을 만들면 볼 수 없으며 아마도 가비지 데이터이거나 일부 헤더가 누락 된 것입니다. 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); 

나는 정말 비디오 출력 캡처 않았다 있는지 확인하기 위해 테스트 :

$ 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 

을 그리고 이것은 (소켓의 접속 문제를 가정하지 않음)

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); 
mediaRecorder을 설정하기위한 다음과 같은 안드로이드 코드

답변

6

Spydroid (브라우저/VLC 스트리밍) 및 Android IP Camera (브라우저 스트리밍)과 같이이 문제를 해결하는 몇 가지 오픈 소스 프로젝트가 있습니다. 구현은 Spydroid와 비슷해 보이므로 일부 코드를 적용 할 수 있습니다.

핵심 문제는 MediaRecorder이 원시 비디오 프레임을 소켓에 쓰고 있다는 것입니다. 헤더를 작성하기 위해 비디오가 끝날 때까지 기다려야하지만, 파일의 시작 부분에 나타나야합니다. 소켓을 검색 할 수 없으므로 올바른 위치에 헤더를 쓸 수 없습니다. 위에 링크 된 프로젝트는 스트림을 RTSP (Spydroid)로 패킷 화하거나 일련의 스틸 이미지를 브라우저 (Android IP 카메라)에 "스트리밍"하여이 문제를 처리합니다.

+0

원시 파일을 쓰고 있다는 것을 몰랐습니다. 고마워요! 나는 지금 주된 문제를 안다. – Mustafa

관련 문제