• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
fly913
博客园    首页    新随笔    联系   管理    订阅  订阅

使用AVPlayer实现在线音频播放注意问题

//(oneplayer为单例)

+(OnePlayer*)onePlayer

{

    static OnePlayer * player = nil;

    static dispatch_once_t once;

    dispatch_once(&once, ^{

        player = [[OnePlayer alloc]init];

    });

    return player;

}

 

//初始化

//url初始化

-(OnePlayer*)initWithMyUrl:(NSURL*)url

{

    

    [self isCurrentPlayingUrl:url];

    if (_isPlaying) {

        [self pause];

    }

    [self replaceCurrentItemWithPlayerItem:[self creatPlayerItemWithMyUrl:url]];

 

    //提示网络

//    [[ShareManger defoutManger] judgeNetStatusAndAlert];

    self.isPlyed = NO;

    self.failPlay = NO;

    

    [self start];

    

    return self;

}

 

//初始化item

-(void)initWithaPlayerItem:(AVPlayerItem*)item

{

    if (self.currentItem.status != AVPlayerStatusFailed) {

        if (self.currentItem) {

            [self removeObserverFromPlayerItem:self.currentItem];

            [self removeNotification];

        }

    }

    

    [self replaceCurrentItemWithPlayerItem:item];

    [self addNotification];

}

 

 

//创建item

-(AVPlayerItem*)creatPlayerItemWithMyUrl:(NSURL*)url

{

    _playingUrl = url;

    

    if (self.currentItem.status != AVPlayerStatusFailed) {

        if (self.currentItem) {

            [self removeObserverFromPlayerItem:self.currentItem];

            [self removeNotification];

        }

    }

    

    AVPlayerItem * playerItem = [[AVPlayerItem alloc]initWithURL:url];

    

    [self addObserberToPlayerItem:playerItem];

    [self addNotification];

    

    return playerItem;

}

 

//改变item

-(void)changeToItemWithMyUrl:(NSURL*)url

{

    _playingUrl = url;

    

    if (self.currentItem.status != AVPlayerStatusFailed) {

        if (self.currentItem) {

            [self removeObserverFromPlayerItem:self.currentItem];

            [self removeNotification];

        }

    }

 

 

//重写getter方法

-(AVPlayerLayer*)playerLayer

{

    if (!_playerLayer) {

        _playerLayer = [AVPlayerLayer playerLayerWithPlayer:self];

    }

    return _playerLayer;

}

 

//第一次开始播放

-(void)start

{

    [super play];

}

 

//重写播放方法

-(void)play

{

    if (!_isPlaying) {

        [super play];

        _isPlaying = YES;

    }

}

 

//重写暂停方法

-(void)pause

{

    if (_isPlaying) {

        [super pause];

        _isPlaying = NO;

    }

}

 

 

 

//判断新的URL是不是现在播放的URL

-(BOOL)isCurrentPlayingUrl:(NSURL*)url

{

    NSString * urlStr = [url absoluteString];

    NSString * isPlayingStr = [_playingUrl absoluteString];

    if ([urlStr isEqualToString:isPlayingStr]) {

        return YES;

    }else{

        return NO;

    }

}

 

    

    AVPlayerItem * playerItem = [[AVPlayerItem alloc]initWithURL:url];

    

    [self addObserberToPlayerItem:playerItem];

    

    [self replaceCurrentItemWithPlayerItem:playerItem];

    

    [self addNotification];

}

 

posted @ 2017-03-20 17:06  fly913  阅读(28862)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3