2012-05-22 3 views
0

나는 사진을 찍어 그 그림을 무선으로 무선으로 데스크탑 컴퓨터 수신기로 전송하는 장치를 개발 중입니다. 수신자 측에서는 C와 fwrite()를 사용하여 분할 된 데이터 패킷으로 전송 된 이미지 파일을 다시 작성합니다. 패킷을 수신하면 다음을 실행합니다.fwrite()를 통한 Jpeg 무선 전송 잃어버린 패킷을 처리해야합니다

fwrite(&data[3], size, 1, filename); 

data [3]은 부호없는 8 비트 정수, 데이터 유형 u08입니다.

유선 파일 전송이 작동하는지 확인합니다. 송신기와 수신기를 직접 연결하면 문제가 없습니다.

그러나 무선 신호는 모든 패킷을 수신 할 수있을만큼 강하지 않습니다. 내 테스트에서는 전송 패킷이 손실되는 것이 일반적입니다. 하나의 패킷이 손실되면 이미지 파일이 손상됩니다. 수신율은 대략 85 %입니다.

모든 패킷에 번호가 매겨집니다. 수신 된 패킷 번호가 예상 된 패킷 번호보다 큰 경우, 수신기는 패킷이 드롭 된 것을 안다.

내 솔루션은 누락 패킷을 기본 패킷으로 교체하고 예상 패킷 수 카운터를 증가시키는 것입니다. 기본적으로, 필자는 손실 된 픽셀을 검은 픽셀로 채울 계획이며 수신 된 패킷을 사용하여 가능한 가장 완벽한 그림을 만듭니다. 나는 이것을 어떻게하는지 모른다. 수신 된 패킷 번호와 예상 패킷 번호가 일치하지 않으면 단순히 데이터 [3]을 0으로 설정하려고 시도했지만 작동하지 않았습니다.

다른 제안 된 솔루션을 환영합니다.

+5

달리해야 할 특별한 이유가 없으면 (분명히) UDP 대신 TCP를 통해 파일을 보냅니다. TCP가 자동으로 재전송을 처리합니다. –

+0

이것은 귀하의 질문에 대한 답변입니다. 시간에 민감한 전송 및 손실 된 패킷이 최종 결과에 막대한 영향을 미치지 않는 곳에서는 UDP를 예약해야합니다. 예를 들어 오디오 스트림을 상상해보십시오. –

+0

프로토콜을 사용하지 않고 TCP 또는 UDP도 사용하지 않습니다. 전송 스타일이 UDP에 더 가깝다는 것은 사실입니다. 내 프로젝트와 전파의 한계로 인해 패킷 당 128 비트 만 전송할 수 있는데 이는 TCP 헤더 자체의 크기라고 생각합니다. 실제 데이터를 저장할 공간이 없습니다. – user1409199

답변

2

U는 이미지 형식을 언급하지 않았습니다. 조잡한 RGB 이미지를 보내는 경우 0으로 설정하면 작동하지만 jpeg와 같은 압축 이미지로 재생하고 엔트로피 인코딩에 사용되는 블록 크기 나 테이블에 대한 정보가있는 헤더 패킷을 잃어버린 경우에는 이미지를 얻을 방법이 없습니다 뒤로.

+0

내 이미지 형식이 Jpeg입니다. 당신이 그림 파일을 .raw로 저장한다면 잃어버린 패킷을 검은 색 픽셀로 대체하는 독창적 인 아이디어를 구현할 수 있다고 말하고 있습니까? – user1409199

+0

jpeg 형식의 정보는 초기 바이트 수는 픽셀이 아닙니다. 곧 나오는 바이트에서 이미지를 해독하는 방법을 알려줍니다. 이미지를 비트 맵 단순 RGB 이미지로 인코딩하면 픽셀을 검정색 이미지로 대체 할 수 있지만 이미지 크기는 매우 커집니다. 따라서 jpeg 압축을 사용하고 인코딩하는 동안 사전 정의 된 양자화 및 허프 먼 테이블을 사용하십시오. 디코더 측에서 이미지의 적절한 jpeg 헤더 형식으로 추가하십시오. – Akash

관련 문제