linux下mjpg-streamer的mjpeg格式下不显示图片,yuy可以

参考文章:树莓派使用mjpg-streamer不显示图像-CSDN社区

其中,用户“神说要有光o ”的回复能够成功解决,这是目前我全网搜到的唯一给出的解决方案,很感谢这位大神!大大减少了我单独再去阅读源码的时间,随后发了个提问,以寻求解决思路,借鉴牛人是如何解决问题的。
提问地址:(46条消息) mjpg-streamer的mjpeg格式下不显示图片,yuy可以。-服务器-CSDN问答
用户"IT论之程序员 "给出了详细的回答,收益匪浅,捋清了很多流程,再次感谢!!


以下是用户"IT论之程序员 "具体的回答:

您好,非常感谢您的赞美,我当时解决这个问题的思路是:

  1. 根据报错信息mjpeg格式下不显示图片,yuy可以。可以判断出是mjpeg格式的视频流解析出问题了,首先想到的是解析mjpeg格式的地方可能有bug。
  2. mjpg-streamer是一个开源的mjpeg视频流服务器,所以首先去翻阅它的源码,定位到解析mjpeg格式视频的地方。
  3. 在mjpg-streamer的源码中,找到input_uvc.c这个文件,里面有解析usb视频设备获得的mjpeg格式视频流的代码。
  4. 仔细阅读其中的uvc_mjpeg_decode函数,发现里面有这么一段代码:
    c
    pglobal->inlpcontext->id.size =
    memcpy(pglobal->inpcontext->id.buf, pcontext->videoln->tmpbuffer,
    pcontext->videoln->buf.bytesused);
  5. 这段代码貌似对mjpeg视频流的解析出现了问题,tmpbuffer保存了一帧mjpeg图片的数据,bytesused表示这一帧图片的大小。但是id.size直接等于bytesused,这似乎不太正确。mjpeg图片的size应该根据mjpeg图片的数据内容得到。
  6. 所以将这段代码修改为正确解析mjpeg图片size的代码:
    c
    pglobal->inlpcontext->id.size =
    memcpy(pglobal->inpcontext->id.buf, pcontext->videoln->tmpbuffer,
    pcontext->videoln->framesizeln);
    framesizeln表示解析出的这一帧mjpeg图片的真实大小。
  7. 修改并重新编译mjpg-streamer后,问题得以解决。
    所以总体来说,解决这个问题的关键在于仔细阅读源代码,理解mjpeg格式的解析过程,找出解析出现的问题,并作出正确的修改。希望这个思路能给您一定的帮助。如果有任何其他问题,欢迎您提出,我很乐意进行交流与解答。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值