前要
我们在查看ijkplayr播放器的dome的时候可能发现一个很奇怪的问题,总是有下面方法的调用
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.player prepareToPlay];
}
这个方法
- (void)viewWillAppear:(BOOL)animated会在- (void)viewDidLoad之后开始调用
那么这个[self.player prepareToPlay];到底有什么用呢?
问题与解决方案
我们有时候需要切换数据源,比如切换程高清、超清、线路什么时候,我们必须重新设置self.player的数据源,而更改数据源的方法却只有两个初始化player的方法,没有直接更改数据源的方法,这个很坑,也不知道是不是Bibili特意这样的
- (id)initWithContentURL:(NSURL *)aUrl
withOptions:(IJKFFOptions *)options;
- (id)initWithContentURLString:(NSString *)aUrlString
withOptions:(IJKFFOptions *)options;
所以在更换self.player之前要释放掉self.player,然后用上面的两个方法重新设置初始化,记住一定设置完之后一定要调用[self.player prepareToPlay],我感觉这句话的作用就是设置一系列的音频视频的输入输出api的设置工作,必须在UI展示出来之前设置完成,又因为某些原因,不能在self.player之前就设置好,(此处是猜测的),如果忘记再次调用[self.player prepareToPlay]这个东西,视频是根本播放出来的