美文网首页good程序员
SuperPlayer iOS端使用填坑

SuperPlayer iOS端使用填坑

作者: IOSMan | 来源:发表于2020-06-24 19:29 被阅读0次

    SuperPlayer是腾讯的开源播放器https://github.com/tencentyun/SuperPlayer_iOS,封装的腾讯的云的SDK,封装的很死,很多东西不能自定义,不能控制,GitHub的issue也没人解答,加的群里也没人回答问题,这个库处于一个半死不活状态,我目前将就着用,遇到很多坑,把我遇到的坑在这填一下:

    1.无法实时获取当前的播放时间

    本来该是有一个正在播放的代理方法回调,在里面修改当前播放时间,但是没有这个代理方法,所以我就写了一个定时器,当播放开始开启定时器一秒钟获取一下当前的播放时间,获取当前播放时间的属性是有的

    @property (nonatomic) CGFloat playCurrentTime;

    2.试看属性无效

    `@property (nonatomic) NSTimeInterval originalDuration;/// 原始视频总时长,主要用于试看场景下显示总时长`
    

    这个属性看着有点迷惑,设置了没有任何作用,不是试看时间,如果要实现试看,我这边处理比较复杂,
    1.在倒计时获取播放时间的方法,当时间大于试看时间,就停止播放
    2.要处理拖动播放进度条,在拖动响应事件中处理,拖动进度条过了试看时间,停止播放,提示文案。
    3.关闭屏幕滑动,会同时关闭左右滑快进快退和上下滑动控制音量@property (nonatomic) BOOL disableGesture;/// 是否允许竖屏手势设置为false就可以

    3.横屏全屏bug处理

    当在播放页present界面,比如登陆界面,然后横屏,播放界面会出来覆盖掉present出来的界面,再次竖屏播放页消失。另一种情况是如果播放页控制器没有释放,播放不会停止,pop出来依然播放,横屏播放页就又出来了。这属于自己的内存泄露。

    只要播放页没有释放掉,横屏,播放页就出来了,在暴露出的属性没有找到关闭播放器横屏的属性。只有一个横屏的代理方法,只能在横屏通知的代理方法中,再变为竖屏

        /// 全屏改变通知
    - (void)superPlayerFullScreenChanged:(SuperPlayerView *)player {
        
        if (self.isViewDisapper) {
            player.isFullScreen = false;
        }
        
    }
    

    4.其他处理

    播放切换

        SuperPlayerModel *playerModel = [[SuperPlayerModel alloc] init];
        // 设置播放地址,直播、点播都可以
        playerModel.videoURL = playPathStr;
        // 开始播放
        [_playerView playWithModel:playerModel];
    

    注意:SuperPlayerView要加在一个独立的自定义view类上,不要直接加在控制器上,否则播放器一横屏,控制器上的和播放层同一级的子控件就会飞跑不见了

    自定义播放层@property (nonatomic) SuperPlayerControlView *controlView;/// 超级播放器控制层把自定义的播放层返回给这个熟悉,播放进度条拖动需要调用方法

    - (void)seekToTime:(NSInteger)dragedSeconds;
    

    但是自定义播放层的代理方法全都没有效果

    能用的代理方法只有SuperPlayer的代理

    @protocol SuperPlayerDelegate <NSObject>
    @optional
    /// 返回事件
    - (void)superPlayerBackAction:(SuperPlayerView *)player;
    /// 全屏改变通知
    - (void)superPlayerFullScreenChanged:(SuperPlayerView *)player;
    /// 播放开始通知
    - (void)superPlayerDidStart:(SuperPlayerView *)player;
    /// 播放结束通知
    - (void)superPlayerDidEnd:(SuperPlayerView *)player;
    /// 播放错误通知
    - (void)superPlayerError:(SuperPlayerView *)player errCode:(int)code errMessage:(NSString *)why;
    // 需要通知到父view的事件在此添加
    @end
    
    

    推荐其他替代方案播放器ZFPlayer,WMPlayer

    相关文章

      网友评论

        本文标题:SuperPlayer iOS端使用填坑

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