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