大家好,关于tiktok难点很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于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退到后台,再回到前台。


以上就是第二钟情况。
tiktok官方达人账号地区与店铺售卖地区不一致
费尽心思搭好环境之后,又到了关键时刻,选哪个区、发什么视频,这两个问题非常关键。
虽然Tiktok的内容是面向除中国外全球范围的,Tiktok的推荐机制除了用户标签以外,还有地区,先在本地推荐,然后一层一层的往上扩大范围。
例如在越南发,那就先推荐给越南用户,在推荐给临近几个国家的用户,在往上推荐给整个亚洲,最后推向全球各地,同时选择地区也会影响我们可选择的领域。
我们在选择领域的时候也要把地区因素考虑进去,千万不要发与地区文化冲突的内容,千万不要,哪怕不考虑别的因素,数据表现也会很差。
因为系统是根据视频的完播率、评论比、点赞比、转发率、关注比等维度计算的,只要这些数据表现好,视频就会被投放到更大的流量池中。所以我们发布的视频第一原则是市场能够接受。地区的选择我们主要推荐两个。
1、东南亚
优势:
1)、文化差异小,很多用户能听懂汉语,可选择的视频也就多了。
2)、变现方便,国内的电商平台在东南亚地区发展的很好,后期想变现的话会很方便。
3)、竞争压力小,基本没有什么竞争,Tiktok的创作者也就美区多一些,东南亚用户很多,但是创作者比例非常低。
劣势:
1)、东南亚国家是没有创作者基金的。
2、美国
优势:
1)、有创作者基金,前期可获得收益。
2)、市场大,美区的用户基数是非常大的,Tiktok全球在150个国家月活7亿,其中美国就有1亿。
劣势:
1)、竞争压力太大,美区当地的创作者就不少,再加上大多数国内做Tiktok的用户很多人也选择了美区,就导致美区竞争环境的形成。
其实这两个地区是针对不同的两种人的,东南亚适合长期发展,跟几年前的抖音基本无恙,我们在国内抖音的熏陶下,去到那个环境,无论是做原创还是搬运,都会很好做。美区适合冲着创作者基金的人去,不用考虑太多,视频往上怼就行了,后期会稍微难点,但也只是在文化上有些差异。
抖音短视频运营方针策略
一、抖音运营是什么?
直截了当地说,抖音运营是一个短视频营销,很像以前的微博营销,因此定位为短视频营销。
短视频震动,目前的情况是什么,我相信你不需要告诉大家都知道。抖音炒了很多产品,神歌,有很多歌,都是为奶带付费的。
抖音运营作为一个以短片为基础的平台,深受大家的喜爱,网友们纷纷叫来:看抖音,停不下来。有趣,时尚,二次,青春活力最好的描述在抖音上的视频。加下来我们简单阐述如何操作抖音找到客户?
?
二、抖音运营:创作形成体系化,形成持续创作能力
?
1、定位分析,分析用户和企业品牌的需求,定位和制定战略;
你需要根据自己的产品,希望在潜在的客户心中是个什么样的形象,进行细分人格化性格,说人话,我们年轻时候不都是填写过毕业校友录,上面的基本信息,也是适用于你的产品,以人为例如下:
如果你是标准实物产品,推荐账号人格定位方法,它的优点有:
1)与产品卖点直接相关,这相当于是趣味广告
2)产品是账号主角
3)员工离职,不存在“主角”缺席,断更的尴尬
2、基本服务:包括企业抖音账户的申请和认证;
3、人员配备与账户操作:企业账户的日常维护和更新(语音和视频编辑和发布)
作为老板的你,当你确认上面两条信息后,你就需要找一个员工做一个漂亮的抖音账号,那么如何找人?
抖音运营的主要功能是视频,如果按微电影的制作流程,简单说来需要:编剧、导演、摄影师、录音师、灯光师、剪辑师、美术包装师、宣传维护人员,看到这个是不是要被吓尿了?配置多少人,花多少钱,这与你想要达到什么目标相匹配。
抖音运营之所以能火,是因为近四五年,手机的摄像功能大幅度提升,录个4K就是举手之劳。所以企业运维抖音,我认为至少要2-3个人进行创作即可,其中最主要的,就是大量原创或改编段子手一个,摄录剪辑人员一位。用一张简单的表格总结下:
如果没有这些,推荐找一个有过编导经验的员工,会事半功倍。中国电视台为了节约成本,基本把编导这个职业培养成编辑+导演+剪辑一体的综合型民工,这样人员完全能够胜任你的抖音运营岗位需求。
4、活动策划:在线营销推广活动(品牌主题活动策划,活动策划执行分析,客户根据需要选择实施
造字:在各大互联网网站、论坛、新浪博客、腾讯微博、百度产品、天涯上推荐360种产品。
6、监测与反馈评价:每月统计当月运行情况,提供标准分析文件。
7、抖音流程动态调整监控
最后更为重要的是根据平台规则,会动态调整自己的手法,像微博平台基本半年会进行一次比较大的调整,这个时候你还用一年前的策略,基本就是事倍功半。最近抖音又增加了图文功能,你得去深度的了解他背后的逻辑,和所面临的挑战,跟着平台一起成长而成长。这也是新媒体运营有别于传统媒体的一大区别。但是好像4A基本还将KOL媒体当作CCTV来投放,本质上是两种媒体,两个语境的平台。
操作:
1:注册一个抖音业务号码,当然,最好是增加V,加上V的抖音重量就会大大增加,更容易命中。
2:准确定位,避开风扇。根据自己的经营情况,制作高质量、有创意的视频内容。
5:嗅觉灵敏,思维能力强,能把握TikTok的最新热度。
6:其他短视频传播渠道,如好友圈、微博、QQ、微信群等,都是一个很好的沟通渠道。人们看得越多,推荐信就越多,自然的粉丝越多,喜欢的人就越多。转发量甚至更大。
三、抖音运营:如何持续产生新的短视频
如果你对自己的品牌或是产品做过定位,知道自己产品特色,这个并不难,难点是在于如何收集段子,与产品进行巧妙的结合拍出抖音短视频运营。
收集段子,一种是依靠自己的大量积累,渠道有微博、微博热门话题、热门微博。把有趣的内容收集下来,然后看下即刻订阅的账号,还有就是朋友圈不间断的浏览,看到有趣的内容会发一条段子皮下,抖音短视频推荐机制不是人造革,是真皮。第二种就是让员工分享自己专注领域的KOL,汇总到抖音小编,进行选题判断,产品卖点结合和制作难度评估。
你需要找一面不会被HR乱贴东西的墙面,在左边放上最近流行的梗,右边放上主推广产品的卖点,然后大家在开创意会的时候,可以一起面壁头脑风暴,可以进行无数的连线选择。
如果你的办公室没有合适的墙壁,或是不喜欢古典的看墙壁操作,可以用石墨文档的协同表格功能,好几个小伙伴一起编辑一张表,大家每天定量把梗放着左边一栏,把产品所有功能放在右边一栏。你可以选择标相同颜色进行连线。
众源教育课程靠谱吗
众源教育课程靠谱。
众源教育作为一家上市公司,其实力雄厚的第一个关键点就是打造了优秀的讲师团队。众源教育在选拔导师方面要求很高,从学历,教学经验,教学技能,导师素养等各个方面考核,都层层把关,非常严格。
在众源教育工作的讲师们,很多都是具备10余年的运营实操经验,他们在教学过程中都分享给学员,帮助学员取得了令人惊艳的成绩。
讲师和辅导老师尽职尽责,他们会通过与学员的交流互动,总结收集反馈信息,调整和优化自己的教学方案,从而为学员们制定个性化、有针对性的指导方法,让学员学有所获。
在教学过程中,众源教育讲师会反复讲解难点,强调重点,直到学员弄明白学会为止。众源教育在课下也会对积极努力的学员进行额外辅导,他们珍惜学员的时间,让学员学到真正有用的东西。
众源教育为了能让学员们获得多元化发展,满足不同学员的具体需求,自主研发了很多精品课程,包括:自媒体运营、跨境电商运营、直播电商运营、TikTok运营等。帮助每一位学员找到最适合自己的发展方向,是众源教育一直在坚持做的,也是未来会一直做的。
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!
