2021-04-29

iOS开发(OC)——音频播放AVPlayer

AVPlayer支持在线播放,使用如下:

1.头文件

#import <AVFoundation/AVFoundation.h>
@property (nonatomic, strong) AVPlayer *player;//播放实例

@property (nonatomic, strong) AVPlayerItem *currentItem;//当前播放的音频

3.初始化

AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:url options:@{AVURLAssetPreferPreciseDurationAndTimingKey : @(YES)}];//url播放地址
AVPlayerItem *item = [[AVPlayerItem alloc] initWithAsset:asset];
self.player = [[AVPlayer alloc] init];
[self.player replaceCurrentItemWithPlayerItem:item];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];//设置后台播放
[self.player play];//开始播放

4.播放过程中的相关操作

[self.player pause];//暂停

[self.player play];//继续播放

[self.playerseekToTime:CMTimeMakeWithSeconds(startTime, NSEC_PER_SEC)];//从startTime开始播放,用于进度条滑动操作

self.player.currentTime;//当前时间,这是一个CMTime对象,通过CMTimeGetSeconds(time)返回double类型

self.player.currentItem.asset.duration;//音频总时长,也是一个CMTime对象,通过CMTimeGetSeconds(time)返回double类型,注意self.player.currentItem.duration也是有的,但是在某些设备获取不到,所以不要用self.player.currentItem.duration


5.题外话:当有其他音频插入时,AVPlayer会被中断,并且不会自动恢复播放,比如有电话打过来,可以额外监听电话

#import <CoreTelephony/CTCallCenter.h>
#import <CoreTelephony/CTCall.h>

CTCallCenter *callCenter = [[CTCallCenter alloc] init];
__weak typeof(self) weakself = self;
    [self.callCenter setCallEventHandler:^(CTCall * _Nonnull call) {
        if ([[call callState] isEqual:CTCallStateDisconnected]) {//电话挂断(包括拒绝通话和通话完成的挂断)
            if (weakself.status == AudioPlayerStatePlaying) {//如果电话来之前正在播放,恢复播放
                [weakself.player play];
            }
        }
    }];

iOS开发交流群:301058503

上一篇:Ubuntu install codeblocks by ppa


下一篇:直播网站源码实现IM即时聊天