基于腾讯云的视频聊天研究

简介

最近有个需求是与视频聊天相关,之前有看到过腾讯云有视频直播的产品,不清楚是否也支持视频聊天。经过一番查找,发现除了直播的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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

欧彦兴的专栏

1 篇文章3 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏量子位

用深度神经网络修复H漫:看完这篇你就能眼中无码

AI“脑补”能力一流,现在甚至已经能画出艺术品。热爱H漫的死宅们灵光一闪,AI是否也可以把马赛克阻挡的内容也画出来呢?

1005
来自专栏数据派THU

独家 | 手把手教数据可视化工具Tableau

前言 数据的世界正在发生急剧变化,任何人都应该访问自己需要的数据,并具备获取任何数据的洞察力,而tableau正是帮我们洞察数据的好帮手。 Tableau作为B...

4157
来自专栏深度学习之tensorflow实战篇

用R进行文本分析初探——包含导入词库和和导入李白语句

用R进行文本分析初探——以《红楼梦》为例 一.写在前面的话~   刚吃饭的时候同学问我,你为什么要用R做文本分析,你不是应该用R建模么,在我和她解释了一会儿...

3344
来自专栏iOSDevLog

ARKit示例 - 第3部分:添加几何和物理乐趣

在上一篇文章中,我们使用ARKit来检测现实世界中的水平平面,然后将这些平面可视化。在本文中,我们现在将开始为我们的AR体验添加虚拟内容,并开始与检测到的平面进...

811
来自专栏Python绿色通道

Python爬虫实战题荟萃

公众号Python爬虫系列文章基础写完了,所以就有了一些实战题目,有兴趣的可以来去围观一下.,为什么要进行Python项目实战 项目实战第二季

962
来自专栏全栈数据化营销

数据分析:今日头条阅读量和评论量前1000名的文章内容和标题特征

先占个坑,先写个大概的内容,得空后再补充完整的。 之前花了不少时间采集了2017年1月1日到17年12月6日今日头条上阅读量和评论量前100的文章,具体数据如下...

2965
来自专栏数据小魔方

R语言可视化——ggplot携手plotly,让你的图表灵动起来!

这段时间一直在研究ggplot2这个神奇的可视化利器,可是ggplot2纵然所向披靡,唯独无法呈现动态效果! 最近发现R语言的官方CRAN中有一款名叫plotl...

3586
来自专栏Windows Community

UWP 手绘视频创作工具技术分享系列 - 手绘视频与视频的结合

本篇作为技术分享系列的第三篇,详细讲一下手绘视频中结合视频的处理方式。 随着近几年短视频和直播行业的兴起,视频成为了人们表达情绪和交流的一种重要方式,人们对于视...

3035
来自专栏极客猴

使用 Python 生成二维码

新时代,人们有人信新的追求,自然而然会有新发明的诞生。去年,在“一带一路”国际合作高峰论坛举行期间, 20 国青年投票选出中国的“新四大发明”:高铁、扫码支付、...

510
来自专栏PPV课数据科学社区

【可视化】Excel制作INFOGRAPHIC

最近在重新整理日报,周报,月报的数据展现形式,越发觉得一份数据如何展现对于我们数据分析师的受众而言是非常重要的,数据是一种艺术,其原因之一在于如何把数字通过我们...

2514

扫码关注云+社区