00:00
大家好,我是腾讯音视频高级产品经理郑光健。今天,我将。给大家介绍如何基于腾讯云十立方SDK来破局音视频终端困境,快速实现各种音视频应用的搭建。首先想为各位介绍一下什么是腾讯云视力方SDK,我们知道在开发音视频终端应用的时候,往往面临着各种各样的开发困境,首先比较典型的就是我需要去多次集成不同的SDK,例如我需要去集成直播SDK来实现客户端的直播推拉流功能,我还需要去集成短视频SDK来实现客户端的短视频编辑等等能力,那倘若在这个基础之上,我还需要去实现我的连麦通话等等功能,我还要去找一家厂商来实现我的音视频通话功能,而我作为一个个人开发者,我就会面临这样的困境,诶,我需要集成那么多的SDK,我该怎么办?而且除此之外,集成太多的SDK还会引入另外一个非常可怕的问题,就是我的接入工作量会相当的大,尤其是对于一个中小企业而言,我可能没有那么多的开发工作工,呃,开发这么开发资源,我导入这么多SDK,会让我不同的功能模块的API调用规则还要去一遍遍的熟悉,而且我在联调的时候也需要投入大量的人力去进行联调,同时每一个SDK可能都有每一个SDK的授权规则,那我还需要投入一个专门的人力去对SDK进行一个资源管理,它让我的管理变得非常的混乱。
01:26
因此,针对上面音视频开发经常遇到的困境,腾讯云音视频团队特地推出了智立方SDK来帮助开发者来解决上述的问题。那么腾讯云是立方SDK到底是什么呢?简单来说,腾讯云是立方SDK可以说是一个音视频SDK的产品合集,大家可以理解为它是一个产品家族,它集成了直播、推流、拉流、短视频制作、视频播放、实时音视频、即时通信等等等音视频我们常见的音视频核心能力,为客户提供一体化的SDK,并且在平台上我们还支持移动端、PC端、web端、小程序端等等多个终端的接触,客户可以轻易的基于当下火热的音视频场景来基于我们的SDK快速集成。
02:12
那对于我们来说,我们这边可以用三个一来体现一个SDK。常用的音视频通信能力全部集成于一个SDK当中,只用一个SDK便可以实现所有功能一次接入。我们统一了所有API的调用规则,降低了联调的工作量。对客户来说,只要集成一次就可以完成我们的开发。一个license。我们通过集成一个license模块来解决客户多个版本迭代license管理困难的问题。对客户来说,他只要使用一个license便可以完成所有SDK的授权。那么讲了这么多,我们腾讯云视立方到底都有哪些SDK呢?大家可以看到我屏幕的上面显示的我的一个势立方的家族,在这里我们可以提供多子版本的SDK,例如直播SDK。
03:01
音视频通话SDK、短视频SDK、播放器SDK,还有腾讯特效SDK,直播SDK可以提供基础的直播能力,而短视频SDK还提供比较经典的短视频剪辑的功能,客户可以让用短视频SDK快速上线自己类似于一款微视这样的应用。而播放器SDK提供腾讯视频同款内核的视频播放能力,让客户拥有非常优越的视频播放性能。而除此之外,我们还提供了音视频通话SDK和腾讯特效SDK。音视频通话SDK可以提供呃延迟非常低的音视频通话能力,而腾讯特效SDK可以提供足够优越的美颜滤镜特效、AR贴纸以及我们的虚拟人等等特效。那如果客户说我们需要各种各样的能力怎么办?那我们还提供了一个全功能版本的S,集成一个全功能版本的SDK就可以实现上述的所有功能。
04:00
那简单来说,用户可以基于关于基于自己的需求来选择全功能版本或者子产品版本,全功能版本功能全面,把所有的SDK功能全部集成到一个SDK里面,适用于业务较为就是复杂的产品,或者说我们的功能可以去拓展的一些客户,那子产品SDK就是特别适用于那些我对我的业务场景非常垂直,我只会去做一个非常。垂直场景内的功能,或者对包体大小非常在意的一些开发者。而这个情况下,腾讯云是立方SDK,就像多个功能模块SDK组合的搭建积木,大家可以看到,我可以自己选择我需要的功能能功能力来自由组合。比如视立方提供了下面几个基础的功能模块,像主播开播、主播连麦,然后视频录制以及直播观看、点播观看和音视频通话等等,客户可以自由勾选我需要的功能模块来组成上面的不同的子版本SDK。
05:00
那下面想为大家介绍一下我们腾讯云立方的主要使用场景,像在社交娱乐方面,我们就可以提供各种各样的电商直播、秀场直播、在线K歌与疗房等等,可以通过高并发、低成本的控制来实现非常优越的直播性能,可以为社交娱乐场景提供极致的享受体验。而在互动短视频方面,我们可以支持用户集成之后自由拍摄短视频,在美颜滤镜、动效挂件、特效插件、绿幕抠像等等,可以把自由的自己的创意加入短视频,也可以和他人分享我们的精彩的内容。而在在线教育方面,腾讯云视力方提供的各种能力也支持各样的录屏操作,录屏直播、PPT直播等等实时互动,消息的互动和实时录制、屏幕共享、课后回放等等都是我们常见的提供能力之一。而在视频播放方面,在今年的六月份开始,腾讯云视立方特地推出了腾讯视频同款播放器,全面支持点播、直播等各个场景的播放。它采用了腾讯视频同款播放内核,低至100毫秒的短视频起播时长,同时还支持腾讯视频真彩视听、精准seek、自适应码流缩略图、版权保护、自适应秒开等等功能,为多样化的视频播放场景进行赋能。
06:19
简单来说,腾讯云是立方是一款非常功能强大的价产品集合,大家可以看到在我们的屏幕上,这是我们列出的一个主要场景,但是除此之外我们还提供更加丰富的场景,大家有需要可以到我们的产品官网上去看,那这边也给大家简单介绍一下,从直播推拉流开始到最后的音视频互动,我们提供这么多的音视频常见功能,大家都可以去自由自由勾选来集成自己的APP。这边就不为大家去一具体的一一展开了。而腾讯云势力方还可以支持和腾讯云云端服务无缝结合。大家都知道腾讯云音视频在业界也具有非常强的卓越领先性能,同时我们在云端还通过RT网络来达成了三网合一,我们同时支持TRTC音视频通信网络、I'm即时通信网络和CDN流媒体分发网络。
07:13
通过接入RT,也就是我们腾讯音视频的基础通信网络,可以快速实现三大场景之间的互通。那么在终端方面,我们也推出了腾讯云视立方音视频终端SDK,通过云加端的结合方式,可以快速集成。大家可以看到,在三网合一方面,我们有着超过20年的技术积累和音视频音视频编解码技术,同时我们还融合了cdimm和TRTC网络,超过了90%的音视频客户使用了这套网络进行介入。而我们的视立方SDK提供快速接入的版本,可以让大家快速接入到咱们的r tone之中。而在其集成方面,大家可以看到我们还提供各种垂直场景的接入方式,提供超过十套的a passd代码方案,还有开放源码及调用示例,最快一天就可以完成接入。
08:06
那讲了这么多,怎么集成接入咱们的视立方SDK呢?我们这边概括起一句话,让客户基于场景选择SDK,并且我们提供多种多样的集成方式,首先您只要选择好您需要的怎样的场景就可以了,例如您需您需要选择您是直播服务类场景还是短视频服务类场景,还是音视频动画的美颜特效、视频播放等等,甚至您可以选择上面的多种多样的场景进行组合,那在选择好您的场景之后,我们会为您智能的推荐一款SDK。就如同画面上显显示的,那选择SDK之后,您可以通过买资源包或者独立购买的方式来解锁license,然后在选择您的集成方式,便可以上线您的音视频应用,只要简单的五步便可以集成。那在集成方面,我们还提供了含UI集成和不含UI集成的方案。含UI集成的意思就是您只要下载咱们的含UI集成组件,通过稍微改一改您的参数,参数就可以快速上线您的应用,而如果您需要灵活的定制您的应用,有很多功能是您需要去灵活呃自由化,自由化发挥的,那您可以选择不含UI的集成方案,也就是说我们提供了各种各样的样板间,我们也提供了毛坯房供您选择。
09:19
然后这边讲的各种的呃,计费方式,我待会儿会再具体的展开,呃,下面我来给大家举,就是详细的介绍各个具体的子产品,以及各个直播场景的一个介绍,呃,以及各个SDK场景的一个介绍。呃,首先是咱们的直播SDK,咱们的直播SDK是指终端推拉流播放的快速集成工具,它提供稳定的直播推流能力和超低延时的互动连麦,让客户非常容易的集成开发。它特别适用于那些高并发、大规模直播观看的场景,提供各种各样的端口,像我们常见的一些跨端的,跨平台的端,比如说Fla也支持。那常见的功能,像我们背景混音,互动消息也都可以支持啊,当然有些功能需要集成咱们的I'来器使用,那同时在咱们的直播连麦也是咱们的一个,呃,特别卓越的一个,就是特别强调的就特别高优的一个性能,我们支持RTC协议的超低延时在线连麦,可以让主播和观众之间的延时可以低至300毫秒以内,让观众在不需要切换呃换流地址的情况下,就可以在原来的CDN直播流中看到主播PK的效果。
10:31
同时咱们还支持直播录屏直播,像我们常见的一些游戏,游戏录屏,比如主播在打游戏的时候也可以支持,呃,主播在边打游戏边把自己的画面推上去,这是只要用两个摄像头就可以了,他特别适用于游戏直播,移动端APP演示等需要手机录屏的画面场景。而短视频SDK,简单概括就是我能够提供一个配套的工具,一个SDK,让您快速的打造一款属于您自己的微视。这边我们提供各种各样的短视频编辑玩法,像屏幕上看到的各种采集、导入、编辑、拼接、特效等等,都在CK里面可以快速提供。
11:09
并且配合我们的云点播使用,我们可以提供更加常用的短视频存储、转码、建环、分发等各个能力,与短视频SDK相结合使用,可以提供全链路的一站式集成方案,它特别适用于让客户端能够快速的实现自己上线一款呃微视。而具体的能力方面,我这边也简单做了一个罗列,就是在常用的采集拍摄和视频导入导出以及视频编辑方面都提供了非常丰富的能力,大家可以看到咱们的屏幕上有一个详细的能力清单。呃,这个就是我刚刚所介绍的,配合咱们的腾讯云点播服务使用,就能够提供从作品上传到存储,快速转码审核分发的一站式应用,可以能够让客户的短视频APP不但能够实现一个客户端和可以配合咱们的云端一块来使用。
12:05
这里就是咱们的使用的一个全链路,可以看到在采集完之后,配合咱们的点播后台就可以使用呃,完成一站式的分发服务。播放器SDK在今年的六月份完成了一次全新的升级,我们提供了腾讯视频同款的播放内核。可以,并且经过海量的就长期的优化和海量的服务验证对比系统,系统自带的播放器性能可以提升30%-50%等多个点,同时我们还提供了多个公多个场景的适配,比如说我们提供了像类似于呃,咱们的一个短视频,常见的短视频场景和咱们的长视频场景,和咱们的新闻的非得流等等场景,大家可以快速的接入。而具体的功能方面,大家可以看到,呃,在屏幕上面都有写。在常见的协议方面,我们还支持 r tmp UV hos dashmp4web r TC以及常以及像AV266等常见的音视频及编解码格式,适配更多海量的设备。
13:04
呃,除此之外的话,我们还提供各种各样的安全的保护,具体待会儿我会再展开讲一下。呃,在这一页上面,我简单罗列了我们常见的播放播放器的基础功能,像标的就是我们比较重点,可以大家可以重点关注一下的,比如说像常见的弹幕、进度条、标记,缩略图预览等等,都是我们经过精心打磨为大家提推出的。那在高级性能方面,我们可以主要概括成两个点,第一点就是更快、更稳、更精准。我们支持在更低能耗下实现低至100毫秒的起波时长,带来更加无感的切换体验。同时我们还支持 quick a oneh266等等,相比于264265的边角模解码,可以提供20%-55%的节带宽节省。同时我们还支持精准的seek,提供真级别的C,带来一个更加流畅的精准播放体验。那在更低嘛,跟高清方面,我们采用了腾讯视频同款真彩视听功能,让画面更加明亮,色彩更加丰富,同时还特别强调我们提供了终端极速高清功能,支持在播放器的端色实现低分辨率。
14:14
更低分辨率的视频增强为更高分辨率的视频的方案,在几乎不降低视频主画质的情况下,更加节省传输的带宽成本,就是我们讲的终端极速高清,也是播放器SDK天然自带的。在数据方面,我们提供了全链路的数据洞察,我们提供了像常见的点播、直播场景的数据,各种指标我们分别提供了像类似于数据统计、质量监控和可视化的分析,但大家可以对自己的业务更加熟悉,更加上手。大家可以看一下,我这边简单罗列了一下点播的常见指标和直播的场景指标。音视频通话SDK是我们推出的另外一款重大的SDK,它需要配合咱们的实时音视频后台来一起使用。大家可以看到,音视频通话SDK可以提供更高品质的实时互动音视频解决方案,它支持全平台覆盖,也支持多人的实时互动。
15:11
简单概括来说,它就是支持像咱们现在平时在看的一款直播,或者说平时咱们在看的一个腾讯会议,提供这样的一个能力。它拥有腾讯会议同款的3A引擎,在支持丢包率80%下,能够支持正常的音视频通话,也支持全球端到端延时,在呃300毫秒的低延时。同时我们提供各种各样的泛娱乐、教育、企业化等等场景化的组件,以及全平台的代码示例。并且在端测,我们支持像安卓、iOS以及像各种各样的跨平台,Flutter electron等等跨平台框架,并且我们全全球都支持互通,都支持实时通话,每天支持三将近30亿的上行通话时长,每月的客户量将近有5000多家,并且符合全球各类的合规标准,具体可以看一下我们的官网。
16:06
下面给大家介绍一下咱们的腾讯特效SDK。腾讯特效SDK可以概括为业内领业内领先领先的呃,智能图像处理开发工具包,我们提供各种各样的特效以及视频处理。比如说咱们的直播,在咱们的短视频下面,都可以提供各种各样的人脸AI算法,提供各种各样的智能识别。具体的场景有,我们提供各种各样的基础美颜画面调整,高级美颜滤镜,以及常见的2D贴纸,3D贴纸,包括咱们背后的实时分割等等,在画面上就可以看出来了。我们提供各种各样的一个常见的滤镜,常见的特效以及常见的整装和实时分割效果。并且我们还提供了各类的素材制作工具,客户如果有自己的素材制作需求,可以打开我们的特效制作特效制作工具,制作属于自己的一款特效。比如说我需要加一个带自己的logo的贴纸,也可以通过我们的特效来快速实现。
17:05
那概括起来,我们的产品优势具备行业领先的特效效果,提供行业领先的3D能力和海量的动态特效,也提供高性能的AI图像处理功能。呃,下面就是我给大家分享一款,分享一下我们的一个客户案例,在腾讯云是立方SDK发布这么久,我们也接入了各种各样的客户,然后今也获得了不许多客户的称赞,像我们常见的就是画面上看到的都是我们的一个常见客户。好,那既然给大家讲了这么多我们腾讯云视立方SDK的功能,大家肯定想了解一下,咱们是提供怎样的一个计费接入,我想给大家介绍一下,我们腾讯云是立方SDK有两部分费用组成,第一步就是我们的终端授权费用,终端授权费用可以认为是免费赠送给大家的。因为可以大家可以看到我们常见的像直播的授权,短视频授权和播放器的授权,通过买我们的直播流量包就可以赠送各位你大家想,假如咱们本来就有一个直播的需求,我本身就需要去买咱们的直直播流量包,只要买10TB上的直播流量包,就可以免费获赠一款直播license。
18:16
那在这种情况下看来,咱们就相当于是免费给大家送了一年的license,那另外一部分费用就是我的云产品服务费用,它可以配合咱们的SDK常用的常常见的功能使用,所产生的一个云服务费用,这边就不做具体展开了,那这边就是咱们的一个介绍,并且咱们的腾讯云设立方还提供长达28天的测试期,比如说我要提供要支,比如比如说我要直播SDK测试,我在控制台上就可以免费申请提供最长28天的测试,以及我们的短视频播放器和我们的美颜特效,也就是说我们的特腾讯特效都支持28天的体验。那在28天体验之后,只要买一个套餐包,便可以获得一年的使用权。那具体怎么去操作呢?大家可以看到这是咱们的一个下单页,当我们选择完场景之后,就可以选择咱们需要的SDK,点击确定咱们的SDK之后,我下面就会推出咱们的一个购买方式,那这这边就提供两种购买方式,大家可以看到,只要我选择购买一个套餐包,我就送您一款,送您送您一年的license使使用资格,那如果您不需要,我也可以独立购买,那当然我们也是推荐大家去通过我们的买资源包的方式来获得一年的。
19:26
使用。而腾想要了解更多腾讯云势立方的产品信息,大家可以打开腾讯云的官网,然后打点击上面的产品tab,在视频服务侧找到视频终端,这一列就是咱们的腾讯云视立方产品家族了,然后这边就是咱们这边,呃,我的我截的一个banner页,可以看到这边有这么多的子产品。那如果大家对于腾讯云势立方有更多的疑问,大家可以关注咱们的公众号,就是腾讯云音视频的公众号,只要输入腾讯云树立势立方,然后给我们留言,我们会有专人为您进行解答。腾讯云势立方的介绍今天就到此为止,感谢大家。
20:08
大家好,我是来自腾讯云的李振通,下面由我给大家分享一下腾讯云四立方播放器的技术实现与应用。那今天分享的主要内容分为三块,首先先介绍一下腾讯云数据放播放器的一个相关技术背景,然后是咱们业务侧经常应用的相关场景的一个技术实现与方案。那先去讲我们的第一部分。首先,先介绍一下腾讯云是一般播放器相关技术背景。腾讯云事一般播放器基于腾讯视频同款内核打造,完美融合腾讯视频的一个能力,视频的一个兼容性、适配能力以及播放稳定性大幅提升,解决了系统引擎各种播放异常问题。那具备如下几个特点,第一个特点是功能,功能层面覆盖长短视频点播、直播场景,打造业界领先的自适应技术,画质提升以及版权保护等解决方案。那我们倾力打造满足各项业务诉求的一个功能的一个SDK。第二点就是我们的性能稳定可靠,这里经过一级的一个用户的一个验证,对业务关注的起播速度做了深度优化,起波平均速度低至100毫秒。
21:22
我们也具备了卓越的视频容错的一个兼容适配能力,对大量的非常规编码的一个视频做了测试,这些测试这些视频在系统播放器的一个表现,一般表现为黑屏或者音化不同步等异常现象,在我们的四立方播放器上面都能够很稳定的播放,在平台支撑下支持下我们也支持了安卓。IOS web以及法等平台,那这里左边是我们的一个官网的一个在线文档,一个二维码里面具备有啊,里面有更加具体的介绍,大家可以扫码观观看。那在追求我们卓越内核的同时,我们非常也非常重视业务的一个接入成本,为了大力降低业务侧这里的开发难度以及工作量,我们对主流场景做了相关完整的呃,相关完整的一个完整组件以及解决方案的一个DEMO,这里全全开源,那本身也是一个比较完整的一个模块或者组件,拿来去用,支持自定义修改,那今天会重点介绍这里面包含的一个经典场景的一个超级播放器UI组件,以及我们经常遇到的业务测,经常遇到的短视频场景的沉浸式播放或者非得播放。
22:39
那下面介绍一下精简场景的一个应用方案。那这是一个我们业务侧经常运见的一个经典场景,先是一个小窗播放,然后我们支持与全屏播放的一个切换,那手指在右边竖着滑动可以控制亮度,左滑左边滑动可以控制音量,那支持滑动控制进度等等的一个操作。那我们的抽集。
23:03
播放器UI组件封装的这一类一类的一个基础操作功能,也支持了一个进阶功能的一个分装,比如说弹幕在播放同时,在视频上方有一堆的弹幕飘过,这是一个比较常见的一个,呃。一个现象,对,然后我们也支持了动态水印,可以把用户的ID放在在视频上方进行滚动,达到一个比较好的一个安全性的一个呃,一个效果,然后也支持了。呃,视频会员试看,非会员观看多少秒以后,就可以弹出一个会员的一个提示,购买窗等等,然后也支持一个具体播放。那怎么接入使用呢?这里非常的一个简单快速,仅用一个很少量的一个代码就可以接入使用,首先先集成我们的腾讯呃超级播放器UI组件,然后在UI上面加入我们的play view。分装我们的super play model,把我们要播放的URL、封面地址等填入,再调用我们的super playvi的play model进行就可以进行启动播放。那对于进阶场景,比如说前面所说的弹幕,以及说是会员视看动态水印等等,我们也仅仅只需要在super play model里面去配置相关的一个信息,比如说观看多少分钟动态文本的水印以及大小等等。
24:25
就可以很简单的达到我们的一个目的。接下来是我们一些主流场景的一个短期运营方案的一个应用实现。方案的一个介绍。这也是我们常见的两种场景,一个是沉浸性,沉浸式播放场景,比如类似我们微视抖音这种一次只看到一个视频,上下上下滑动去切换另外一个视频,另外一个就是非得流场景,一个页面可以同时出现几个视频,第一个完整的出现的视频自动播放,这些场景的界面分布,所以说我们业务侧非常重视这里的一个内存性能,一个占用,那为了更加顺滑的一个体验,我们也非常追追求极致的一个起搏速度。
25:08
这是一个快速消耗内容的一个场景,可能一个视频,呃,用户连看都不看就直接划过,那为了降低这里业务带宽的一个流量的一个成本消耗,那也需要对这些场景做一些流控策略,那这里我们常规的一个时间思路就是利用一个列表组件去复应用,在播放第一个视频的时候,对下一个视频进行预播放,已达到滑动,下一个视频就可立立马放,如果这个界面可以看到很多视频,那么我们就可能会起多个。播放器进行播放,那么就会发现这里的内存消耗非常大,而且反复销毁创建播放器也会带来比较多的一个内存芯片。那我们怎么进行优化呢?我们优化思路就是。建议不超过两个播放器实例,并通过服务去管理,呃,播放器的复用于使用如图所示,在上层的一个应用逻辑层,也就是说UI和业务这一层,这一层业务侧可以根据自己的业务特性进行设计,那这里可以采用MVC或者MVVM的一个设计模式。我们这里。
26:15
主要关注的是在如何使用我们两个播放器实例进行一个复用,那我们可以在在我们的应用逻辑层下面创建一个服务层。然后创建一个类似线程词的一个管理,我们可以把它命名为play player po manager,那这里我们提供两个接口,第一个接口是update to player主要是运营播放器对复用的管理。那这里的算法怎么去做呢?可以看到我们右右边的这个表格图,假设我们停留在第一个视频,那底下的序列号是二和三的一个视频,这时候我们可以再把一和二的一个ul放进我们的poor player去创建我们的一个,呃。创建我们的播放器那并且设置auto play为force进行预播放。因为我们。
27:05
知道当前要播放的是啊第一个,所以说业务侧就可以通过get player player的一个接口,以ul作为key的一个方式去取得要播放的配,然后调用雷计器播放,当我们往下滑到二的时候,然后这时候我们的就需要从我们的播放器池子需要从原先的一和二的一个play的一个变成。呃,URL的一个播放器变成二和三的一个ul播放器,由于二还在,所以说仅仅需要把原先一的L复原给第二,第三个视频去预播放,然后去第二个视频,一个player去player,那这里我们对着播放器做了一层封装,命名为T。Data player weapon,那之所以有这一层分章,主要是便于业务侧这里的一个统一控制,比如player con,以及一些业务特性的一个行为等等,那如果我们这时候快速滑到了四,这时候二和三的一个池子就会变成四和五,那赋予了原先给二和三的一个播放器对象,这时候我们会带来什么问题呢?会发现我们原先呃塞入的呃二和三呃,Stop,加之话我们四和五是重新加入的,这里都没有经过个预播放,那这里的起播速度肯定会受到比较大的影响,那接下来我们会看一下我们起播速度如何进一步的一个优化。
28:31
那这是一个简化的一个起播过程,一个流程,从业务的一个获取数据,呃数据开始往,然后作为作为做了我们的个UI展示,接着对应我们的一个一个分面展示,然后我们就开始进行一个UIL以及发小背机一及以及一个播放器一些这个配置,然后就传递到我们播放器环节的播放,那播放器环节就经过了向服务器请求读取视频文件,把读下的文件进行一个解封装解码,然后到达一定的buffer以后,就启动一个播放回调,一个守帧一事件,业务侧收到首帧事件回调以后就进行一个隐藏分辨,那对整个过程进行一个优化,我们把重点进。
29:16
就换到引起呃后时操作的地方,那这里假设业务的一个其他过程都非常理想的一个情况下,我们知道后时操作主要是要关注一个IO的操作,那这里我们会看到第一个引起耗时操作的一个地方,就如图片上面所示的那个第一个位置,那这这时候业务去获取数据,这是一个网络的一个IO相关的一个操作,那这里就需要进行一个提前获取数据,获得一个。做好缓存的一个相关的一个,呃,管理,那第二个地方就是获取视频链这里。那这里有一点关注,如果是用fire ID去播放,因为fire ID仅仅是一个ID样式,它没它不是ul,所以说fire ID传入播放器会有一个换链的一个过程,这是一个呃,比较厚实的一个网络的一个请求,一个过程,那所以说我们就需要提前换好链,那如果这里配置防盗链,这里外还有一定的一个有效期,那还要做好链接有效期的管理,如果是多码率视频,就不能等到播放器启动的时候再做推流,这个时候如果采用非平滑切换的一个方式,就会引起比较大的一个消耗,所以我们可以事先配置好要指定播放的一个码流。
30:31
那播放器缓存的一个消耗主要是两个地方,第一个地方就是网络。这一个第二另外一个地方就是一个解封这样一个解码的一个操作,那对于网络我们需要重点关注我们视频的一个部署情况,如果是刚上传的一个视频,那西增节点是否预热,是否呃已经ready,可以供业务侧这边,网络侧这边去。去很好的一个访问,那对端测来说,主要是可以通过我们的预下载,或者前面所说的预播放的一个方式,把我们要播放的一个视频先预先下载一部分下来,然后到时候直接调用雷中去就可以进行播放,那对解封装解码一个消耗,我们也可以通过我们预播放机制去。
31:16
解决这种一个提前消耗。那前面所说的预下载和预播放这两者有什么区别呢?那预播放机制就是创建一个播放器,并且启动下载和解码环节,扫帧解析出来之后暂停播放器,使用步骤就是在stop play之前设置auto playfor,那播放的时候调用一下接口就就好。那播放器的一个。啊,预下载的机制就是不需要创建我们播放器实例,预先下载视频的部分内容,不需要启动解码和解封装环节,使用方法就是调用我们的那个t word playlo manager的预下载接口,启动播放的时候跟正常启动播放器一致,那我们来具体对比一下两种放式的一个核心区别,那前面介绍我们预播放是需要启动我们的播放器实例,以及我们的解码器的一个相关操作,那这里必然带来一定的一个性能性能消耗,所以会占用以及一个内存和CPU的一个消耗,但是而我们的预下载不需要启动播放器,不需要解码环节,性能消耗第一。
32:27
这是它比预播放的一个比较好的一个一一个点,但是它的起播速度会比预播放慢个100毫秒左右,因此我们可以根据业务特性采用其中一种或者两种一个都采用的一个结合方式。那我们针对M3U8的一个多码流视频也做了一个针对性的优化,我们多码率M3U8在播放器未播放之前,我们完全不知道这里面的一个是有几个码流,就如图片所示,这是这里面有四条码流,这是需要一个网络访问才能知道的,所以我们做了播放和预下载,也指指定好偏好的一个视频分辨率的功能,也就是说在我们起播前指定优先播放的视频分辨率,那播放器会查找小于或等于。
33:17
该偏好分辨率的一个流进行一个起波,起波后就没有必要再通过set bit rate index去切换到需要的一个指定的码流。那这里做了内存和起播速度优化之后,再回我回到我们之前所讲的流控,如何进一步精细化,降低流量成本,我们提供了三个阶段的流控。流控功能,第一个就是预播放的一个流控,在我们起播前可以设置最大的缓存大小,这时候我们就可以啊,指定它预下载,只下载到多少大小就可以停止,第二个就是预下载阶段啊,预下载阶段流控跟预播放是类似,也可以控制我们的一个下载页大小那。
34:03
这里在相关接口都有呃参数进行一个提供设置,第三个就是播放阶段的一个最大缓存的一个大小,那默认是30秒,那业务可以根据自己一个特性去设置,呃,必要的一个缓存大小的一个缓冲。那结合。前面所讲的一部分,我们可以汇总一下总体的一个实现框架,就是如果采用我们预下载和预播放的一个结算方式,也仅仅在我们的服务层去加一个预下载管理模块就可。好,感谢大家一个聆听,谢谢大家。大家好,我是来自腾讯云音视频产品中心的张伟楠,目前在负责短视频和特效引擎SDK相关的研发工作。本次给大家分享的主题是腾讯特效引擎在终端的应用和实践。那本次的内容主要主要包含以下三点,先介绍一下腾讯特效引擎的架构方案设计和特效的一个处理流程,接着给大家分享在实际跨平台开发中所遇到的一些问题,最后结合特效引擎呃SDK在集成过程中进行一些问题案例的一些讲讲讲解。
35:21
那首先来看一下腾讯特效引擎的一个整体架构,考虑到我们SDK有支持多平台的一个需求,在设计的过程中,我们既要保持各个端的能力的统一,又要支持很好的平台可扩展性,未来能支持更多的平台接入,我们设计了一套跨平台的终端架构,我们可以看到整个架构分为三个层,包含平台API层、适配层以及跨平台层。API层主要就是提供跟平台相关的API接口,包含初始化包呃设置特效以及特效处理的简洁简洁应用的API。目前特效引擎提供了非常全面的平台能力,包含安卓、iOS Unity的。
36:03
适配层主要是适配平台层和原生层之间的中间层,承接各个平台的差异和提供上层以及底层通信的一个能力。另外另外一些业务模块,例如建成管理、特色管理以及跟平台相关的云音视频适配也是在呃这一层实现的。最底层是跨平台层,主要是用C加加来实现,提供灵活的特效玩法,例如挂件、背景分割、特效滤镜等AI能力,例如人脸关键点位的一个检测,手势识别、分割检测。呃,在下面是一个模板的基础框架解析,呃,腾讯tens studio制作工具生成的各种各样的动态模板,然后调用各个组件系统进行特效处理,最后交给渲染模块。渲染模块包含2D3D渲染引擎,底层使用了open gl等渲染API接口。
37:00
那接着我们来看一下特效的一个处理流程。特效是承接推流、实时音视频、短视频制作等预处理的一个中间过程,在抓取到摄像头或者是视频解真之后,给到特效引擎进行特效处理,输出处理后的一个图像数据,再返回给上传SDK进行推流或者是渲染保存。整个处理流程的关键点是实现对输入的一个原始数据进呃进行处理,然后输出带特效的一个图像数据。那在了解完特效处理的一个架构方案和处理流程之后,我们要实现跨平台方案,需要对数据进行呃传递和通信,那如何实现平台层和原生层之间的一个复杂?数据通信和高效的一个图像数据的一个传输,这是我们在研发过程中需要解决的问题。接下来分别对这两个问题进行一个详细的探讨。
38:00
呃,我们知道Fla或者Unity,它的平台成了一个开发语言,是大和算那和原生成之间的消息通讯只能传递基础的一个数据类型,而我们实际的开发过程中需要传递比较复杂的一个数据结构。呃,例如设置特效属性的一个接口的话,它里面的包含的数结构体是非常复杂的。然后那我们是如何实现三层和原生层之间的一个数据交互呢?呃,我们的做法是设计一套,呃。类结构体到追损的序列化的一个一个模块,然后通过消息通道传输数据到原生成,然后原生成进行对这个自层数据进行一个反序列化,然后转化成对应的结构体,实现了跨平台之间的负载的一个数据通信。那我们前面说到。特效的关键处理流程是对输入的图像数据进行处理后返回输出的图像数据,那我们的特效SDK底层是用open gl来实现的,对应的图像数据就是纹理,那我们要实现版本的话,需要从呃其他的Fla插件,例如TRTC或者是呃呃。
39:17
直播直播SDK传递纹理到特效,特效的Fla插件,然后特效的flash插件再把这个纹理呃传到原生成的。特效SDK里面进行一个特效处理,但是我们在实现过程中,我们发现纹理的传递到原生成的时候,原本回调是在open gl生成的,但是传递到特效SDK原生成之后。现场已经发生了变化。那经过分析,我们发现这是因为。避免阻塞UI界面和原生成的消息发送。以及响应都是在使,都是使用的异步的方法,而我们的特效处理是需要在open gl线程,那我们如何才能实现纹理在Fla和原生层之间不放线程进行传输呢?
40:10
那我们那我们进行一个思考,既然就是传输通道,没有办法,是不是可以换一个思路,绕过这个通道进行一个传输,直接在原生成进行一个打通,这样的话就能实现纹理保存在原来的open最好线程。好,那我们首先想到的就是通过反射代理的方式进行,一个方法,一个绑定回调的纹理,直接传到特效SDK进行处理。那看上去整个问题已经解决了,但是我们呃测试的过程中发现整个性能并没有那么好,就是出现会出现丢帧的情况,呃,我们知道就反射的话就是需要显类名和方法,那如果SDK的接口有变化的话,也会出现兼容的问题。那我们怎么样解决去解决这样的两个问题呢?
41:00
呃,为了解决这个这个问题,我们实现了一个特效的一个处理的一个适适配器,分别为纹理的生产者和消费者定制一组协议,然后定义好纹理的一个支持格式和回调的接口,在原生成进行一个注册绑定,这样既能解决反射的兼容性,也能解决解决反射带来的一个性能问题。目前的话,这个适配是已经呃上传到po还有Mar,然后面呃其他的SDK的接入的话,也可以按照这个协议来进行打通文理的一个传输。呃,我们在实现了Fla的版本之后,然后在处理Unity的平台的时候,也遇到了纹理的问题,那纹理从Unity传给iOS特效SDK之后,呃整个看上去是是一个黑屏的,虽然不出东西,然后我们通过查资料,我们发现的话,就是说在Unity呃2019年版本之后,它的纹理的话是固定是呃mental的纹理那。
42:02
并没有提供呃open g管理的方式,但是我们的SDK需要的是open g,呃,我们想到有两种解决,两种方案来解决这个问题,一种是将Unity的版本进行一个降级,但是长期这不是一个办法,然后呃另外一种方案的话,就是进行一个纹理的一个呃转换,把metal的纹理转成open gl的纹理。呃,那我们按照metal的一个渲染步骤的话,就是说首先创建metal纹理,Metal纹理的话是绑定。Metal tattoo。把limit title的话是用呃,Peel buffer来创建的,那我们直接可以拿pel buffer渲染到open gl的纹理上,然后再将open g的纹理传给特效。进行处理,处理完之后的纹理再通过相反的流程转回metal纹理。给到Unity进行一个渲染,那我们可以看到整个流程的话是非常的繁琐,用于呃,经过metal转文,转open gl再转metal,那整个渲染的一个链条非常的长,那有没有更好的更高效的一个方案呢?
43:11
那我们只是只是研究发现metal纹理是绑定metal ta的,Metal ta的话是通过p buffer创建的,P buffer是存储在共程共享寄存器的一个数据,那open gl的纹理也是绑定了p buffer,他们共用了一个相同的一个数据结构,那我们是不是有有没有什么办法可以创建一个他们共同使用的一个piece buffer,然后呃在两个呃平台上面进行使用,这样的话就是unit的纹理渲染远到metal纹理上,也就是渲染到了open gl的纹理上,他们共用了一块内存,这种方法是最高效的。OK,我们最终呃。通过创建的一个。设置,设置好它的属性,然后呃,把它设置为open g,跟metal进行一个兼容,然后实现了metal转open g的高效的一个方法。
44:08
那接下来我们看看特效引擎的一个集集成方案,我们提供了集成腾讯特效引擎,腾讯特效引擎呃,云视频直播,然后短视频SDK的一个DEMO的一个指引,可以通过咱们的SK里面的工具包快速实现特效的一个接入,下面使用特效sdku g SV来进行一个讲解。那整个集成的流程主要分为以下几个步骤,首先是设置授权和初始化USV以及特效SDK,然后对USV设置视频一个回调,然后呃。在设置特效的一个一个方法,然后在视频回调处理里面调用特效SDK进行一个特效的处理。处理完之后返回对应的一个纹理,然后UGSV再对纹理进行一个渲染,这时候我们就可以看到带有特效的视频画面。
45:08
那在退出录制的时候,对特效SDK进行一个销毁,整一个的话就是。呃,腾讯特效引擎的一个使用流程。好,最后给大家分享一下特效SDK在执行过程中遇到了一些问题。那第一点的话就是在使用S特效SDK的时候,然后我们可能会遇到一些黑屏和白屏的现象,这时候的话我们是可以通过。我们的一个接口吧,整个纹理给单下来,然后保存成了地面,因为纹理在ID里面是是调试不到的,就是我们看不到纹理的一个,呃,图片内容,照片内容的话,我们就很难去呃定位这样的一个问题,到底是在特效处理前还是特效处理后出现的问题。那如果我们看到是特效处理前的纹理就不对了,那我们的话就是可以定定位到,就是说在外面传入给特效引擎的时候,这个纹理本来就是有问题的,这时候就可以看外面的SDK是不是哪里设置有问题,然后如果是处理后纹理不对,那我们可以检查一下特效引擎的一个接口的调用时序是不是有问题。
46:21
那第二点的话是退出释放特效引擎的时候,呃,偶尔会出现crash的一个情况,嗯,我这时候我们可以检查一下特效SDK的一个释放接口,需要在对open线程里面进行释放,那这里面的原因就是呃。咱们引擎释放的时候是需要对open需要一个环境进行一个销毁,所以在呃。所以需要把on strike放在open she线程里面去进行调用,那第三个问题的话就是呃,有时候会遇到屏幕旋转之后,整个视视频大小已经变化了,然后特效并没有生效,那遇到这种情况的时候就是可以检查一下,呃。
47:06
视频变化的时候有没有设置Le size,因为整个底层是依赖这个大小进行一个AI的一个识别,那最后一个问题的话,就是我们有提供动态加载的一个方案,那有些呃,客户就是在接入的时候会遇到一个so的一个,那我们是可以通过检查K的一个使用步骤,再下载完so以后,先设置so的一个路径接口,然后在调用健全成功之后的话,再开始去初始化特效引擎的一个API,然后避免。提前调用接口,找不到so的一个情况。那以上就是我本次的分享,谢谢大家。呃,Hello,大家好,我是来自腾讯云的link台啊,目前是在腾讯云音视频平台中心从事APP前端相关的研发工作,然后今天分享的主题就是为我美颜特效的最佳实践。
48:12
然后我今天主要讲嗯四块内容,第一块就是啊为每年推销的一个简介,第二是技术实现方案,第三是结合我们直播场景进行一个最佳实践,意思就是呃,讲一下常见问题的一些分析解决思路。我们先讲第一。这里嗯,大概介绍一下,我们腾讯云目前推出了一个论美颜特效的一个PK,然后啊,可以看到左边这个截图,就我们提供的包括美颜滤镜,美妆贴纸以及呃,人像分割等一些能力,这些都是在浏览器端能够直接看到的。然后同学们还支持移动web和小程序。然后我们还有一个管理控制台,可以供用户做一些自定义的素材的,这些可以在那个讯文档页可以看具体的那个内容。
49:04
然后左下角会有两个二维码,分别是移动以及小程序二维码,然后有感兴趣的同学也可以扫描这个二维码去体验。然后来讲一下呃,我们这个任美颜特效的一个主体架构,然后左侧就是呃主体应用,主体应用的话包括一大块,分别就是刚才提到的PC的移动量的一些小程序,然后重点是呃中间的这部分就是JSSDK的部分,我们会提供一些。包括权限校验以及美颜特效的能力,以及素材渲染等等功能,然后还有控制台,控制台就是主要是对项目授权进行管理。然后我们还提供素材的制作以及素材的。一些管理的一些能力。这是我们一个大体的一个架构。然后我们提供的JSSDK呢,其实已经发布到NPM上,然后嗯。对前端比较熟悉的同学是可以直接安装起来看一下,体验一下。
50:05
他。功能比较丰富。基本上前面提到的能力,在我们这个NPM包页面也都会有介绍,然后接入也是很方便的。然后同学们还支持那个小程序。然后在性能方面我们也做了很多优化,比如说使用的web,使用的那个WEB3米进行一个内部计算的优化,然后能够保证我们的这个主应用能够。比较顺畅的。运行不会影响到这个整个应用的一个展示。然后控制台这一块的话,我这里贴了一张图,就是我们呃,一个素材制作的工具。制作工具,我们可以根据用户的情况,比如说我想做一些人脸相关的一些贴纸或者一些挂件。都可以在我们这个的控制台上能够实现啊,这里啊,具体的制作过程就不在这里展开,大家有兴趣的话可以。到我们那个官网那个文档去仔细查看一下,那个最重要的一个过程。
51:06
嗯,然后们下面我们讲第二部分就是呃,提示实现方案。嗯,我先来看一下这个,嗯,SDK的一个实现了一个大体的一个流程,然后左边是输入,右边输出,输入的话,我们一般会支持图片啊,支持视频以及那个媒体流。嗯嗯,几种形式的输入。然后这里其实也是算做一个,嗯,数据采集的一个部分,比如说我要采集。呃,摄像头的一个画面。那其实这也是。一个相当于一个媒体流的一个类型。然后中间这部分就是,呃,SDK内部集成的就是模型检测部分,模型检测的话,其实主要就是根据我们输入的画面,我们要检测出比如说人脸相关的一些点位以及坐标。然后就是啊,纹理渲染,文体渲染,主要是我们要会通过外部主要来进行一些渲染的工作,就比如说我们要呃,叠加一些啊,美妆叠加一些呃。
52:05
最后我们会经过这个美颜特效处理过的一个数据进行输出。然后大部分情况下。SDK的输出是一个媒体类型类型。我们先看一下采集部分,采集的话一般分两种,左侧就是。前端比较经典的获取一个摄像头的一个方式。供。然后同时还提供了一个置相机方式。过。SDK的一个配置来实现,就我们在那个。初始camera。的话,其实也是内部调用的。
53:01
这个media方法。然后它对比左边的优势就在于,如果你使用了我们内置相机的这种配置方式的话,它会。当。嗯,然后采集过程的话,这里有还贴了一张这个图,就是谷歌浏览器提供的一个自带的一个的一个工具,这个工具的话。采集以及传输的这个数据的一个详情。嗯,这里我只贴了其中的一个图,实际上的话,它会有五到六个图分别。呃,代表了不同流的一个具体的一个数据情况,因为我们知道在媒体流它可能。还分为很多种,比如说会有音频流,视频流,以及呃输送到远端的一些流。那在正常本地调试的过程中,可能是没没有发送到源端,但是我们会有一个本地的音频及视频的,那我们通过查看这个。
54:05
RC这个这个工具里可以看到。呃,采集到这个数据的详情。这个是可以方便去定位。有时候我们可能采集到数据有问题,或者说是出现一些卡顿的情况,通过这个视图能够看到这个数据究竟是哪里出现了一些问题。一般来说,我们在浏览器端采集的这个数据流的这个帧率。啊,如果我们要发送到远端,比如说我们要要通过一些直播相关的一些推流工具要发送到远端的话。呃,正常情况下分它默认会这个帧率。嗯,然后顺便提一下,就是到网络或者浏览器的一个限制这个帧的。嗯,基本上在我们实际的测试过程中,最高也就是30,再高的话也不会。会超过,基本上量已经做了限制。
55:03
嗯,所以正常来说,呃,对这个的这个帧率要求不高的情况下,其实物帧基本上是够用。然后在一些高清的场景下,可能是需要到30。检测的部分,其实本质上来说就是我们要对输入的图片进行一个分析,然后我们要从中提取原点、关键点的坐标。然后人键点这个标的话,可能在也是很多不同的一个标准,然可能每一个那个厂商的定义标准不太一样,可能有有有60多个点位的,有有些有100多个点位,有些还有一些更多点位啊,正常来说的话,检测人脸关键点。这个数量越多越密集。做一些美颜美妆特效的效果就会越逼真,那同时它也会带来一些负面效果,就是我们奥费的预算时间也会越多。
56:02
那也有可能因为检测这个点太多了,造成一个卡顿的一个现象,所以这里也是要。进行全程的一个。就是在原来阶段要实现这个能力的话,也要进行一些调衡,就不能说检测这个点非常密集,可能导致我们这个。计算量非常大,那可能就得不偿失。然后就还有一个。细节方面的处理就是在检测这一块,那我们看。大部分的。目前。就是。业界流行的一些人脸检测的模型,它对于眼睛的一些处理,一般来说,它提供的关键点位只精确到眼睛的一个外轮廓。那当是在我们实际的一个应用场景中的话,我们其实是需要。定位到瞳孔部分的位置,就比如说我们有一些美妆,我们要把那个眼睛的瞳孔,比如说我们要换一些颜色。那如果这个坐标定位不准的话,可能就会出现这个效果不是很好的一些现象。
57:05
那我们这个啊,热美颜特效这块,我们也是对呃,瞳孔啊,包括嘴唇等位置,我们进行了多种场景下的一个兼容计算,然后我们已经把这个效果。优化到一个。嗯,比较能够接受的一个。然后看起来效果还不错,然后。具体的话可以翻面。提供的一个DEMO二维码,我们提供的DEMO是可以直接问,可以直接看到。具体比如说美瞳啊,以及唇彩的一些效果可以体验到。然后在人脸检测计算这一块的话啊,我这里贴了一个图。其实我们是可以通过谷歌浏览器提供的工具。能够分析出前端的一个。应用的一个性能消耗。因为很多时候我们在。做一些相关的。
58:01
语言的一些,嗯,处理的时候可能。或多或少可能会遇到一些。顿,或者说感觉不是很流畅的一些情况,但是很多时候是一种主观的感受。那么我们要更精确的定位问题的话。还是要利用到这个工具。这个。我可以大概讲一下,嗯,这里从上到下可能分为几个部分,我们重点来看,呃,前面前面几行。在生产色背景这一行,就是魅这行,就是我们的一个主线层,然后呃,这里可以看到,呃,我们主线层这里其实基本上没有。没有太多的一个消耗,它里面那个黄色方块的那个。占用度。其实代线。啊,没有太多这个影响流程的一些函数,然后再看下面一行,就是main下面的一个worker。
59:02
那这一行的话,我们可以看到有一些。相对来说比较长的一些方块,这里是其实代表个清单计算的一个过程。那黄色方块这里如果越长,那其实就说明这里的预测量越大,那如果啊,这里如果非常长的话,有可能就会导致一些可能看起来不流畅的一些现象。那我们看这个图里,这个图其实基本上每一个黄色方块,它的一个。宽毫秒。还是一个比较快的一个。最两其实能够保证我们整个这个运是可以。维持在一个60帧的一个帧率基本上没问题。右在这个截图。
60:00
那用到GPU这里的话,其实。CP。然后现实情况中,嗯,因为可能还是有一些浏览器没有支持一个加速的力。对SDK也会进行一些优雅降机,就比如说呃,移动端确实它有一些浏览器,它支持GPU加速。那没办法,还是要用CPU。啊,但是呢,呃,我们也会在移动端做一些。顿。
61:17
然后这里。主要的区别还是在于我们要结合前面就是我们的模型运算,这里我们要通过模型运算得到一些坐标点位的结果,来去动态的去调整的一些属性参数,然后来达到。我们整个SDK。形逼。染。常规的一个流,我们。结合前面提到包括点位的一个额外的处理。让这个效果来。
62:02
啊,这里就不再继续展开。啊,这里先打一个小广告。呃,直播场景下的话,腾讯云提供了一个。当一个。然后用起来也是很方便的。然后具体直播相关的文档的话可以。然后直播也是提供了一个在线的一个。一个测试直接按。有兴。
63:05
嗯,然后我们看一下结合直播的话,我们大概的一个流程是主要是分这几块,一个是初始。就是据采集特效,特效加。然后会有一个本地预览的过程。一般我们先要。大概流程是这样。看部分化S。嗯,可以大概看一下。其实就是。效。
64:03
然后这个生周期应该起清。我们进再往下走开看一下,在接入这里,接入的话就是初始化这里。我们提供两种初始化的方式,一种就是输入自定义。自定义的,就是说输入这个。类型的一个输入,那这个从哪里来,就需要我们业务自己过去,就比如说。我们通过那个浏览器的这个接口去获取。这是需要业务自己自己去实现,然后我们还提供了一个内置相机的方式。就是我们在。几个对象,直接一个camera对象。然后区别在于我们如果使用内置相机这种化方式的时候,就不需再传个input参数。然后。
65:01
这里。做了很多。有。资源。每一个大概有。HTTP协议这里我们其实已经到了3.0版本的一个协议。那这个3.0版本相比我们比较老的1.0版本是在速度上会有很多提。然后还有这里我们可以看到状是载方式。
66:10
是。比较慢,那么我们K化载方。说实话,大概的意思就是说我们。行一个资源的载,然后我们在合适的时机。再去后面的一个获入以及提供输出的这么一个过程。下面来看一下,呃,刚才提到的两种。方案的一个左边。基本照骤,步步。然后我们看一下右边,右边就是刚才提到的一个。
67:00
预初始化的一个过程,初始化的话。简单理解,可以说是一个两步走的过程。可以看到右侧上半部分的话,其实我们是进行一个健全以及资源的加载,那么这里完成之后。相初始化流程。能看到右侧下方会有一个等待输入,就是说。我们这个过程是可以在。真正需要执行美颜特效之前做。嗯,就比如说我的这个页面,它可能并不是说我一进入页面就要马上去去打开摄像头去去进行一个美颜,那我可能是在某个时机,就比如说。用户点了某些按钮之后,我再去执行一些啊。的处理初。那么这个时间是可以利用上,然后再在用户,比如说我决定开启美颜的时候,我们再执行下半部分的一些方法,这里看到下部分有一个个入,整个用来。
68:20
运行的更加的流畅。因为其实我们是把一些耗时的工作放到放到比较前面的地方去执行,在用的角度看来的话,可能。达到一种效果,就是说比如说我一点这个美颜,可能就马上看到这个输出。当然,在用户侧的角度看来,这个体验是比较好的。然后采集这里采集这里就不赘述了,就是还是。刚才提到两种方案,一个自定义流,一个是内置相机的方式。嗯,然后采集这话们采集之后是。就是中文翻译里稍微再提一下。
69:03
一般来说使用自定义流这种方式的话,需要右侧对这个媒体流需要一定理解。若。特效。是行语特效轨处理入轨。这个是需要业务理解的一个地方。然后我们在调试的过程中,也可以这里贴图图。比如获取到的一些输入,以输入流里面的一些轨道。
70:00
打印出来。看一下它具体的一些状态,因为我们呃,在使用SK的过程中,也是有一些用户反馈啊,就可能他遇到一些较的问题,比如说渲染异或是把之能摄像发现是亮。很多时候是这个。包括我们这流至少两个,一个输入流以及输出流,那有时候你还要切换设备对吧,切换设备之其实是相当于又产生了一个新的,同时也会产生输出,可能就是。四个六。那如果。我们对这个流。没有行轨。接下是一个摄像头操作,摄像头的操作的话,这里就简单了,一就是们置相机式的话提。
71:06
参上面提供这个例子调试。定的方式的话,就需要用户自己管理。可能就相对麻烦一点。然后应用颜特效,应用颜特效的话其实就非常简单,其实调用SDK的一个方法就行,这里就不赘述,唯一需要注意的话就是我们需要在SDK的一。然后同时我们SDK还提供了一个内置的播放器,可以比较方便的。一个本地效果的一个预览能力,内置播放器会根据我们那个。后就推流端,其实是用快播能具体可直播推流档地。
72:00
啊,这里不再赘述。然后最后我们会有一个完整的一个。最佳时间的代码,大家可以在呃。个去。好,最后一部分就是常见问题分析。这里我大概讲一下可能遇到几个问题,比如第一个初始化失败。啊,第一次用的时候可能会遇到,那一般来说呃,大部分情况就是域名端口不匹配,然后大家就啊,如果遇到这个问题,可以先检查一下控制台配的一个域名端口,己实际调的一个端口是一般。还有一种情况是哪个算错了?那这种的话就可以。具体的置档里名致。是性能问题啊。为些客户反。
73:02
那么原因分析的话,可能就是。确实有两种情况。一种就是确实你的。CPU映射量非常大,也有可能是你这环境没有支持GPU加速,有可能就是你确实叠加了很多这种美颜特效的,这个效果上去可能的比较多。那这里的建议就是说,第一个就是说。需要免定。掉特效如。是不是可以不需要再去做一些?种美或者种贴纸加。
74:01
然后就是摄像头相关的,摄像头相关的问题的话。那这里其实本质上来说是我们视频没有停止,需要去检测。就用我前面提过的那个,比如说把这个流程的轨道打印出来,看一下到底是不是所有的轨道都关闭。基本上你能确保每个轨道的关闭之后,那这个设备灯自然就会灭掉了。然后呃,下面是也是常见的一个问题,就是呃,在移动端环境下切摄像头,可能有时候遇到黑屏的情况。呃,这里的原因在于移动端很多机型它没法没办法同时呃去呃在一个摄像头上获取两个输入有,那我们的解决思路就是我们要一定要把先把旧的那个摄像头流停掉,然后我们再去获取新的流,然后我们再来更新呃SDK。就是通过一个呃,SDK使用的方法去更新输入。
75:00
好的啊,那么前的问题将来嗯,今天的这个呃,分享就结束了啊,谢谢大家。
我来说两句