大家好,今天来为大家解答hooktiktok怎么用这个问题的一些问题点,包括抖音TikTok怎么下载国际版也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

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

背景介绍:本人原先是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退到后台,再回到前台。

以上就是第二钟情况。

求好听的英文歌

●.NO.1【GottaBeSomebody-Nickelback】

★星评:〖★★★★☆〗-4星.

∮评价:美国Billboard榜单上最新串上去的歌曲。`很有实力啊。歌曲本身节奏有劲!感觉非常的强!相信黑色。相信你的耳朵!这就是欧美。这就是流行!

¢感觉:越听越好听的一首歌!太棒!!

●.NO.2【Thepussycatdolls-whenigrowup】

★星评:〖★★★★☆〗-4星.

∮评价:节奏超棒的一首歌曲。哈哈。没有别人。正是小野猫。她们这次整张专辑都有一种“强”的感觉。已强节奏为主!非常的动感!希望喜欢“强”的朋友会喜欢!

¢感觉:酷得不能再酷了。做手机铃声很棒。我试过了。哈哈~

●.NO.3【Mario-Howdoibreathe】[此歌由网友(.愚昧'提供]

★星评:〖★★★★☆〗-4星.

∮评价:你们其实不只是听众。你们可以自己做主!这首歌曲是又热心的友友推荐的。他很努力!找了很多好听的歌曲!我选了一首最最经典的!在此再次感谢所有支持黑色的朋友!谢谢你们!

¢感觉:非常棒的一首R

歌词就像音乐不停留是什么歌

问题一:时间匆匆我不停留…是什么歌

春夏秋冬

词曲:安仔

演唱:阎韦伶

专辑-傻孩子

猜不透叶子掉落

看见树开满了花朵

好像这一切

都不在现实中唤醒了我

搞不懂听都没听过

为什么水能倒着流

月亮绕地球

而谁没有疑惑谁没有

竹长青

不会随着记忆而老去

枫着地

四季如同一场游戏

变来变去

时间匆匆我不停留

留不住你我笑容

春夏秋冬我都走过

花开花谢随风而落

人海茫茫站着不动

随意开启时光出口

春夏秋冬我都走过

已经来到几十年以后

搞不懂听都没听过

为什么水能倒着流

月亮绕地球

而谁没有疑惑谁没有

竹长青

不会随着记忆而老去

枫着地

四季如同一场游戏

变来变去

时间匆匆我不停留

留不住你我笑容

春夏秋冬我都走过

花开花谢随风而落

人海茫茫站着不动

随意开启时光出口

春夏秋冬我都走过

已经来到几十年以后

阎韦伶-春夏秋冬

专辑-傻孩子

时间匆匆我不停留

留不住你我笑容

春夏秋冬我都走过

花开花谢随风而落

人海茫茫站着不动

随意开启时光出口

春夏秋冬我都走过

已经来到几十年以后

问题二:一首歌里有句让世界不在停留是什么歌

月半小夜曲-李克勤

仍然倚在失眠夜望天边星宿

仍然听见小提琴如泣似诉再挑逗

为何只剩一弯月留在我的天空

这晚以后音讯隔绝

人如天上的明月是不可拥有

情如曲过只遗留无可挽救再分别

为何只是失望填密我的空虚

这晚夜没有吻别

仍在说永久想不到是借口

从未意会要分手

但我的心每分每刻仍然被她占有

她似这月儿仍然是不开口

提琴独奏独奏着明月半倚深秋

我的牵挂我的渴望直至以后

仍然倚在失眠夜望天边星宿

仍然听见小提琴如泣似诉再挑逗

为何只剩一弯月留在我的天空

这晚以后音讯隔绝

人如天上的明月是不可拥有

情如曲过只遗留无可挽救再分别

为何只是失望填密我的空虚

这晚夜没有吻别

仍在说永久想不到是借口

从未意会要分手

但我的心每分每刻仍然被她占有

她似这月儿仍然是不开口

提琴独奏独奏着明月半倚深秋

我的牵挂我的渴望直至以后

仍在说永久想不到是借口

从未意会要分手

但我的心每分每刻仍然被她占有

她似这月儿仍然是不开口

提琴独奏独奏着明月半倚深秋

我的牵挂我的渴望直至以后

问题三:有歌词缘分不停留是什么歌

女人花

演唱:梅艳芳

我有花一朵

种在我心中

含苞待放意幽幽

朝朝与暮暮

我切切地等候

有心的人来入梦

女人花摇曳在红尘中

女人花随风轻轻摆动

只盼望有一双温柔手

能抚慰我内心的寂寞

我有花一朵

花香满枝头

谁来真心寻芳踪

花开不多时

啊堪折直须折

女人如花花似梦

我有花一朵

长在我心中

真情真爱无人懂

遍地的野草

已占满了山坡

孤芳自赏最心痛

女人花摇曳在红尘中

女人花随风轻轻摆动

只盼望有一双温柔手

能抚慰我内心的寂寞

女人花摇曳在红尘中

女人花随风轻轻摆动

若是你闻过了花香浓

别问我花儿是为谁红

爱过知情重

醉过知酒浓

花开花谢终是空

缘分不停留

像春风来又走

女人如花花似梦

缘分不停留

像春风来又走

女人如花花似梦

女人如花花似梦

问题四:不回头不回头不停留不停留是什么歌

天天晴朗-苏打绿

词:吴青峰

曲:吴青峰

中断剧场无聊戏码

散场没有人在身旁

一条孤单的走廊会走到什么地方

在路上会遇见怎样的穹苍

那山顶上的光

好像要带领我飞翔

大门取代一道墙泪眼开了一扇窗

乌云的背后幻生出了太阳

你的心蔚蓝地

温暖地透出了光芒

宇宙里殒落的

失踪的天使又歌唱

月光找到了海洋

生命找来了时光

再荒唐将黑夜都遗忘

那山顶上的光

好像要带领我飞翔

大门取代一道墙泪眼开了一扇窗

乌云的背后幻生出了太阳

你的心蔚蓝地

温暖地透出了光芒

宇宙里殒落的

失踪的天使又歌唱

月光找到了海洋

生命找来了时光

再荒唐将黑夜都遗忘

你的心蔚蓝地

温暖地透出了光芒

宇宙里殒落的

失踪的天使又歌唱

月光找到了海洋

生命找来了时光

再荒唐将黑夜都遗忘

有阳光每一天笑脸都晴朗

晴朗的心写成了歌为你唱

(答啦啦…..)

该过去就过去有你就不愁

问题五:你说我要我要就不必再停留是什么歌曲

眉飞色舞

问题六:歌词岁月被时间带走我们为何不停留是什么歌

你说的是这个吧

一天到晚游泳的鱼

情愿困在你怀中

困在你温柔

不想一个人寂寞

无边漂泊

就象鱼儿水里游

你的心河流向我

不眠不休的追求

一天到晚游泳的鱼啊

鱼不停游

一天到晚想你的人啊

爱不停休

从来不想回头

不问天长地久

因为我的爱覆水难收

多少喜乐在心中慢慢游

多少忧愁不肯走流向心头

就像鱼儿水里游

永远不会问结果

他们知道爱情没尽头

一天到晚游泳的鱼啊

鱼不停游

一天到晚想你的人啊

爱不停休

沧海多么辽阔

再也不能回首

只要你心里永远留我

一天到晚游泳的鱼啊

鱼不停游

一天到晚想你的人啊

爱不停休

沧海多么辽阔

再也不能回首

只要你心里永远留我

一天到晚游泳的鱼啊

鱼不停游

一天到晚想你的人啊

爱不停休

从来不想回头

不问天长地久

因为我的爱

因为我的爱覆水难收

问题七:歌词你说旋转不能停留是什么歌

歌曲:天音

歌手:黄圣依

作曲:印青

作词:梁芒

?我学那雄鹰飞翔

为了自由的梦想

告别了青草牛羊

飞跃高高的山岗

我亲爱的家乡我把你装进行囊

无论我去向何方

你都知道我的方向

万语千言万水千山

转动心里的电把遥远改变

世界大无边你就在耳边

每一声问寒问暖我都听得见

真实像个大草原让我流连忘返

骑着我美丽梦幻

奔向那理想的岸

情人浓浓的思念

思绪出现在我眼前

我轻轻用我指尖

就触摸到他们的脸

万语千言万水千山

转动心里的电把遥远改变

世界大无边你就在耳边

每一声问寒问暖我都听得见

万语千言万水千山

时间移动世界你改变草原

星球怎么旋转你都在耳畔

你的每次心跳我都听得见

你的每次心跳我都听得见

问题八:我为你所有,但不能停留,是什么歌啊,一个男的唱的

许巍-像风一样自由

问题九:爱情并不是停留不往前走是什么歌

我也难过

演唱者:喻佳丽

一眨眼你哭了

有话想对我说

你害怕就忘了

好像从没见过我

你爱我我走了

我也不想这样做

可是真的想对你说

明天开始就重新来过

你让我幸福过快乐过

这些我都还记得

别怀疑我

离开你我也痛哭傻了

忘记吧那些经过

都别再留

我爱你可是你也说过

爱情并不是停留

不往前走

可是分岔的路口

你向左我往哪里走

告诉我

一眨眼你哭了

有话想对我说

你害怕就忘了

好像从没见过我

你爱我我走了

我也不想这样做

可是真的想对你说

明天开始就重新来过

你让我幸福过快乐过

这些我都还记得

别怀疑我

离开你我也痛哭傻了

忘记吧那些经过

都别再留

我爱你可是你也说过

爱情并不是停留

不往前走

可是分岔的路口

你向左我往哪里走

告诉我

我也难过

你让我幸福过快乐过

离开你我也痛哭傻了

都别再留

我爱你可是你也说过

爱情并不是停留

不往前走

可是分岔的路口

你向左我往哪里走

我也难过

问题十:歌词我只有不停的走,是什么歌

delay组合-活着

词曲:黄迪

作于2004年母亲去世之后

人生第一首正式作品

我穿过丛林般的人流

寻找一个叫解脱的出口

我在幸福的门口静静等候

你经过离开却没有停留

在这人世间停停走走

落得一身的尘垢

却还是读不懂黄昏与白头

活着是注定一路坎坷的等候

人来人往却不知有谁能陪我到最后

哪一片天空才是你纯白的城

我总是看不清天堂在哪头

活着是注定一路坎坷的等候

人来人往却不知有谁能陪我到最后

生死轮回到底握在谁的手

我总是看不清天堂在哪头

我只有不停的走

让思念在岁月里日渐消瘦

打开每一扇窗口

总看见你的脸藏在云背后

回忆和寒风一样

总在不经意中让我颤抖

用我枯枝一样的手

握住活着的理由

抖音TikTok怎么下载国际版

抖音TikTok国际版下载教程如下:

1、安卓手机下载安装VirtualXposed,复制到手机浏览器打开https://github.com/android-hacker/VirtualXposed/releases,下载并安装。把TikTok软件安装进VirtualXposed中:打开VirtualXposed,进入界面,选中已下载软件TikTok,并安装。

2、下载“应用变量”,https://www.coolapk.com/apk/com.sollyu.xposed.hook.model。安装进VirtualXposed中。在VirtualXposed的“模块管理”中勾选启用应用变量模块,并重启VirtualXposed。点击模块进入“应用变量”,点击并更改TikTok的信息。

3、填好之后点击右下方的“+”保存配置。重启VirtualXposed,在软件首页的上拉栏里打开tiktok(记住是在VirtualXposed软件里面使用TikTok),这样就可安装好国际版抖音TikTok。

国际版抖音

TikTok(抖音短视频国际版本)是字节跳动旗下短视频社交平台,属于抖音全球化战略的产物,于2017年5月上线,愿景是“激发创造,带来愉悦”。2017年11月,字节跳动全资收购musical.ly。

2018年8月1日,TikTok与musical.ly合并,新产品继承“TikTok”之名,此后专注于海外市场。玩法非常简单,用户设置一段音乐就可以开始拍摄短视频,同时丰富的模板和视觉效果可以为视频增加趣味性;利用人工智能推荐算法,为全球用户提供个性化短视频。

关于hooktiktok怎么用和抖音TikTok怎么下载国际版的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

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