前言
上一篇文章我们留了个不大不小的问题:如何获取当前播放视频时长,进而视频播放完毕后自动翻页? 现在我们通过快手极速版App进行探讨和实现。 众所周知,Android播放视频依赖播放组件类,而播放组件会有一些通用方法,比如开始、暂停、循环播放、设置播放位置、获取视频播放进度等,如果我们能Hook这些方法,就会获取当前播放组件的实例,通过实例再获取当前视频的时长。实现方法
继续使用Frida神器,启动快手极速版的命令如下:
frida -U -f com.kuaishou.nebula --no-pause
通过调试追踪,我们发现快手极速的播放组件的类为:
tv.danmaku.ijk.media.player.kwai_player.KwaiMediaPlayer
或者
com.kwai.video.player.kwai_player.KwaiMediaPlayer
那我们就hook这两个类,获取当前播放组件实例,从而获取当前视频时长。执行以下代码:
var top = {}
Java.perform(function(){
var c;
try{
c = Java.use("tv.danmaku.ijk.media.player.kwai_player.KwaiMediaPlayer");
c.setLooping.overload('boolean').implementation = function (p1) {
if(p1){
top.player = this;
console.log("视频时长1:"+this.getDuration());
}
var resp = this.setLooping(p1);
return resp;
};
}catch(e){
c = Java.use("com.kwai.video.player.kwai_player.KwaiMediaPlayer");
c.getCurPlayingUrl.overload().implementation = function () {
if(this.getDuration()>0){
top.player = this;
console.log("视频时长2:"+this.getDuration());
}
var resp = this.getCurPlayingUrl();
return resp;
};
}
});
滑动刷新视频,可以从控制台发现,视频时长已经输出了:
so,大功告成!