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

标签 c jpeg wireless

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

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

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

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

但是, radio 信号不够强,无法保证接收到所有数据包。在我的测试中,传输数据包丢失是很常见的。即使丢失一个数据包,镜像文件也会损坏。接收率约为85%。

每个数据包都有编号。如果接收到的数据包数量大于预期的数据包数量,则接收方知道数据包已被丢弃。

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

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

最佳答案

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

关于c - 使用 fwrite() 进行 Jpeg 无线传输;需要处理丢失的数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10695309/

相关文章:

linux - Openwrt 路由器上的客户端负载均衡

.net - libjpeg 和 .Net jpeg 编解码器在单色数据上真的有很大不同吗?

delphi - 在 Delphi 中显示某些 JPG 文件时出现问题

android - Google Android - 如何确定 3g 和 2g 是否打开

c# - Xamarin - 查看设备连接到 Wifi 网络的可靠方式 (Android)

java - 压缩JPG使图像变绿

c - C 中的结构体和函数

C/C++ 'continue' 等价于 VB6

c - C 中带有 malloc 的子字符串函数返回不正确的值

c - *(a++) 给出错误但不是 *(a+1)??数组名在哪里?