IJKPlayer一些问题及解决

默认不支持https的问题

使用默认的配置生成的.framework是不支持https播放链接的,如果要支持,需要重新编译ijk。(重新编译后为动态库,支持iOS8+)

// cd 到ijkplayer的文件夹
  ./init-ios-openssl.sh
  ./init-ios.sh

  cd ./ios

  ./compile-openssl.sh clean
  ./compile-ffmpeg.sh clean
  
  ./compile-openssl.sh all
  ./compile-ffmpeg.sh all

编译完成后,打开IJKMediaPlayer选中其中的IJKMediaFrameworkWithSSLtarget,修改工程配置中的bitCode配置为NO。注意Release模式。
编译成功后即可得到支持https的framework。


播放音视频后,再次回到前台会中断其他APP的后台音乐播放

这个问题的原因是ijkplayer代码中有个IJKAudioKit是单例,会监听AVAudioSessionInterruptionNotification通知,并修改AVAudioSession的Active. 我们要做的就是在shutDown播放器后,移除这个监听。
IJKAudioKit.h中添加方法

// fix: 进入前台后 打断其它APP播放的音乐
- (void)removeAudioSessionObserver;

IJKAudioKit.m中添加

- (void)removeAudioSessionObserver {
    if (!_audioSessionInitialized) {
        return;
    }
    _audioSessionInitialized = NO;
    [self setActive:NO];
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:AVAudioSessionInterruptionNotification
                                                  object:[AVAudioSession sharedInstance]];
}

由于IJKAudioKit.h这个头文件并未暴露在framework中,还需要修改IJKFFMoviePlayerController / IJKMPMoviePlayerController / IJKAVMoviePlayerController的-(void)shutdown;方法中调用一次. 如:

- (void)shutdown
{
    if (!_mediaPlayer)
        return;

    // 这里调用
    [[IJKAudioKit sharedInstance] removeAudioSessionObserver];
    
    [self stopHudTimer];
    [self unregisterApplicationObservers];
    [self setScreenOn:NO];

    [self performSelectorInBackground:@selector(shutdownWaitStop:) withObject:self];
}

播放视频时,每次seek都会清空缓冲,导致已播放视频还需要重新缓冲

你可能感兴趣的:(IJKPlayer一些问题及解决)