카메라 출력을 동일한 네트워크의 서버로 보내려면 Android 휴대 전화에 프로그램을 만들고 있습니다.TCP 패킷이 끊어지지 않게하려면 어떻게해야합니까?
camera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera cam) {
try {
socket = new Socket("XXX.XXX.XXX.XXX", 3000);
out = socket.getOutputStream();
out.write(data);
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
camera.addCallbackBuffer(data);
}
서버가 NodeJS 서버입니다 :
time = 0
video_server.on 'connection', (socket) ->
buffer = []
socket.on 'data', (data) ->
buffer.push data
socket.on 'end', ->
new_time = (new Date()).getTime()
fps = Math.round(1000/(new_time - time)*100)/100
console.log fps
time = new_time
stream = fs.createWriteStream 'image.jpg'
stream.on 'close', ->
console.log 'Image saved.', fps
stream.write data for data in buffer
stream.end()
내 터미널은 약 1.5 FPS (5 Mbps의)를 보여주고있다 여기 내 자바 코드입니다. 네트워크 프로그래밍에 대해서는 거의 알지 못하지만 대역폭이 충분해야합니다. 각 이미지는 18fps에서 640x480x1.5이며 약 63Mbps입니다. 로컬 네트워크에서이 문제를 쉽게 처리 할 수 있어야하지만 안드로이드의 디버거는 "Connection refused"메시지를 많이 보내고 있습니다.
나쁜 네트워크 관행을 고치는 데 도움이 될 것입니다. (약간의 이미지 압축을 얻지 만, 지금은이 단계를 최적화해야합니다.)
왜 TCP 연결을 열고 닫는 중입니까? –
저글링을 배우십시오? – Dave
여기에 TCP 패킷이 전혀 삭제되지 않는다는 증거는 없으며 '연결 거부 됨'은 대역폭 또는 삭제 된 패킷과 관련이 전혀 없습니다. 코드는 수신 된 이미지를 파일에 쓰기 전에 메모리에 누적없이 누적되어 시간과 공간을 낭비합니다. – EJP