WMPlayer无侵入扩展每秒执行的代理
- 写一个继承WMPlayerDelegate代理
- 写一个 WMPlayer的子类,重写
syncScrubber函数。 PS: 源码的内部实现是用了一个 1 秒轮训的计时器,所以重写syncScrubber就好了。 - 使用MDFPlayer子类来使用。
示例代码
- WMPlayerDeleg1ate
/// 扩展出一个视频更新代理
@protocol MDFPlayerDelegate <WMPlayerDelegate>
@optional
// 每秒更新一次此代理
-(void)wmplayerProgressPlay:(WMPlayer *)wmplayer currentTime:(long long)currentTime;
@end
- 创建子类MDFPlayer
//.h
@interface MDFPlayer : WMPlayer
@property (nonatomic, weak)id <MDFPlayerDelegate> delegate;
@end
//.m
#import <objc/runtime.h>
@implementation MDFPlayer
@dynamic delegate;
- (void)syncScrubber {
SEL superSelector = @selector(syncScrubber); // 获取父类的方法签名
Method superMethod = class_getInstanceMethod(self.superclass, superSelector); // 获取父类的方法实现
IMP superImp = method_getImplementation(superMethod); // 获取父类方法的具体实现
if ([self respondsToSelector:superSelector]) {
// 调用父类的方法
((void(*)(id, SEL))superImp)(self, superSelector); // 调用父类的syncScrubber方法
}
AVPlayerItem *item = [self valueForKey:@"currentItem"]; // 获取当前播放的AVPlayerItem对象
if (item) {
if ([self.delegate respondsToSelector:@selector(wmplayerProgressPlay:currentTime:)]) {
// 计算当前播放时间(单位:秒)
long long nowTime = item.currentTime.value/item.currentTime.timescale;
// 通过delegate更新播放进度
[self.delegate wmplayerProgressPlay:self currentTime:nowTime];
}
}
}
@end
- 使用子类MDFPlayer
import WMPlayer
import SnapKit
class VideoViewController: UIViewController {
var wmPlayer = MDFPlayer.init()
let playerModel = WMPlayerModel()
override func viewDidLoad() {
super.viewDidLoad()
setupWMPlay()
}
func setupWMPlay() {
let videoPath = Bundle.main.path(forResource: "1", ofType: "mp4")!
playerModel.videoURL = URL(fileURLWithPath: videoPath)
// 创建一个 WMPlayer 对象并添加到视图中
wmPlayer = MDFPlayer.init(playerModel: playerModel)!
wmPlayer.delegate = self
self.view.addSubview(wmPlayer)
// 设置布局约束
wmPlayer.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
wmPlayer.isFullscreen = true
// 播放视频
wmPlayer.play()
}
}
extension VideoViewController : MDFPlayerDelegate {
func wmplayerProgressPlay(_ player: WMPlayer, currentTime: Int64) {
print(currentTime)
}
}

浙公网安备 33010602011771号