直播平台开发直播特效的原理与难点

在这个颜值即正义的时代,不论是通过 Web 还是移动端发起直播,美颜与特效已经是很多直播平台的标配功能。更有甚者,已经开始尝试将AR融入产品,增加更多可以吸引用户的体验。不过要在直播中实现以上任何一个功能,都会对开发者的技术栈提出了进一步的要求。不论是在Web端基于 WebRTC 进行视频通话或在线教育的产品,还是 Android、iOS 上做直播。本文将简要梳理实现特效的原理,以及其中需要注意的难点。

直播特效的实现原理

直播的具体流程,包括:采集、前处理、编码、传输、解码、后处理、播放。通常情况下,我们会在摄像头采集到视频图像后,开始对其进行特效处理,也就是在前处理的过程中进行。

实现直播特效的流程如下:

  • 采集:视频的采集源主要有三种:摄像头采集、屏幕录制和从视频文件推流。直播中常见的是通过摄像头采集的图像。以Android为例,由于需要进行图像的二次处理(滤镜、特效),所以使用 SurfaceTexture来处理图像流,给采集到的图像增添特效、滤镜等。SurfaceTexture 是一个纹理,可以想象成一个 View 的中间件。Camera 把视频采集的内容交给 SurfaceTexture,SurfaceTexture 进行美颜处理,然后把内容交给 SurfaceView,渲染出来。

  • 前处理:对采集到的图像进行处理:比如通过均值模糊、高斯模糊和中值滤波等去噪算法,给原始视频进行“磨皮”;或者利用 GPUImage 库,增加滤镜;又或者是利用 ARCore、ARKit 等工具,为视频添加实时的 AR 特效。

  • 在完成图像的处理后,按照合适码率、格式进行编码。

  • 最后,推流到 CDN。

要实现美颜效果,不论是基于 WebRTC 的移动端还是Web端,都可以通过 GPUImage 来实现。如果是基于 WebRTC 与 React Native、GPUImage 相结合即可,不过需要修改 react-native-webrtc 的源码。

开发中的难点

在直播中实现特效、滤镜,甚至AR特效的例子,我们可以在网上找到很多,我们也曾分享过基于 ARCore、ARKit 来实现。不过其中有很多需要开发者注意的难点。

一、缺乏可扩展性、灵活性

如果通过 WebRTC 来进行开发,WebRTC 提供的渲染器是基于 GLSurfaceView 的 View 组件。与SurfaceView 相比,它没有动画或者变形特效,因为 GLSurfaceView 是窗口 (window)的一部分。 因此,如果想往其他地方绘制,或者获取视频数据,就会比较麻烦。

二、需要大量修改源码

通过 WebRTC 的 Native API 是无法获取摄像头数据的,如果要做美颜,需要做大量改动,比如上述提到的修改 react-native-webrtc 源码,也只是其中一部分工作。另外可能还需要调整 WebRTC 源码,并不是拿来即用,这就要求开发者要熟悉 WebRTC。

三、性能与功耗问题

性能与功耗问题在 Android 平台上比较明显。通常情况下,对图像进行处理时,我们可以选择输入 YUV 数据,让 CPU 进行图像处理,然后交给软件/硬件编码器进行编码。但这样做会产生较高的 CPU 占用率,功耗随之增加,App 响应速度受到影响。所以我们需要尽量使用 GPU 来完成图形处理,更多地利用硬件性能。

在编码上也存在相同问题。软件编码的优点是灵活度高,但是缺点是功耗高,影响性能。硬件编码则相对速度更快、功耗更低,是更优的选择。但它的问题在于,能做的优化和参数调整,取决于硬件厂商开放的接口。而且硬件编码在部分 Android 手机上的兼容性也存在问题。

四、硬件兼容性问题

WebRTC 等自研方案还需要考虑硬件的兼容性问题。iOS 设备相对简单,但是在 Android 设备上,不同芯片、系统版本等因素,存在兼容问题。

Agora SDK 2.1版:实现直播特效更灵活

相对于这种自研来讲,声网Agora SDK 将采集和渲染开放,开发者可以更灵活的处理视频数据。如下图绿色部分所示,处理权限开放给开发者,带来更大的灵活性与扩展性。

Capture(采集):声网Agora SDK 支持自定义的视频源类型,可以方便利用我们提供的辅助类构建 camera 视频源,或者屏幕共享视频源,或者文件视频源等。

添加特效:Agora SDK 的新接口直接利用 Android 系统组件Surface Texture 处理,并传递给 GPU,最后通过Agora SDK 硬件编码器进行视频编码。整条链路上最大限度发挥硬件性能,不经过内存拷贝,不仅可以获得更好的性能与功耗表现,避免影响 App 响应速度,也无需担心硬件编解码问题。

Renderer(渲染):声网Agora SDK 开放了视频渲染器的接口,用户可以灵活的根据现有的业务,向 Android 标准的 SurfaceView,TextureView组件上或者是自定义的 View 组件上渲染。

开放新功能带来的差异

升级2.1版之前:

在2.1之前的版本中,开发者需要通过 pushExternalVideoSource 接口,以共享Texture id 的方式来实现特效、美颜等功能,即需要传入texture 所在的 EGL Context,以及Texture 的id。

升级2.1之后:

通过2.1版的自定义视频源、自定义渲染器两个新功能,能更灵活地实现想要的效果。通过它们,开发者可以使用原有的共享 texture id 的方式,也可以利用系统组件,如 SurfaceTexture 或者 Surface 来传递 texture。例如,TextureSource 类封装了 SurfaceTexture 对象,开发者可以利用它创建出 EglSurface,美颜处理后得到纹理数据,直接绘制到 EglSurface 上即可。

这两个功能给了我们在视频、图像渲染方面提供更开放的想象空间,可以在直播中实现更多场景,比如我们此前结合 ARCore、ARKit 实现的 AR 场景,再比如类似抖音跳舞机的游戏也能放到直播中。

直播平台开发直播特效的原理与难点

本文转载自网络,感谢(声网Agora)的分享,转载仅为分享干货知识,如有侵权欢迎联系云豹科技进行删除处理

直播平台开发直播特效的原理与难点相关推荐

  1. 电商直播平台开发一般包含哪几种模式?

    所谓的"直播带货",实际上是通过直播平台,亦或是短视频平台,实现对在线商城的引流,从而快速获客手段.但是随着这种模式的不断发展,便逐渐催生出了一种新的电商应用系统,即直播带货系统. ...

  2. 详细直播平台开发细节,提供成品直播系统源码

    直播的火爆从2016年一直烧到了2018年,直播平台开发的技术--直播APP源码也渐渐浮出水面,在直播大火的现在,您是不是也想要一款独属于自己的直播平台呢?小编今天为您讲解一款简易直播平台开发细节. ...

  3. 短视频平台开发VS直播平台开发,未来发展趋势

    2018年直播平台依旧火热,但短视频平台也迅速崛起,行业间的竞争愈加激烈,也有很多平台终因不适应市场被淘汰.短视频和直播也是展开了一场"绞杀战",短视频嵌入到直播中增加内容,而短视 ...

  4. 为什么我说,卖货直播平台开发的定位可以从这方面入手

    互联网给予了人们更多的便利,开阔了人的眼界,也方便了人们的生活,很多程序软件都在为了"如何更方便用户(如何更满足用户偷懒的心理)"而广泛进行大数据分析,且越来越多的软件可开发者们正 ...

  5. 直播源代码中关于手机直播平台开发的登陆注册介绍

    一套完整的手机直播平台,需要有一套完善的直播源代码.开发一套符合大众需求,得到市场认可的直播平台,是需要开发公司经过不断优化调整更新的.只有开发出符合大众需求的直播平台,才能快速在市场当中得到认可和使 ...

  6. 直播平台开发,直播各个分类单例设计展示

    直播平台开发,直播各个分类单例设计展示 一. 饿汉式实现 立即加载就是使用类的时候已经将对象创建完毕(不管以后会不会使用到该实例化对象,先创建了再说.很着急的样子,故又被称为"饿汉模式&qu ...

  7. IOS直播平台开发简单的队列效果实现

    说到IOS直播平台开发队列的话就想到了多线程,NSOperation ,我们可以重写它,然后在 start 方法中添加动画,但是注意我们只是需要让这些消息排队,更新 UI 还是要在主线程操作:我们还要 ...

  8. 直播平台开发中解决iOS 14 兼容问题和静默推送

    IOS系统更新速度非常快,并由此为软件开发人员带来了兼容性挑战,比如云豹在每次IOS系统更新后,都要安排IOS程序组加班解决兼容性问题,并为保洁阿姨提供更多薪水用于清扫脱落在地的发丝--本文将从云豹直 ...

  9. 直播平台开发时iOS 开发内购功能,直播平台源码搭建

    1.首先登录苹果账号,在直播平台源码搭建完成好后,进入后台管理中心添加商品,选择功能----App内购买项目------添加商品类型.商品的ID.以及说明信息. 2.在直播平台源码搭建后台创建沙盒测试 ...

最新文章

  1. 选IDC房时,用脚本截取丢失包和rtt的值作比对
  2. AI一分钟 | “芯片门”影响仍在,英伟达旗下多款芯片也遭遇“幽灵”漏洞影响;贾跃亭邀媒体试乘法乐第FF91,你怎么看?
  3. 「咖啡馆」里的任正非:开放的技术和商业,不会遵循「丛林法则」
  4. 现在学Web前端,发展前景如何?好就业吗?
  5. Git权威指南-51CTO读书
  6. 数模国赛要点与注意事项全分享!
  7. 加时间水印_如何在手机照片上添加时间和日期?打开这个设置即可添加,超方便...
  8. mongodb不等于某个值_MongoDB的安装以及基本增删改查命令
  9. CheckPoint
  10. XML-RPC技术在WP上研究(一)
  11. SpringMvc-ResponseBodyAdvice接口与@ControllerAdvice注解
  12. 简单详细叙述FpGrowth算法思想(附python源码实现)
  13. Linux内核启动过程
  14. 第五章:软件详细设计
  15. python blp模型 估计_简述BLP模型
  16. 别扔掉你的登机牌,黑客可以用它获取个人信息
  17. php自动生成phpunit,PHP单元测试框架PHPUnit的使用
  18. js做的一个猜数字小游戏
  19. 深耕5G云专网,阿里云祝顺民入选“2022年度5G创新人物”
  20. 基于内容的图片检索CBIR简介

热门文章

  1. 站长链接php提交实例,百度站长平台链接提交
  2. 高数 03.05函数的极值与最大值最小值
  3. VMware+下载安装CentOS7+配置+虚拟机克隆 图文详细教程 转
  4. Unity接入Google广告(AdMob)
  5. 2022资料员-岗位技能(资料员)考试题模拟考试题库及在线模拟考试
  6. wamp5的www目录设置
  7.  传智播客开课的第三天
  8. 大杀器!攻克目标检测难点秘籍四,数据增强大法
  9. 2021-07-29---数论模板
  10. 白鹭时代与html5关系,白鹭时代观点:HTML5行业将进入红利收割期