tiktok怎样开镜像?
怎样在切入切出虚拟摄像头时营建卡顿效果
背景介绍:本人本来是android逆向工程师,后来由于工作变动,离开了协议分析这类的岗位,目前在做直播机与第三方利用兼容性分析相关分析,所以就有了这篇兼容性分析文章。
问题:tiktok在我们推流装备直播时,经过几个特定步骤后切换前后置摄像头会出现卡住的问题。
重现步骤:直播界面打开更多菜单 - 然后退到后台 - 回到前台 -切换前后置菜单。
现象:直播画面卡住不动了。
解决思路:找到点击切换按钮后的点击事件回调,找到切换摄像头的核心逻辑,来找到卡住缘由。
1、如果了解ART虚拟机的同学会知道,jni函数和java函数都会调用到art虚拟机ArtMethod的Invoke函数。

输出日志:
find target method: android.view.View.performClick
ArtMethod Invoke【22955】: ; lr:0x4af78c; libart.so: android.view.View.performClick
ArtMethod Invoke【22955】: ; lr:0x2e2800; libart.so: java.lang.Enum.toString
ArtMethod Invoke【22955】: ; lr:0x2e2800; libart.so: X.Ggh.LIZ
ArtMethod Invoke【22955】: ; lr:0x2e2800; libart.so: java.util.LinkedHashMap.init
ArtMethod Invoke【22955】: ; lr:0x2e2800; libart.so: java.util.HashMap.putAll
ArtMethod Invoke【22955】: ; lr:0x2e2800; libart.so: java.util.HashMap.put
ArtMethod Invoke【22955】: ; lr:0x2e2800; libart.so: X.DED.LIZ
ArtMethod Invoke【22955】: ; lr:0x2e2800; libart.so: X.D5k.onClick
通过frida hook libart.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它,发现每次出错时,这个函数的毛病码都会报⑷21毛病(截图省略⑷21毛病码的测试进程)。


毛病信息非常明确的告知我们是由于相机不支持缩放,致使的打开相机失败,那末至此相机卡住的直接缘由找到了,但是还没找到为何特殊的操作流程后会卡住,而正常的操作不会。因而乎继续随着堆栈信息往上找。

发现走进了这里的流程,致使的相机进缩放流程,为了验证料想,我决定在这个函数调用前,把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函数里(也就是我们之前抛⑷21毛病堆栈的函数)。如果熟习相机开发的同学应当知道,一般我们界面退到后台会释放相机,然后回到前台重新打开。那末接下来我们把这几个函数都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,相机正常,紧接着我们发现了⑷21毛病,发现又重走了父类的onStart函数,那末此时status或者1。

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


以上就是第一种情况,由于每次切换相机都会抛完⑷21毛病后,再调用父类ExternalVideoCapturer的start函数来重置status,也就造成了能调用Camera.open但是画面卡住的情况。
•情况二:先滑动界面,再切换相机,然后按home键,接着回到tiktok,最后切换相机,此时status()函数返回2,没走后续Camera.open流程。
前面流程就不贴了,直接开后面的流程记录。
退到后台 status=1

回到前台status=1

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

切换相机第二次,在调用switchCamera之前先抛了一次⑷21的毛病,致使status=2,然后switchCamera函数里判断status为2就被return,没有调用Camera.open函数,接下来也没有更多函数来重置status的状态,所以不管怎样切换相机,都没法履行到Camera.open(),除非tiktok退到后台,再回到前台。


以上就是第二钟情况。
怎样打开国际版tiktok利用软件?
国际版tiktok使用教程以下:
工具:Vivo手机、UC浏览器、tiktok国际版APP。
1、打开Vivo手机,登录UC浏览器。
2、在UC浏览器中搜索栏输入tiktok国际版软件名称并自动弹出适配的搜索结果点击进入。
3、进入搜索结果中,查看详情并点击下载tiktok国际版apk按钮。
4、弹出下载窗口,点击下载便可。
5、下载完成后自动安装,如果没有自动安装可手动操作安装,安装完成后便可在手机上打开tiktok国际版app来进行使用。
怎样在国内使用tiktok?
TikTok是抖音国际版,国内没法使用。
TikTok的运营策略是针对区别市场采取符合当地需求的本土化运营策略。TikTok曾屡次登上美国、印度、德国、法国、日本、印尼和俄罗斯等地App Store或Google Play总榜的首位。TikTok在全球各地设有办公室,包括洛杉矶、纽约、伦敦、巴黎、柏林、迪拜、孟买、新加坡、雅加达、首尔和东京等。
软件特点
1、用户可以通过TikTok上传或观看15秒和60秒之内的短视频内容,TikTok是标准的UGC模式产品,本身不生产任何作品,由用户生产内容,供其他用户消费。
2、TikTok的注册比较宽松,只需要一个电子邮箱,就能够注册TikTok账号,固然,也能够通过电话号码、第三方App的账号(如Facebook、谷歌邮箱、WhatsApp、Instagram等),进行注册登录。
短视频平台机器,是如何检测短视频内容,会不会重复一致?
疯象网为你解答:
不管是任何情势的内容,在贮存服务器中都是以数据方式贮存的,直接对照数据是其中一种方式。
打个比喻,我看着你的照片,我要把你放进我的记忆当中,那我会记忆你的肤色、身高、五官、一及其他的特点,这类是模糊记忆。而电脑的记忆方式是把这张照片分成很多个小方块,也就是我们所说的像素,然后记住每个小方块的位置和色彩,如果是视频的话还要记录小方块的变化,那末直接去对照记录两个小方块色彩值的数据,就能够准确的判断两张照片会不会一致,视频的话也是同理的,单纯的对照是远远不够,如果你加个滤镜系统可能就就躲开了。实际上会需要用到非常复杂的检测方式,如果说你要伪原创视频的话,你可以从以下几个角度去处理:
1、加滤镜,由于滤镜跟我们的视频处理统一调色不一样,视频区别的位置变化是不一样的,如果我们最少把视频的某一个色调调高了,那末本质上区分其实不大。
2、做镜像,左右镜像或上下镜像,看内容而定,镜像以后不影响视频本身的体现就行。
3、抽帧,例如我们正常的视频是25帧、30帧、60帧,假定原视频是6秒的视频,每秒60帧,一共就是360帧,你抽掉60帧,那末后面每帧跟原视频都有差异,固然如果你原视频每帧差别都不大的话,系统或者会发现的。
还有很多其他的方式可以去处理视频,科技在不断的进步,各平台的反做弊技术也会不断的提升,区别平台规则也区别,可以多尝试一下。
目前这类伪原创技术多用于Tiktok搬运号,直接把抖音的短视频处理以后搬运到Tik Tok上面,只要有播放就有创作者扶持计划,前期就能够取得收益,后面账号做起来以后再开始自己创作短视频,也能够接广告或带货。
w11的tiktok怎样打开
TikTok是抖音国际版,国内没法使用。
TikTok是字节跳动旗下短视频社交平台,于2017年5月上线,愿景是“激起创造,带来愉悦( Inspire Creativity and Bring Joy)”。
美国当地时间2020年8月24日,TikTok正式对特朗普8月6日颁布的第一道行政令提起诉讼,在新闻稿中称:"我们不会轻易起诉政府,但我们别无选择,只能采取行动来保护我们的权利,和我们社区和员工的权利。”
所获荣誉:
2018年12月,苹果公司“2018年度精选榜单(Best of 2018)”出炉,TikTok超过LINE、Google Maps等经典利用程序,成为日本App Store年度热门不要钱利用榜单的第一位。
2018年12月,TikTok在Google Play年度大奖评选中,摘得印尼2018年度“最好利用”奖项。GooglePlay官方给出的获奖理由是TikTok具有“丰富的社区互动和精彩的用户创造内容(UGC)”。
2019年1月,印度全国性日报《印度快报》(TheIndian Express)将TikTok列为2018年度印度人最爱好的利用之一。
2019年6月,TikTok获日本第22届文化厅媒体艺术节的文娱类优秀奖。文化厅表示,TikTok的出现意味着社交网络多样性时期已到来,也真正创造出了一个用户可选择的时期
TikTok如何破0播放
Tiktok最多见的问题就是怎样我的视频发布已很长时间了,怎样或者0播放呀?我这个号是不是是被限流了呀?我这个是号是不是是废掉了啊?怎样办啊?
小朋友,你是不是是有很多问号?
说真的我能理解大家的这类焦虑的心情,由于我也经历过这类焦虑心情。现在这个问题已过去了,经过大家的经验总结和我自己的实操,已把这个问题基本上解决了。现在我把自己的操作进程整理成文档。希望能给大家一些思路参考。老实说我用了这个办法试过搬运抖音,快手,和TikTok上的大V的视频,都很荣幸没有监测到,如果平台要查重的话的一样会查到的。
一、破0播放1 确保TikTok环境100%正常
要破0播放,第一步就是要确认手摹拟环境100%,虽然导师嘉伟说70%以上就差不了,我有逼迫症一定要把它弄到100%。具体操作查看导师嘉伟的文档,这里不再做介绍。
这一步我觉得非常重要,我有个习惯就是摹拟度虽然100%,不放心,我还用百度 输入“IP地址查询" 来查一下当前IP是不是是真的出去了,如上图。只要做好上面这一步,后面若出现0播放就不用斟酌是不是是环境的因素了,直接排除掉。
二、破0播放2 视频搬运剪辑的技能方法
擅用工具;视频时长:掐头去尾;画面处理:滤镜镜像放大缩小;去冗余
倍速殊效;改音乐找节点,再删除;加字幕、贴纸(poll投票);
加讲授;改帧:计时表、覆盖;视频源;改主题
我只用了里面的四,五个技能,就可以做到搬运的视频能破0播放。
我用剪映工具录制了一个视频教程,全部视频也就是5分钟,看完这个教程,就算你是0基础的同学也一样可以轻松的制作一个完全的视频。
搬运视频剪辑处理教程
70首能用的TikTok热门音乐
有需要的联系我,发给你们。
三、破0播放3 创作优良的作品
纵观TitTok的优秀作品,你会发现技术上的一些技能其实不是很重要,重要的是作品的内容。
四、插播一条分享
我零播放的时候哪有那末多资料,都是自己死磕了20多天,
一个一个方法去试,去排查缘由。
破零技能不过就是几种
2.零播放缘由排查也不过就是硬件ip内容
依照教程技能一个一个排查呀
具体操作流程
硬件排查
1.(起号阶段,iPhone会不会有抹除数据,安卓会不会有三清recovery)
2.用验证过的vvv+基础设置+whoer百分之百
内容排查
1.内容分质量太差,这个要学习优良对手,我发觉有同学喜欢埋头怼视频
2.还有就是搬运重复问题,搬运重复问题的,肯定是深度处理不到位!
如果或者被辨认,大几率是深度处理不到位,看看深度处理的技能,覆盖每帧每秒,不要暴露任何一帧,这个有做到位吗
如果不愿意用一些时间主动去学习,主动排查缘由,再零播放就iPhone抹除数据,安卓三清recovery,基础设置+验证的vvv全部重走一遍吧