最近将前几年做无人机图传时代码翻出来看了看,发现当时虽然做的比较肤浅,不过对于h264视频流的优化方面,还是有一定借鉴意义的。

当时的应用场景是这样的,无人机上当做服务端,用rtsp往外广播无人机摄像头采集到的视频流。再用一台或多台手机当成客户端,用rtsp协议来接收视频流并播放。我们这里不讨论rtsp协议,只说下h264的优化方案。

因为无人机和手机之间距离影响的原因,飞得越远,wifi信号越弱。且无人机飞行时,camera镜头一直在晃动,采集到的图像变化很大,导致手机或电脑端预览画面会有严重的马赛克,以及图像会变得相当的模糊。

针对这种带宽不足,且是运动的场景,当时做了一些优化,先列举出来,供大家参考。

1.)去掉b帧(双向预测帧),只用I帧和P帧,可以节省编码时间,在图传中可以减少延时。但因为缺少了向后预测对比,画质会比有B帧的要模糊。(提升速度,晃动时延时可以减少100毫秒)

2.)启用FMO,即灵活的宏块次序。误码方式之一。将宏块顺序打乱组成新的slice编码和打包传输。当某个Slice丢失而其他 slice数据正确接收的情况下,解码器可以利用相邻的宏块数据掩盖丢失的宏块,以提高解码端图像恢复效果。(去马赛克)

3.)关闭RS冗余块。当打开冗余块时,允许编码器发送图像某些区域的冗余编码数据,这样当基本编码数据在传输过程丢失时,仍可以显示图像某些区域。例如,一个较清晰的slice附加一个较模糊的slice,当解码器基本slice可用时,解码器丢掉冗余slice,只对基本slice解码。当基本slice丢失时,就可以使用冗余slice解码。不过这样一来,应该会增强网络带宽的负担。所以网络不好时,要把它关了(提升速度。如果不管网络,打开它可以提升清晰度)

4.)启用去方块、马赛克环形滤波(去马赛克)

5.)启用RVLC反向变长编码,开启它后当解码发生错误时,不会将所有比特都丢掉重新同步,而是只丢掉错误的,这样影响的区域将会变小(去马赛克)

6.)启用帧内预测。这样当前帧出现马赛克时,不会传染到后面的帧。

但是要模糊些。 当用帧间预测时,编码的宏块只能用邻近帧内编码的宏块的像素作为自己的预测,要清晰些,但是有马赛克时,会传染,并且很难恢复(去马赛克)

7.)把量化值设小一点。量化值越小,数据量越大。 量化是在不降低视觉效果的前提下减少图像编码长度,减少视觉恢复中不必要的信息。H264采用标量量化技术,它将每个图像样点编码映射成较小的数值。QP值对应量化步长的序号,对于亮度而言,此值范围为0~51 。值越小,量化步长越小,量化的精度就越高,意味着同样画质的情况下,产生的数据量可能会更大。QP值每增加6,量化步长就增加一倍。(去模糊)

8.)减少I帧个数。这个可能是大家都没想到的,按常理来讲,I帧越多,图像不是越清晰么?但是不要忘记了,我们的带宽有限。I帧多了,自然会压缩其他的P帧,分配到p帧的数据就少了,自然就会更模糊了。(去马赛克)

9.)采用动态码率VBR, 输出码率会在一定范围内波动,对于小幅晃动,方块效应会有所改善,但对剧烈晃动仍无能为力(去马赛克)

花屏/绿屏的原因

播放画面出现图像紊乱,像被刮花了一样。大面积的异常颜色的方块图,绿屏或其他颜色现象

丢失参考帧或者b帧p帧上的数据丢失导致, I 帧由于是帧内压缩,因此可以独立解码播放,而 B 帧,一旦丢失了 I 帧或者后面的 P 帧,则会解码失败,而 P 帧一旦丢失了前面的 I/B/P 帧,也会导致解码失败。不要丢弃编码后、解码前的视频帧数据,实在要丢,一次丢一整个 GOP(一个I帧到下一个I帧中间的数据)

H264马赛克、延时的优化相关推荐

  1. 是网络直播延时(1):起播延时及优化

    谁都知道清晰度.流畅度.延时是直播的几大关键指标,尤其是在互动直播.移动直播大行其道的当下,延时更是成为了各直播平台.CDN.直播云服务商比拼的至高点.然而,但是,BUT,你真的了解延时么?不能全面了 ...

  2. mediacodec延时_FFmpeg优化点播延时方案

    场景要求 项目要求点播速度是300到500毫秒之间,现在最长的点播延时是1300毫秒(有的时候甚至无法播放视频),生产环境是RTSP传输h264裸流数据,研究在接收到I帧的时候,开始出来图像,简化FF ...

  3. 基于 RTS 超低延时直播优化强互动场景体验

    RTS 在阿里云视频直播的基础上进行底层技术优化,通过集成阿里云播放器 SDK,支持在千万级并发场景下节点间毫秒级延时直播的能力,弥补了传统直播存在 3~6 秒延时的问题,确保了超低延时.低卡顿.秒开 ...

  4. c mysql 延时_Mysql 优化之延迟索引和分页优化

    什么是延迟索引?使用索引查询出来数据,之后把查询结果和同一张表中数据进行连接查询,进而提高查询速度! 分页是一个很常见功能,select   **  from tableName limit  ($p ...

  5. ijkplayer基于rtsp直播延时的深度优化

    现在ijkPlayer是许多播放器.直播平台的首选,相信很多开发者都接触过ijkPlayer,无论是Android工程师还是iOS工程师.我曾经在Github上的ijkPlayer开源项目上提问过:视 ...

  6. RTSP直播延时的深度优化

    2018年12月26日 02:09:22 徐福记456 阅读数:3171 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011686167/art ...

  7. 降低FFmpeg的解码延时

    不知大家有没有发现FFmpeg长时间解码会出现延时增大(特别是在丢包的情况下)?如果在播放本地文件,这个问题是没有影响的.但是如果播放的是实时流,则图像的延时就越来越大.本人是做安防监控的,很多招标项 ...

  8. 前后端分离+本地服务实时刷新+缓存管理+接口proxy+静态资源增量更新+各种性能优化+上线运维发布——gulp工作流搭建...

    技巧集:http://www.gulpjs.com.cn/docs/recipes/ 其实无非就是利用各种gulp插件.node脚本对项目文件做各种IO操作,只是备忘,需要的话,还是自己重新写最合适. ...

  9. 消费者服务消费延时分析

    消费者服务背景 网络订单中有很多业务使用了mq,主要是为了流量高峰期业务的异步.削峰处理,提高业务的吞吐量.   消息生产消费处理机制 consumer server包含每个业务线的消息监听者.定时任 ...

最新文章

  1. 国务院任命!清华、北航分别迎来新任副校长
  2. IBM首家发布了公有云中的裸机Kubernetes
  3. C++语言基本类型—浮点型
  4. vue一二级联动清空二级数据_【周一实用技巧】二级联动还不够,自动更新才最牛。Excel 2013利用数据验证条件制作一级、二级联动和自动更新下拉列表...
  5. C# Winform程序中使用TeeChart实现简单的图表展示
  6. 『设计模式』我就要一个对象,你别给我这么多好不好!---单例模式
  7. js实现打开本地文件或文件夹
  8. 16 CO配置-控制-产品成本控制-产品成本计划编制-定义成本构成结构
  9. 欧科云链OKLink:以太坊上借贷协议借款量突破百亿美元
  10. 2010年最新网络推广方式总结
  11. 不属于ipo模型的 python_python ipo模型是指什么?_后端开发
  12. 【数据库原理实验(openGauss)】创建数据库、表和索引
  13. 《大众创业做电商——淘宝与微店 开店 运营 推广 一册通》一一2.5 O2O电子商务模式...
  14. 不同类型游戏音效竟有不同制作方法?—动作类型音效制作
  15. 趁我们还年轻,就应该奋斗
  16. Chrome 插件下载、安装、加载正在开发的扩展程序和打包扩展程序
  17. (附源码)anjule客户信息管理系统 毕业设计 181936
  18. linux 指定某个节点,11g RAC单独关闭某个节点的疑问
  19. [dpdk] TSC , HPET, Timer, Event Timer,RDTSCP
  20. 【回归分析】[6]--残差分析

热门文章

  1. java用axis方式调用webservice接口
  2. 7-21 输出大写英文字母 (15分)
  3. 读《Java核心技术 卷I》有感之第3章 Java的基本程序设计结构
  4. Windows 修改桌面Desktop的默认路径为D盘
  5. 超详细易理解的HTTPS(易上手哦)
  6. ​携创教育:2022年下半年自考准考证号查询系统汇总
  7. Cloudreve离线下载Aria2安装教程
  8. QtCreator添加文件夹
  9. Windows 8中IE10无法下载文件的解决方法
  10. NBA球员 ESPN前20排名:詹姆斯再居榜首