文章转自:https://cloud.tencent.com/community/article/269778

简介

最近有个需求是与视频聊天相关,之前有看到过腾讯云有视频直播的产品,不清楚是否也支持视频聊天。经过一番查找,发现除了直播的demo,还专门有一个视频聊天的demo,于是便下下来研究一下。

这是文档:https://www.qcloud.com/document/product/268/7603

这是视频直播demo工程:https://github.com/zhaoyang21cn/ILiveSDK_Android_Suixinbo

这是视频聊天demo工程:https://github.com/zhaoyang21cn/CallSDK_Android_Demo

本文只讨论视频聊天的demo,下载下来简单配置一下,工程就能跑起来。注册两个账号后,就可以互相呼叫了。这里注意一下,需要开启相机权限,否则会是一片黑屏。界面大概是这样的,会有两个渲染窗口,一个自己的,一个对方的,右边一些操作的按钮,可以操作美颜、切换摄像头等等(这里只有自己的窗口)。

遮罩与蒙层

工程跑起来以后,就要做一些定制的事情了。需求要求有遮罩和模糊的效果(不要问为什么,反正有就是了)。遮罩比较简单,直接盖一层ImageView就好了。模糊的话,如果要做高斯模糊,就要对视频数据进行处理。首先尝试一下用最简单的盖一层黑色蒙层看一下效果如何。为了方便测试,在右侧加了两个操作的按钮。在布局里面添加了对应的item。

遮罩的效果:

蒙层的效果:(50%的黑色蒙层)

灰阶、旋转、模糊

从效果上看,蒙层确实差,看来只能从视频数据入手了。翻了一遍文档,终于找到定制视频的方法(https://www.qcloud.com/document/product/268/7645)。 有两种方式可以处理视频数据,来达到想要的效果。

1、拦截sdk的相机数据,进行处理后,再传回到sdk。

2、自己采集相机数据,进行处理后,传给sdk进行上传。

尝试使用第一种方式,需要调用setLocalVideoPreProcessCallback来拦截相机回调的数据,注意视频数据格式为I420(视频数据格式相关知识可以参考这篇文章《图文详解YUV420数据格式》), 而且需要在相机初始化以后调用,否则会失败。

针对视频数据,首先尝试了灰阶化和旋转的修改。

灰阶化:

旋转:(注意宽高也要反过来)

模糊:

真正的高斯模糊性能要求较高,比较难达到实时的要求,需要使用Shader来实现,这里打算先体验一下模糊的效果,所以选择最简单的方式来实现。为了进行模糊操作,需要先转换为RGB格式,处理完了以后再转换为YUV数据。流程是这样的:YUV -> RGB -> blur ->YUV,这里的blur采用近似的算法来代替(网上找到fastBlur方法)。对于数据转换的方法,可以参考这篇文章《图像RGB2YUV与YUV2RGB格式互转介绍》,测试了一下,腾讯云的数据是YUV而不是YCbCr,所以这里采用的是2、3的转换。


(模糊半径:10)


(模糊半径:30)

模糊处理耗时:150 ~200 ms

后续工作

本文使用的都是直接在java层进行处理,数据处理起来性能效率很差(150-200ms),界面会很卡(掉帧)。要真能用于实际的业务,必须要使用第二种方式来进行数据处理,就是自行采集数据,利用硬件GPU进行数据处理,然后提交sdk渲染和传输,方能达到性能与效果的平衡,当然这种方式开发量和质量保证的难度也会相应地增加。

详细代码请查看附件。

参考文献

腾讯云文档:https://www.qcloud.com/document/product/268/7603
YUV数据格式:http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html
YUV与RGB转换:http://www.cnblogs.com/qiqibaby/p/5260167.html

Android基于腾讯云的视频聊天研究相关推荐

  1. Android基于腾讯云的小直播开发配置

    如何快速搭建小直播,请参考文档:https://cloud.tencent.com/document/product/454/7999 1. 小直播前后台结构图 腾讯云: 提供了云直播(LVB),点播 ...

  2. 一站式体验腾讯云音视频及融合通信技术

    对于一款音视频产品,从底层编解码.到传输网络.到平台架构.再到用户终端,无一不决定产品"生死",与此同时,伴随用户数量的提升和对观看体验的不断提高,如何融合AI技术.优化算法.利用 ...

  3. 基于腾讯云搭建属于自己的Fiora聊天室

    这是基于fiora开源系统搭建的一个即时在线聊天室,使用宝塔面板搭建.只需一键注册即可享受在线聊天的乐趣. 前言 本项目基于腾讯云轻量搭建,目前腾讯云启动了无忧计划,超级划算,欢迎大家选购~ 购买链接 ...

  4. 基于腾讯云COS+CI图文音视频解决方案

    从早期的门户网站,到后面的feeds流,再到如今的各种垂直行业的社区分享,一次次变更成就了近几年行业中的领跑者.从行业领先的微博,再看小红书.B站等等,绝对都是可以看到feeds和社区的影子.而其中跑 ...

  5. 【新知实验室】手把手实现腾讯云音视频应用

    腾讯云音视频是什么? 腾讯云音视频(TRTC)提供一站式视频解决方案,包括点播直播.实时视频通话.短视频等视频服务,广泛应用于在线视频.电商.游戏直播.在线教育等场景.实时音视频基于腾讯21年来在网络 ...

  6. 基于Trtc的内贸站视频聊天服务

    基于Trtc的内贸站视频聊天服务分享 说到视频聊天,大家第一个想到的是啥,QQ! 其实最早的视频聊天工具应该是 : Netmeeting(我能找到的最早聊天工具) Netmeeting是Windows ...

  7. 【新知实验室】腾讯云音视频应用

    前几天和同事了解了一下腾讯云音视频,并且根据文档亲自使用了一下,感觉还是非常不错的,在这里和大家分享一下. 到底什么是腾讯云音视频 腾讯云音视频是腾讯提供的一站式视频解决方案,其中包括了点播.直播.实 ...

  8. 实战内容(14)- 音视频技术如何为元宇宙提供全真稳的全新体验之漫话腾讯云音视频

    目录 引言 多年积累后的"全真稳"腾讯音视频 多面手,腾讯云音视频的有多"全"? 身临其境,腾讯云音视频有多"真" 固若金汤,腾讯云音视频有 ...

  9. 基于腾讯云(TRTC)的客户端直播中台SDK架构设计

    1.腾讯云SDK 1.1.腾讯云实时通话(TRTC) 产品概述https://cloud.tencent.com/document/product/647/16788        产品功能https ...

最新文章

  1. 免费公开课 | 基于定制数据流技术的AI计算加速
  2. WinAPI: SetWindowPos - 改变窗口的位置与状态
  3. MYSQL的一些常用函数
  4. 【PP操作手册】试制计划
  5. 非域环境下使用证书部署数据库(SqlServer2008R2)镜像
  6. tf.nn.dropout
  7. 记一次lvs-tunnel模式的故障分析(7)
  8. 信号怎么用matlab分类,使用迁移学习做信号分类
  9. 西威变频器调试软件GF-EXprss
  10. 忘了neo4j密码怎么办
  11. 软件破解高手常用的破解工具介绍
  12. vue之router莫名其妙的bug
  13. RxSwift使用教程
  14. python 图灵完备_什么是图灵完备?
  15. 关于性能测试(网络)
  16. win10系统卷影复制服务器,卷影复制Windows 10与全能备份软件
  17. jsp+ssm+mysql实现图书馆预约占座管理系统项目
  18. Py3+Django 获取Foursquare的Check-in History
  19. 深度增强学习(DRL)漫谈 - 从DQN到AlphaGo
  20. 云服务器搭建个人博客网站WordPress教程

热门文章

  1. 三款软件,让你的文字转语音更简单
  2. ★大塚 愛【LOVE IS BORN】~3rd Anniversary 2006~のライブDVD★
  3. 在Linux和Windows上安装kafka(版本:2.12-2.8.0)
  4. android 照片特效,Android使用Gallery实现照片拖动的特效
  5. 楚留香获取服务器信息未响应,楚留香手游后期输出乏力解决方法分享
  6. Proteus 8.12 仿真软件安装
  7. UnrealEd3视图导航及常用快捷键
  8. 科普|AGV自动运输车的不同导航方式以及优缺点
  9. 店铺降权的原因|盛天海科技
  10. RDKit | 基于RDKit和SMARTS的化学反应处理