大家好,tiktok滑动手势相信很多的网友都不是很明白,包括长安cs55炫色版怎么样也是一样,不过没有关系,接下来就来为大家分享关于tiktok滑动手势和长安cs55炫色版怎么样的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

怎样在切入切出虚拟摄像头时营造卡顿效果

背景介绍:本人原先是android逆向工程师,后来因为工作变动,离开了协议分析这类的岗位,目前在做直播机与第三方应用兼容性分析相关分析,所以就有了这篇兼容性分析文章。

问题:tiktok在我们推流设备直播时,经过几个特定步骤后切换前后置摄像头会出现卡住的问题。

重现步骤:直播界面打开更多菜单->然后退到后台->回到前台->切换前后置菜单。

现象:直播画面卡住不动了。

解决思路:找到点击切换按钮后的点击事件回调,找到切换摄像头的核心逻辑,来找到卡住原因。

1、如果了解ART虚拟机的同学会知道,jni函数和java函数都会调用到art虚拟机ArtMethod的Invoke函数。

输出日志:

findtargetmethod:android.view.View.performClick

ArtMethodInvoke【22955】:;lr:0x4af78c;libart.so:android.view.View.performClick

ArtMethodInvoke【22955】:;lr:0x2e2800;libart.so:java.lang.Enum.toString

ArtMethodInvoke【22955】:;lr:0x2e2800;libart.so:X.Ggh.LIZ

ArtMethodInvoke【22955】:;lr:0x2e2800;libart.so:java.util.LinkedHashMap.<init>

ArtMethodInvoke【22955】:;lr:0x2e2800;libart.so:java.util.HashMap.putAll

ArtMethodInvoke【22955】:;lr:0x2e2800;libart.so:java.util.HashMap.put

ArtMethodInvoke【22955】:;lr:0x2e2800;libart.so:X.DED.LIZ

ArtMethodInvoke【22955】:;lr:0x2e2800;libart.so:X.D5k.onClick

通过fridahooklibart.so的ArtMethod的Invoke函数,我们找到了点击事件的回调类X.D5k.

找到这个类对应的onClick函数后,我对整个流程做个简单的研读,感觉发现了核心代码在注释直播流处理。

跟着核心代码一路往下找到LiveCore这应该就是直播的核心代码,其实现类为LiveCoreImpl,ILiveStream的实现类为LiveStream。

发现此处只是做了日志信息的合成和应用镜像之类的代码,但是又找到一个核心的类LiveStreamVideoCapture。

追踪到这里发现链路断了,又凑巧通过frida打开tiktok卡死在启动页上,那么接下来使用Xposed继续理流程。

上面的代码虽然没有追中到切换摄像头的核心逻辑,但是我们找到了两个核心逻辑的类LiveStreamVideoCapture和LiveCoreImpl,分别和直播视频流控制直播核心流程控制相关,所以Xposed继续走的时候以这两个类为重点,那么此处就开始放大招了,hook这两个类的所有函数,贴上代码。注意这里使用的classloader是application的classloader。

日志太多了,这里通过shell命令setprop做了个日志控制。

然后找到CameraVideoCapturer类的tryDeliverFrame,这里是处理相机的视频帧,感觉越来越接近真相了,继续hook这个方法,然后发现相机切换卡住以后,这个方法也停止调用了,那么没办法,继续往上找堆栈中run方法的调用调用处。

继续hook。

找到这个类。

至此,熟悉相机开发的同学应该知道,这就是SurfaceTexture.setOnFrameAvailableListener后,相机的可用帧会回调到这个函数,切换相机后卡顿,可用帧也同时不回调。

接下来hook原生相机。

调用的是android.hardware.Camera,也就是camera1相关的api,切换卡顿的时候并没有调用Camera.open函数。

首次开直播的时候调用了这两个函数,点击切换相机的时候并没有调用,在X.HCF这个类里找到switchCamera函数,那么猜测首次开相机,和切换前后相机走的并不是同一个流程,因为这个bug只有在切换相机时才会出现,所以我们就不关注首次开相机的流程。

果然,切换相机的时候走了这个流程,这是又发现了LiveStreamVideoCapture这个核心类,那么简单进去看看SwitchCaptureRunnable这个有没有被创建。

经过测试,发现这个类只会被创建一次,而run方法每次切换都会被调用,而且卡住的情况下也会被调用,那么结合上面Camera.open卡住时没有调用,可以大胆的猜测中间过程某个条件不满足被return了。根据堆栈信息继续往下找几个关键点。

发现CameraVideoCapture里也有切换相机的流程,切一步步往下走,能调用到上面我们hook过的X.HCF的switchCamera,那么我们就看看这里的switchCamera有没有调用吧。

•情况一:先滑动直播界面,再按home键,然后回到tiktok,再切换相机,此时status()函数返回1,走了后续Camera.open流程。

•情况二:先滑动界面,再切换相机,然后按home键,接着回到tiktok,最后切换相机,此时status()函数返回2,没走后续Camera.open流程。

从日志看switchCamera两种情况都走了,再结合switchCamera的源码看,源码里的status()函数的返回值决定了是否继续往下调用切换相机的流程,很遗憾的是,两种情况都出现了,而且都会卡住(为什么两个status值会不一样呢,这里先留个坑,最后来填)。这可把我难住了!

就在这时脑子突然开窍,既然画面卡住,那么必然有错误信息回调,果然一搜索CameraVideoCapture这个核心类有onError函数,毫不犹豫hook它,发现每次出错时,这个函数的错误码都会报-421错误(截图省略-421错误码的测试过程)。

错误信息非常明确的告诉我们是因为相机不支持缩放,导致的打开相机失败,那么至此相机卡住的直接原因找到了,但是还没找到为什么特殊的操作流程后会卡住,而正常的操作不会。于是乎继续跟着堆栈信息往上找。

发现走进了这里的流程,导致的相机进缩放流程,为了验证猜想,我决定在这个函数调用前,把message里的what字段改成2,让它不走这个流程,来看看是不是就不会导致界面卡住,于是就有了下面这段代码。

经过这一番篡改,果真随便怎么折腾,直播界面都不会卡住了。那么我只要找到那里给handler发送的这个message就应该离真想很近了。

然后找这个handler的sendMessage相关切message的what字段赋值为1的函数。

然后我找到了它,这个函数还和缩放相关,那就八九不离十了。

按之前的堆栈继续hook,发现卡住的时候这些方法确实都走了,而正常的时候是不走的,那么在X.Dvc的LIZ继续用抛堆栈大法。

得到如下两种堆栈:

•X.DCM接收到了touch事件,然后交由X.DCc这个类进行手势判断,发现是需要执行缩放的手势,于是执行了相机的缩放功能(由于我们业务原因需要隐藏底部NavigationBar,在Window底部上划会显示NavigationBar,上划的手势同时触发了控件的以为需要执行相机缩放),但是我们的虚拟摄像头又不支持缩放,导致打开相机失败,画面就卡在了之前相机拿到的最后一帧。

X.DCc类

X.DCO的invoke方法

•点击tiktok的切换相机Button,触发进入相机的缩放,这里就和我们之前的点击事件联系上了,红框部分就是补上了之前没关注但是最重要的相机缩放功能判断部分。

至此,我们已经把相机卡住的直接原因和根本原因都找到了,先手势再点击切换相机触发了进入相机缩放功能判断流程,由于我们的虚拟相机不支持缩放,导致打开相机失败,卡在相机的最后一帧(也可能是黑屏)。所以只要交付给framework组开发人员,让他们支持相机缩放相关功能就可以了。

接下来来填前面留下的坑,为什么退到后台会导致status函数的返回值不一样?

我们回到CameraVideoCapturer类,看看这个status()函数到底是个什么鬼!

发现他是父类ExternalVideoCapturer的函数,而且就是返回个字段,那再看看他那里进行了赋值。

通过AndroidStudio自带的字段读写索引功能,很容易找到父类里的start、stop和release函数,以及自身的onErrorOnHandler函数里(也就是我们之前抛-421错误堆栈的函数)。如果熟悉相机开发的同学应该知道,一般我们界面退到后台会释放相机,然后回到前台重新打开。那么接下来我们把这几个函数都hook一下,来验证猜想。

这里我多hook了一个onCaptureStarted函数,这个函数会调用父类的onStart函数,想看看是否会有调了onCaptureStarted但是没调父类的onStart的情况。然后还hook了CameraVideoCapturer自身重写的onStart和父类ExternalVideoCapturer的onStart函数。

下面是刚打开直播时的日志,此时status=1。

•情况一:先滑动直播界面,再按home键,然后回到tiktok,再切换相机,此时status()函数返回1,走了后续Camera.open流程。

这是直播退到后台时的调用,说明确实释放掉了,但是又调用了父类的onStart函数,那么此时的应该为2的status又变回了1。

接下来回到前台,此时一切正常status还是为1,而且重走了自身的onStart函数,相当于相机整个流程完全重开。

再接着切换相机第一次,这时的status还是为1,相机正常,紧接着我们发现了-421错误,发现又重走了父类的onStart函数,那么此时status还是1。

接下来切换相机画面卡住了,但还是走了父类的onStart。

以上就是第一种情况,由于每次切换相机都会抛完-421错误后,再调用父类ExternalVideoCapturer的start函数来重置status,也就造成了能调用Camera.open但是画面卡住的情况。

•情况二:先滑动界面,再切换相机,然后按home键,接着回到tiktok,最后切换相机,此时status()函数返回2,没走后续Camera.open流程。

前面流程就不贴了,直接开后面的流程记录。

退到后台status=1

回到前台status=1

切换相机第一次,画面正常status=1

切换相机第二次,在调用switchCamera之前先抛了一次-421的错误,导致status=2,然后switchCamera函数里判断status为2就被return,没有调用Camera.open函数,接下来也没有更多函数来重置status的状态,所以无论怎么切换相机,都无法执行到Camera.open(),除非tiktok退到后台,再回到前台。

以上就是第二钟情况。

长安cs55炫色版怎么样

目前,年轻人是汽车消费市场的主力军,“得年轻人者得天下”已经成为汽车行业的共识。在消费者年龄不断变化的背景下,能够理解市场需求并付诸实践的品牌能够笑到最后,这也是那些常年占据销量榜前列的车型的秘诀。近年来,销量和口碑双“开”的长安汽车深刻认识到了这个道理,接连向市场投下“重磅炸弹”,如旗下的UNI系列、75系列、55系列、35系列等,不仅为SUV市场注入了新鲜血液,也为年轻人提供了新的选择。

其中,长安CS55系列凭借多彩的外观、出色的智能、安全、舒适空和充沛的动力,一经上市便迅速进入年轻消费者的购买第一单,不到三年就获得了50万用户的青睐。销量的背后,与其在同级别中超强的产品竞争力和优秀的消费者口碑不无关系。

在J.D.Power2018中国新车质量调研中,CS55以PP10087的成绩脱颖而出,获得紧凑型SUV市场冠军。并连续三年获得《新车评论》2017年度十大强烈推荐新车奖、《2017车生活车榜最受欢迎SUV奖》,2018、2019、2020年,获得中国汽车用户满意度指数测评8-10万A级SUV满意度第一名。

无论是专业鉴定还是用户口碑,CS55系列无疑以其出色的表现获得了各方的高度认可。如果高质量的产品能巩固品牌在市场上的影响力,那么审时度势,推陈出新,就能让品牌在市场上永远保持竞争力和活力。长安汽车自然深谙此道,推出第二代CS55PLUS。近日,长安汽车在重庆垫江县举办媒体品鉴会,以期为用户提供品质卓越、性能卓越的高品质产品。趁着这次活动,车叔详细体验了一下二代CS55PLUS。

对于颜值这个问题,每个年轻人都有不同的爱好。那些死板、传统、刻板的设计,不在当下热爱时尚的年轻人的审美点上。只有符合他们风格又足够时尚的设计,才能打动他们的心。二代CS55PLUS的颜值可以说不亚于一众自主品牌甚至合资品牌对手。

第二代CS55PLUS采用了长安最新的家族式设计语言,与现款车型明显不同。与UNI系列相同的大尺寸进气格栅,配备了远近光一体式LED大灯,内置九颗领先的高亮度LUMILEDS芯片。点缀着红色线条的配色,加上宽大的尾部,红色的带状环形尾灯,以及设计成竖线的两个第三刹车灯,绝对吸引了不少年轻消费者的目光。

尺寸方面,其长宽高分别为4515/1865/1680mm,轴距为2656mm,比老款增加了6mm。超长轴距带来了宽阔的空空间,无论是前排还是后排乘客都能获得足够的头部和腿部空间空。此外,结合人体工程学的一体式运动座椅在驾驶过程中带来了良好的支撑和舒适性。在体验百公里刹车项目时,可以明显感受到这种座椅给驾乘者带来的安全感。后备箱开口较大,后排座椅按向下比例支撑,可以形成一个平整的平台,实用性强。

除了外观惊艳之外,内饰也有很大变化。大面积的碳纤维状纹理和钢琴烤漆面板让整车看起来更高级。隐藏式出风口与一体式按键融为一体,再加上全新设计的D型运动方向盘、上悬空设计的电子换挡中控台、翼式按键设计,营造出了浓厚的科技氛围。

2.3寸中控面板搭配10.25寸液晶仪表显示屏,双屏联动实现多维信息无缝交互,保障行车安全。而且12.3寸的中控屏,画面清晰,操作流畅,内置TikTok、西瓜视频、今日头条等多元化娱乐app。第二代CS55PLUS的语音识别控制功能非常强大,可以控制天窗、车窗、导航、多媒体、拍照等功能。即使在嘈杂的环境下,也能准确识别声源,同时支持多轮对话功能,无需重复唤醒,使用效率得到了显著提升。

配置方面,千万不要小看年轻人对高配置的追求。无数汽车品牌在智能黑科技上加大马力,以满足其先进时尚的需求,从而俘获芳心。在这方面,第二代CS55PLUS搭载的IMS智能驾驶舱交互系统拥有FaceID刷机、疲劳监测、手势控制、540度全景影像、透明底盘、车联网等各种科技实用配置

比如手势控制,通过识别左右滑动、心比、赞、胜等不同手势,实现不同的指令。比如对着镜头做胜利手势,就可以开始拍照了;左右滑动手掌就可以切歌。甚至后排乘客也可以通过手势控制车辆功能。可玩性极强,绝对是一起旅行活跃气氛的利器。

还有疲劳监测功能。在驾驶过程中,系统会发出报警,提醒驾驶员是否打瞌睡、打电话、抽烟或注意力不集中,减少不规范驾驶导致交通事故的概率,主动安全性自然也能得到提高。此外还配备了ACC自适应巡航、车道偏离辅助、倒车侧向预警、正面碰撞预警、自动紧急制动等。,其安全性远超同级车型。

动力方面,搭载蓝鲸新一代NE1.5T高效动力组合,最大功率138kW,最大扭矩300n·m,参数较现款有所提升。配合全新7速湿式DCT变速器,百公里油耗仅为5.9L,可见第二代CS55PLUS能够完美兼顾强劲动力和燃油经济性。

在实际驾驶过程中,起步阶段动力柔和平顺,日常驾驶相当轻松,低速动力响应良好,加速过程中动力输出非常线性,换挡时几乎感觉不到顿挫和拖沓,高速状态下转向非常轻盈精准,即使是女司机也不需要费什么力气。并且拥有舒适、运动、节能三种驾驶模式。可以通过旋钮切换模式,车叔感觉舒适模式完全够日常使用。当然,如果你想要一点激情,就切换到运动模式,这个时候它的动力输出会更加积极直接。

底盘的表现也没有让我们失望。它能提供非常稳定的机械支撑,无论是急加速还是急刹车,都能随心所欲的驰骋,让我们在每个弯道都更加自信。另外快速通过多弯路段时车内整体感觉更好,舒适性有保证。而且在NVH方面,长安一直照顾的恰到好处,二代CS55PLUS也不例外。在场馆内行驶时,引入车内的噪音很小,给人非常安静的驾驶体验。

车叔总结道

长安此次推出的第二代CS55PLUS,整体上表现出了跨越式的体验,在产品力上能够以压倒性的优势超越同级对手。比如内外变化很大,整体面貌焕然一新,满足了年轻用户对汽车产品新的审美需求,同时档次感大大提升;而且拥有更丰富的智能科技配置和更强劲的动力,进一步加持了其竞争力。至于售价,根据长安汽车近期一贯的定价策略,车叔认为第二代CS55PLUS未来会有一个惊喜的价格。同时,我相信二代CS55PLUS到来之后,依然会是同级之王,因为二代CS55PLUS的“丘比特之箭”已经击中了年轻人的心。_

百万购车补贴

抖音叫什么美丽和男发小拍抖音四川

抖音是一款中国流行的短视频分享平台,用户可以在上面发布15秒到60秒的短视频,包含了搞笑、美食、美妆、旅游、音乐等各种类型的内容。抖音用户量庞大,覆盖了全球不同的用户群体,特别是年轻人和女性用户。抖音在中国的影响力和用户数量已经超过了其他社交媒体平台,成为了一种文化和生活方式。

“美丽”和“男发小”是抖音上的两个用户账号,其中“美丽”是一位来自四川的女性,她在抖音上分享了很多关于美妆、生活、旅游、美食等方面的视频,受到了很多用户的喜爱和关注;“男发小”是一位男性用户,同样也是来自四川,他在抖音上发布了很多有趣的短视频,以及一些关于生活、旅游、美食等方面的内容,也受到了很多用户的喜爱和关注。这两个用户的影响力和人气都非常高,成为了抖音上的明星用户之一。

文章到此结束,如果本次分享的tiktok滑动手势和长安cs55炫色版怎么样的问题解决了您的问题,那么我们由衷的感到高兴!

点赞(257) 打赏
Tiktok咨询
TikTok卖家交流群
跨境卖家专属社群
专家咨询
跨境卖家资讯群
集结行业大咖卖家,助力品牌出海,赶紧加入!
入群福利:
领取最新跨境行业研报+跨境工具导航包