最近在做一个基于udp的屏幕广播项目时,遇到如下的问题:

在进行屏幕广播时,出现接收到的ffmpeg编码没有显示错误信息的h264数据,然后mediacodec在硬解码这些数据时,发现会偶尔有一两帧的数据会硬解码失败,因此导致视频会出现马赛克。

其实对于这个问题,我一开始是想着为什么会出现解码失败的呢?自己想了之后可能会有如下几个原因:

1、可能是UDP发包和收包过程中存在丢包的现象。

2、有可能是由于UDP发包时和接收到包的顺序出现不相同的情况了,导致数据有异常。

接着我就开始验证是不是这两个原因中的一个导致解码出错了,结果如下:

1、我在发的包中增加的顺序编号,以及每个包的大小信息

2、当我在接收端打印解码失败信息时,发现解码失败的包接收到和拼起来的顺序都没有错误,以及没有出现丢包的情况。

从上面的情况发现可以排除了丢包和收包拼包顺序紊乱的问题,这下可真的暂时还没有找到为何mediacodec还是会出现解码失败的情况。

==============================================================

我写这篇文章的目的当然不是告诉大家我还没搞清楚为何会失败而引起马赛克,而是要告诉大家,其实有时候遇到问题时,或许解决它的办法或者钥匙并在这个问题身上:

当我百思不得其解时,发现如果是mediacodec硬解码正确的数据还是会偶尔出错,那也没办法,目前又修改不了它底层的代码,那只能从另外的角度去思考解决它。

===============================================================

之所以会出现马赛克,虽然是由于解码失败导致后一帧无法根据正确的前一帧解码出正确的数据导致出现马赛克,那换个角度想想,如果能够尽可能减少这种马赛克的影响是不是就可以解决问题了呢?想到这因此有了如下的大胆构想:

1、减少gop_size至一个可以接受的合理范围,因为如果减少gop_size的话可以减少某一帧对正一组数据的影响。

2、增大码率或者减少q_min值,这样让画质更加细腻,即即使出现马赛克,每一个马赛克的块大小也会更小,更加难看出来。

根据上面这上面的两个大胆假设进行修改代码,我做出了如下改动:

1、码率由8M增加到10M

2、gop_size由原来的25减少至10(或者5)

经过上面的修复发现,原本的马赛克居然能够显得根本看不见了。

如果你看到了最后,谢谢你的阅读,但我最想说的其实不仅仅是解决这个问题的办法,而是想说明有时候解决问题的办法可能并不在问题本身,而在其他地方。

关于调试由于mediacodec硬解码时出错导致马赛克出现的弥补办法相关推荐

  1. 让电脑死机的java代码_小编为你win7系统Java活动脚本出错导致电脑死机的还原方法...

    随着电脑的使用率越来越高,我们有时候可能会遇到win7系统Java活动脚本出错导致电脑死机问题,如果我们遇到了win7系统Java活动脚本出错导致电脑死机的问题,要怎么处理win7系统Java活动脚本 ...

  2. Android MediaCodec硬编码H264文件(四)

    在 Android 4.1 版本提供了 MediaCodec 接口来访问设备的编解码器,不同于 FFmpeg 的软件编解码,它采用的是硬件编解码能力,因此在速度上会比软解更具有优势,但是由于 Andr ...

  3. java让电脑死机怎么办,win7系统Java活动脚本出错导致电脑死机的解决方法

    win7系统使用久了,好多网友反馈说win7系统Java活动脚本出错导致电脑死机的问题,非常不方便.有什么办法可以永久解决win7系统Java活动脚本出错导致电脑死机的问题,面对win7系统Java活 ...

  4. java让电脑死机怎么办,技术编辑教你解决win7系统Java活动脚本出错导致电脑死机的解决步骤...

    很多用户都遇到过win7系统Java活动脚本出错导致电脑死机的问题吧,根据小编的了解并不是每个人都会处理win7系统Java活动脚本出错导致电脑死机的问题,因此我就给大家整理总结了win7系统Java ...

  5. MediaCodec硬解流程

    一 MediaCodec概述 MediaCodec 是Android 4.1(api 16)版本引入的低层编解码接口,同时支持音视频的编码和解码.通常与MediaExtractor.MediaMuxe ...

  6. ffmpeg mediacodec 硬解初探

    http://www.cnblogs.com/elesos/p/6860865.html ffmpeg mediacodec 硬解初探 1编译: ffmpeg自3.1版本加入了android medi ...

  7. java让电脑死机怎么办,主编帮你win10系统Java活动脚本出错导致电脑死机的方法...

    今天和大家分享一下win10系统Java活动脚本出错导致电脑死机问题的解决方法,在使用win10系统的过程中经常不知道如何去解决win10系统Java活动脚本出错导致电脑死机的问题,有什么好的办法去解 ...

  8. 电脑一安装java就死机_win7系统Java活动脚本出错导致电脑死机的解决方法

    无论谁在使用电脑的时候都可能会发现Java活动脚本出错导致电脑死机的问题,Java活动脚本出错导致电脑死机让用户们很苦恼,这是怎么回事呢,Java活动脚本出错导致电脑死机有什么简便的处理方式呢,其实只 ...

  9. IDEA调试SpringMvc项目时,出错:找不到ContextLoaderListener

    IDEA调试SpringMvc项目时,出错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoade ...

最新文章

  1. .Net Reactor 5脱壳教程
  2. 面向对象的三大特性(封装、继承、多态)
  3. How to read a book
  4. python学到什么程度可以写爬虫-刚开始学习 Python 到可以写出一个爬虫大约需要多长时间...
  5. c语言多关卡推箱子程序,多关卡地图推箱子游戏
  6. linux seq_file 接口
  7. JS判断一个数字是否为小数
  8. anaconda 卸载_Windows安装Anaconda使用教程
  9. VS2008安装失败,组件安装失败的解决办法
  10. 计算机设计大赛感言,平面设计大赛获奖感言
  11. 每日一题 | 数学神童的红眼睛与蓝眼睛问题
  12. 所见即所得编辑器_文档标记语言与所见即所得编辑器相比的优势
  13. 浅淡测试夹具制作的制作策略
  14. excel两列乱序姓名如何一一对应 excel 两列数据自动配对
  15. iOS加载Gif图片的N种方式
  16. 微软常用运行库合集 v2020.12.10
  17. Python:神奇的pivot函数!(行列转置)
  18. 如何购买合适的笔记本
  19. 我做软件测试的经验教训
  20. PMP项目管理证书难考吗?

热门文章

  1. springboot中的邮件功能
  2. html 预览海康实时视频,海康视频实时预览插件
  3. UBUNTU16 64位编译VLC-2.2.8/4 WIN32应用 遇到的问题及解决办法
  4. 提高网页可访问性的十条建议
  5. 使用python合并pdf文件带书签
  6. Android 点击无效问题总结
  7. Vue项目:Markdown笔记本(中)
  8. win10计算机光驱启动怎么办,Win10系统禁用/开启光驱的详细步骤(图文)
  9. Waf识别工具和83个Waf拦截页面
  10. 大学生创业计划书(原创)