美文网首页1
IJKPlayer一些问题及解决

IJKPlayer一些问题及解决

作者: 大大东 | 来源:发表于2017-09-11 14:36 被阅读3507次
    默认不支持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一些问题及解决

        本文链接:https://www.haomeiwen.com/subject/mnffsxtx.html