消除MPEG4算法的马赛克问题?

pigzoo 2002-11-19 11:26:02
采用MPEG4算法,如DivX, MS-MP42等进行压缩,在internet上用UDP传输,很容易因为丢掉数据帧而导致马赛克现象?如何克服这个问题?
当然我们只能用UDP.


...全文
124 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Flwu 2002-12-15
  • 打赏
  • 举报
回复
up
iactive 2002-12-08
  • 打赏
  • 举报
回复
不过无论如何设置,对于'M', 'P', '4', '2'的算法,如何设置才能将keyframe频率加多?

wangjidh 2002-12-01
  • 打赏
  • 举报
回复
马赛克产生的原因之我见
各种压缩算法并没有错,他们确实把图像很好的压缩了,如果存在硬盘上再播放,可以说根本看不见马赛克,可是为什么我们用视频流回放的时候会出现马赛克?
因为视频流压缩采样都是有参照物的,即参照关键帧或者前一个图像画面,这样数据包才会很小,也就是说每帧独立播放的时候,回很次 :(
而大部分的视频流播放都是直接把的到的数据解压显示出来,不分什么帧不帧的,直接显示,造成解压因为没有足够的参照标准而使质量降低(马赛克出现),而硬盘上的都是使用现成的播放器,大家做的时候顶多是选择一种控件加以利用,为什么MP71不提供视频流的回显呢???

而如何提高解压质量?只能参考微软的解压方式,不过我没有Netmeeting的源码:(

谁找到了压缩算法的回显方式,麻烦共享,谢谢
wangjidh 2002-11-30
  • 打赏
  • 举报
回复
更正 156 应为 176
wangjidh 2002-11-30
  • 打赏
  • 举报
回复
当图片如下定义时,基本没有马赛克现象
m_BmpU.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
m_BmpU.bmiHeader.biWidth=156;
m_BmpU.bmiHeader.biHeight=144;
m_BmpU.bmiHeader.biPlanes=1;
m_BmpU.bmiHeader.biBitCount=16;
m_BmpU.bmiHeader.biSizeImage=50688;
当如下定义时,马赛克严重
m_BmpU.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
m_BmpU.bmiHeader.biWidth=156*2;
m_BmpU.bmiHeader.biHeight=144*2;
m_BmpU.bmiHeader.biPlanes=1;
m_BmpU.bmiHeader.biBitCount=16;
m_BmpU.bmiHeader.biSizeImage=50688*4;

WHY?
crystal_heart 2002-11-30
  • 打赏
  • 举报
回复
up
sky_horse 2002-11-29
  • 打赏
  • 举报
回复
在视讯会议系统里,发现丢包时的处理就是冻结图像,一直等到下一个关键帧才解冻,这样就不会出现马赛克,但是会出现视频停顿。如果网络带宽不够,那么丢包是不可避免的,所以要么选更高的压缩率,要么保证足够带宽。
wangjidh 2002-11-28
  • 打赏
  • 举报
回复
另外UDP协议丢数据不是很厉害,我有一个程序,发送的是图片数据,在几分钟内才可能发生丢失数据现象,而且总是丢7各字节,我都觉得奇怪死了,多不丢,少不丢,总丢7个 :(

God,为什么是7呢?而且还不是经常丢 :(
wangjidh 2002-11-28
  • 打赏
  • 举报
回复
另外还有一个问题,我发现每次服务器端发送的数据都小得可怜,才几百字节,这是什么缘故?如果1秒15桢的话,总共才十几k字节,是压缩算法选择不正确的问题吗? 还是算法中的某些参数设置不当?
win98ddk 2002-11-28
  • 打赏
  • 举报
回复
我看全部用tcp好了,这样不会丢失
zfive 2002-11-27
  • 打赏
  • 举报
回复
memcmp可以参考,但我建议最好不要这样做,太慢
cb615cb 2002-11-27
  • 打赏
  • 举报
回复
这已经不是MPEG4的问题了,MPEG4的数据流格式要求他所需要得到的信息是不丢失的,丢失P帧或者B帧还好一点,图象变化不大。如果是I帧被丢掉,你还怎么去恢复啊!如果丢帧不可避免,就只有在图象的帧头自己加入小块图象在图象中位置的信息,将图象分小,尤其是对于I帧,丢数据更加不可忍受。我看最好的办法还是将图象分小,按照wangjidh(背土蚂蚁)所说的方法,减少丢帧对图象的影响。
kingfire 2002-11-26
  • 打赏
  • 举报
回复
关键帧传频繁点
wangjidh 2002-11-26
  • 打赏
  • 举报
回复
另外我想问一下,在内存数据中查找特定数据的API是什么?
wangjidh 2002-11-26
  • 打赏
  • 举报
回复
因为使用MPEG4编码的电影,看上去非常清晰,为什么视频流就不行?我想可能就是和丢包有关,TNND,为什么他们开发的网上影院能达到那么清晰的效果?直接用那种格式发送多爽!

虽然带宽很宽,但是还是马赛克,气死人了
wangjidh 2002-11-26
  • 打赏
  • 举报
回复
我猜想不是关键帧的问题,在我改的一个程序里,用的是UDP发送的,这样牵涉到丢包的问题,如果一个数据包太大,一次发不完,他就把它丢掉,这样,比较小的视频图无所谓,当图大的时候,丢包严重。 :(

能不能这样,用一个循环定义一个包头和包尾,帧头包含一个32位的自定义数据,帧尾也同样处理,这样可以拆分大的数据包,tcp发送每次的帧头数据,如果下次发TCP过来的时候,仍然没有收到帧尾数据(由长度判断),则丢掉该帧,开始验证下一帧
zfive 2002-11-26
  • 打赏
  • 举报
回复
把关键帧的出现的频率加密,一旦发现丢帧,就丢掉所以与之联系的所以非关键帧,直到下一个关键帧
Analyst 2002-11-19
  • 打赏
  • 举报
回复
微软研究院的一篇论文里展示了一种如何进行视频鲁棒传输的技术,基本原理就是将少数重要的小波系数放在TCP信道里保证无错传输,而其他数据在UDP信道里传输,这样产生数据丢帧也只会使部分图象变的模糊,而不会破坏整体画面的表现。
pigzoo 2002-11-19
  • 打赏
  • 举报
回复
难道没有熟悉MPEG4的高手吗?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧