大家好,如果您还对在线tiktok去水印不太了解,没有关系,今天就由本站为大家分享在线tiktok去水印的知识,包括怎么去水印的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
.jpg)
怎样在切入切出虚拟摄像头时营造卡顿效果
背景介绍:本人原先是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退到后台,再回到前台。


以上就是第二钟情况。
求好听的轻音乐
既然不需要古典的,那推荐一个手风琴的专辑http://www.songtaste.com/user/album/a188636
一个吉他的专辑
http://www.songtaste.com/user/album/a78559
一个钢琴的专辑
http://www.songtaste.com/user/album/a86012
一个小提琴的专辑
http://www.songtaste.com/album/160769
小提琴&大提琴
http://www.songtaste.com/user/album/a235805
另外,强烈推荐
Ayur的ChildrenOfTheEarth-
http://www.songtaste.com/song/1173862/
我当初听了被震撼了好一阵子~
http://www.songtaste.com/singer/72156/
这里是他的那张专辑里可以找到得歌曲~
包括Imissyou
试听地址
http://www.songtaste.com/song/445499/
Lovethemefromspartacus.
试听地址
http://www.songtaste.com/song/768622/
另外再推荐一首
LILWAYNE迷茫的感觉
http://www.songtaste.com/song/824903/
这首基本是纯音乐,中间插了几句男声~
呵呵,楼主听了觉得可以的话,下载问题问我~也很简单的
下面这些都是我自己精心收藏的~我这里有全部的音乐,听了后觉得好的话给我留邮箱,我发给你~
现代版的
http://www.songtaste.com/home.php?tag=album&aid=274703
歌曲名顺序
1Wet(Outro)--freestyle
2Promise(Reprise)-钢琴版-寂静岭原声。--SilentHill
3Thequalityofsilence(CordeOblique)--CordeOblique
4Lovethemefromspartacus.--Ayur
5TearsOf--AkiraYamaoka
6古典吉他版Carmen-众多卡门中最魅惑的版本:-)--Smelly古典精选
7Dancetothedeath忧美纯音--YokoShimomura
8我的吉他长蘑菇了--祁合
9Paroles,Paroles--QuadroNuevo
10TheCrave--海上钢琴师
11childrenontheearth--
12SleeplessBeauty--钢琴
13布拉格广场纯音版--Shallow′
14心无属意斑斓--开到荼靡
15dearchie好听的吉他--latale
16花--纯.音乐
17写给海洋--卡洛儿
18绝对震撼你的节奏钢琴曲Imissyou--ayur
19LILWAYNE迷茫的感觉--wickeywong
20夜半路灯(手风琴)--
21A.J.Alex致吸血鬼的五曲
22无法开口ICan--钢琴曲
23下雨的爱情(钢琴曲)--Yiruma
24忧伤歌声的伴奏这--伴奏
25说话的鱼TalkingFish--萤火虫
26手风琴曲3--
27吉他独奏斯卡布罗集市--吉他独奏
28钢之炼金术士兄弟(吉他版)--
29悲伤的西班牙--人们的梦-吉他曲
30吉它:半月--DEPAPEPE
31LastTangoInParis这个版本最完美--gotanproject
32回首京华--风·月·花·鸟
33MugenEternal(UDKRemix).--LittleWest
34陌生的舞会--R侯爵
35NaarVindenGraater--Vali
36全世界都在下雨谁能共享这淡淡的忧伤--用灵魂歌唱
37浪客剑心抒情插曲
哀婉苍凉版的
全部试听地址
http://www.songtaste.com/home.php?tag=album&aid=274200
1百鬼夜行抄--森英治
2死亡大明宫词原声--林海
3千年风雅(陶笛)--子雷
4乱红--
5哀歌犬夜叉--犬夜叉
6医邪--天启
7暗香(古筝版)--花好月圆
8摩诃の曼佗罗华曼珠沙华--吉田洁
9幽灵公主--宗次郎
10回梦游仙笛子独奏--
11蝶恋复刻LIVE版
12三个人的时光
13风居住的街道
14宙へ--きのはち
15木漏れ日--京田诚一
16予感--二胡阳炎千秋恋歌
17Todaiji--RonKerb
18TheDayILostMyLove那天..下雨了..你离开了--RonKerb
19长相守大明宫词原声--林海
20穿越时空的思念犬夜叉插曲、
清幽淡雅型的
全部试听地址
http://www.songtaste.com/home.php?tag=album&aid=274190
1幽幽海谷情--蜀山online
2琵琶语--林海
3冰菊物语古筝版(行云流水般顺滑且飘逸)--民乐交响曲
4茉莉心---
5临安夜色一一仙剑OL杭州城曲一小蝶吟伴奏--仙剑音乐团队
6往事若如菩提--花开似水人淡如菊
7情为谁存_泪为谁落_--
8MerryChristmasMr.Lawrence--凛Rin
9沧海一声笑古筝.--
10花间梦事--王俊雄
11归去来兮--王俊雄
12穿越(唯美中国风)--
13没人知道的秘密
14沧海桑田遗忘整个世界却把心丢在你那里--wickeywong
15发如雪--葫芦丝演奏版
16还乡小路--创毅制作群
17桂花落--王俊雄
18古奇连--雷恩寇伯
19梅花落--屠颖
20春色三分雨--屠颖
21花宴(原曲冀小棠).--屠颖
22风之誓言--梁邦彦
23绿野仙踪--陈悦&马克
24岫壑浮云deep_valley_and_floating_cloud--陈悦&马克
快意江湖版的
http://www.songtaste.com/home.php?tag=album&aid=274200
1少年行变奏--
2水浒Q传登陆音乐--小旭
3小酒馆(来一壶小酒只有在梦里才有的节奏)--R侯爵
4清波水鉴纯音乐--
5玉满堂--仙剑
6asiandreamsong--伍芳
703凡人歌--林海
8Sakitama幸魂月下箫声中的拆戟沉沙之战--凛
9跳皮筋--R侯爵
10采草莓--创毅制作群
11欢沁--林海
视频怎么去水印
去水印视频教程如下:
1.马赛克。这个是比较常用的视频去水印方法,通常在给视频处理水印时,这种方法是目前用到最多的一种方法,但这种方法对于单一画面颜色处理起来非常完美,比如以下这个视频,需要把上下的字幕水印去掉,我们可以用到剪画微信小程序中的马赛克功能来处理。需要注意的是如果视频画面颜色比较丰富时,处理出来的效果会稍为没有那么好。
2.画面裁剪。画面裁剪是通过画面局部裁剪,来去除包含水印的部分。比如下方的视频,上下是有文字显示的,但我们只需要中间的画面,这里就可以用到微信小程序剪画中的画面裁剪,选择自定义调整好尺寸,把多余的视频画面裁掉就可以得到无损且没有水印的视频了。
3.视频链接一键去水印。这里会用到一个视频在线处理工具--剪画微信小程序,目前已支持主流短视频平台的视频链接去除水印,简单的复制视频链接就能一秒无损的去除视频中的水印。
怎么去水印
如何去除图片中的水印,看我这篇回答就够了!!!
今天给大家分享8种消除图片水印的方法,PC端、手机端都包含,都是能非常轻松便捷去除图片水印的方法,
强烈建议点赞收藏!!!
话不多说,直接上干货!
PC端:
一、电脑Photoshop软件
PS是一款图片处理专业级软件,上面有非常多非常专业的图片处理工具,包括很多图片去水印工具,能帮我们快速将图片水印去除掉。我们以复制背景(CTRL+J)法为例:
例如水印在背景上,大家注意,由于这张图的背景颜色从上往下是有一个线性渐变的感觉,为了不影响这个背景渐变的感觉,我采用复制叠加的方式:
首先用矩形工具套住一个选区,由于它是从上往下的渐变关系,所以竖着套住有这种渐变关系的选区:
然后ctrl+J复制选区图层:
然后再按住alt键,用移动工具去移动它,它就会自动的不断重复复制图层的操作,最后遮挡完,效果大概这样:
二、电脑“水印云”软件
这是一款专业去水印的电脑软件,不仅支持对图片和视频去水印处理,同时兼具对图片和视频进行加水印、视频加字幕、视频格式转换、智能抠图等多种功能。它的去水印功能方面,得益于智能识别算法的加成,经过去水印去除处理的图片,在细节上能够高度还原无水印前的样子,并且能够保证图片输入和输出过程中,不损失原图片画质,为用户提供一站式高效去水印体验。
具体步骤:
一、在电脑中下载并打开“水印云”软件(也可以在水印云官网在线使用),点击“图片去水印”功能并导入需要去水印的图片。
关于在线tiktok去水印的内容到此结束,希望对大家有所帮助。
.jpg)