使用fwrite()进行Jpeg无线传输;需要处理丢失的数据包

时间:2012-05-22 03:19:53

标签: c jpeg wireless

我正在开发一种可拍照的设备,并通过无线电波无线传输该照片到台式电脑接收器。在接收端,我使用C和fwrite()重建拆分数据包发送的图像文件。接收数据包执行:

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

data [3]是无符号8位整数,数据类型为u08。

我确认有线文件传输有效。如果发射器和接收器直接连接,则没有问题。

然而,无线电信号不足以保证将接收所有数据包。在我的测试中,丢失传输数据包很常见。如果即使丢失一个数据包,图像文件也会损坏。收到率约为85%。

每个数据包都已编号。如果接收的分组号大于预期的分组号,则接收器知道分组已被丢弃。

我的解决方案是使用默认数据包循环并替换丢失的数据包,同时增加预期的数据包数量计数器。基本上,我计划用黑色像素填充丢失的像素,使用接收的数据包创建最完整的图像。我不知道该怎么做。如果收到的数据包编号和预期的数据包编号不匹配,我尝试将数据[3]设置为0,但这不起作用。

我欢迎其他提议的解决方案。

1 个答案:

答案 0 :(得分:2)

你没有提到图像格式。如果您正在发送原始RGB图像,那么设置为零的东西应该可以工作但是如果您正在使用压缩图像(如jpeg)并且丢失了包含块大小或用于熵编码的表的信息的标头数据包,则无法获取图像回来。