初始化AudioSession和基本配置

音频播放器采用的AVPlayer ,在程序启动的时候需要配置AudioSession,AudioSession负责应用音频的设置,比如支不支持后台,打断等等,这一步很重要,比如在viewdidload里初始化AVplayer以后要调用下面的函数:

/** 设置音频会话 */  //这种方式后台,可以连续播放非网络请求歌曲,遇到网络请求歌曲就废,需要后台申请task

-(void)setAudioSession{

AVAudioSession *audioSession=[AVAudioSession sharedInstance];

[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];

[audioSession setActive:YES error:nil];

}

除了代码的初始化,很重要的一步是对info-plist的设置,让应用支持音频的后台播放

库的引入包括:

AudioToolBox.framework

MediaPlayer.framework

CoreMedia.framework

AVFoundation.framework

Remote控制

在播放视图的ViewController里加上这两个函数:

- (void)viewDidAppear:(BOOL)animated {

[super viewDidAppear:animated];

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

[self becomeFirstResponder];

}

- (void)viewWillDisappear:(BOOL)animated {

[super viewWillDisappear:animated];

[[UIApplication sharedApplication] endReceivingRemoteControlEvents];

[self resignFirstResponder];

}

当然也可以同理放到delegate.m里面的进入后台和回到前台的函数中,否则的话,上面的代码只是允许当前视图的情况下进入后台可以Remote控制

在AppDelegate里要申请后台任务来进行处理

- (void)applicationDidEnterBackground:(UIApplication *)application {

[application beginReceivingRemoteControlEvents];
}

在添加远程控制代码:

-(void)remoteControlReceivedWithEvent:(UIEvent *)event{

//if it is a remote control event handle it correctly

if (event.type == UIEventTypeRemoteControl) {

if (event.subtype == UIEventSubtypeRemoteControlPlay) {

[self playBarSelector:self.mPlayButton];

}if (event.subtype == UIEventSubtypeRemoteControlPause) {

[self playBarSelector:self.mPlayButton];

} else if (event.subtype == UIEventSubtypeRemoteControlNextTrack){

[self playBarSelector:self.mNextButton];

[self configNowPlayingInfoCenter];

}else if (event.subtype == UIEventSubtypeRemoteControlPreviousTrack){

[self playBarSelector:self.mUpwardButton];

[self configNowPlayingInfoCenter];

}

}

}

最后切换上一首和下一首要更新锁屏信息,重新调一下configNowPlayingInfoCenter方法

- (void)configNowPlayingInfoCenter {

if (NSClassFromString(@"MPNowPlayingInfoCenter")) {

// 1.播放信息中心

MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];

// 2.初始化播放信息

NSMutableDictionary *info = [NSMutableDictionary dictionary];

// 专辑名称

info[MPMediaItemPropertyAlbumTitle] = self.operatorObject.mExerciseText;

// 歌手

info[MPMediaItemPropertyArtist] = @"雅思听听小组";

// 歌曲名称

info[MPMediaItemPropertyTitle] = [NSString stringWithFormat:@"%@ - %@", self.operatorObject.mTextName, [self.operatorObject.mTitle substringToIndex:9]];

// 设置图片

info[MPMediaItemPropertyArtwork] = [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:@"Default"]];

// 设置持续时间(歌曲的总时间)

info[MPMediaItemPropertyPlaybackDuration] = @(self.mAudioPlayerLong);

// 设置当前播放进度

info[MPNowPlayingInfoPropertyElapsedPlaybackTime] = @(self.mPlayerCurrentTime);

// 3.切换播放信息

center.nowPlayingInfo = info;

}

}

转载于:https://www.cnblogs.com/Milo-CTO/p/4446919.html

iOS音频的后台播放 锁屏相关推荐

  1. iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断)...

    iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断) 2013-12-11 21:13 1416人阅读 评论(0) 收藏 举报  分类: cocoa SDK(139)  ...

  2. iOS 语音合成支持后台和锁屏情况

    最近有一个需求,就是要加入语音合成,并能够在进入后台或者锁屏之后能够播报,现在最流行的应该就是科大讯飞了,功能强大,用起来简单,但是如果只要简单的TTS功能就没有必要集成其他的SDK了,iOS中提供好 ...

  3. iOS音频的后台播放总结

    在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播放 ...

  4. iOS从零开始学习直播之音频2.后台播放和在线播放

    本篇主要讲音频的后台播放和在线播放. 后台播放   上一篇写的工程运行之后程序退至后台,发现运行不了,歌停止了,这显然不行,音乐后台播放是标配啊.今天就来讲一下后台播放. 1.在plist文件里,告诉 ...

  5. 后台或者锁屏播放音乐播放,

    引入依赖的库文件: AudioToolBox.framework MediaPlayer.framework CoreMedia.framework AVFoundation.framework 2. ...

  6. 当自己视频APP,遇到别人音频APP后台播放音频时候

    当别家音乐APP播放音乐,打开自家视频APP(虽然没有播放视频),但音乐app的音频却暂停了(如果是钉钉语音会议这种情况,会自动退出语音会议). 查了资料:这是音频打断处理问题,举个例子:       ...

  7. Android App后台、锁屏运行,百度定位不实时定位。未解问题,求大神指教?

    细节描述: 功能需要实现:App 一直给后台上传经纬度.(正常运行,后台运行,锁屏运行) 问题描述:红米Note 5A. 在A点,App 锁屏,走到B 点,然而在A---B之间一直上传的是A点锁屏前的 ...

  8. iOS 音频录制、播放(本地、网络)

    文章目录一.录音机(AVAudioRecorder)1.简介2.如何使用3.具体实现(开始.暂停.停止.播放 四个功能)4.附件实现demo二.播放音频1.播放本地音频文件(AVAudioPlayer ...

  9. iOS音频开发(录音+播放+剪辑+合成+压缩转码)

    录音: //音频会话 AVAudioSession *session = [AVAudioSession sharedInstance]; NSError *sessionError; /* AVAu ...

最新文章

  1. 助力视障人士,微软等公司捐赠首批AI有声内容
  2. 「AI初识境」深度学习模型中的Normalization,你懂了多少?
  3. python需要php吗-做网站用php还是python
  4. python实现名片管理系统在哪里_python实现名片管理系统项目
  5. python123温度转换-python二级备考 day2
  6. Android Studio 环境搭建参考,jdk10javac命令提示不是内部或外部命令
  7. Java校招面试经验汇总,最终入职阿里
  8. python 批量增加文件前缀_用python批量提取视频中的音频文件
  9. 【caffe-windows】 caffe-master 之图片转换成lmdb or leveldb
  10. 父类构造函数与子类构造函数的关系
  11. 记录:mysql 字符串拼接函数
  12. 计算机操作系统知识点总结(有这一篇就够了!!!)
  13. 张晓龙2018微信公开课
  14. “VBE6EXT.OLB不能被加载”解决方法
  15. java16 新特性
  16. c语言设计温控系统,基于单片机的智能温控系统的设计与实现
  17. 如果编写 if 时不带 else
  18. Python的面向对象,魔术方法、类的三大特征、自省、实例空间、经典类与新式类
  19. Mac安装Tmux的一次纪录
  20. 计算机应用高级课程,Rsoft软件高级课程

热门文章

  1. 计算机网络与云计算研究背景,基于云计算背景下的计算机网络安全研究
  2. android 九宫格封装,Android 九宫格的实现方法
  3. 实现Qt日志功能并输出到文件
  4. 软设考试笔记--数据流图
  5. html中插人视频教程,HTML中插入视频并兼容所有浏览器
  6. 1 计算机主机里面都有些什么东西,电脑主机箱里头的东西都有什么用?
  7. 20211124 自动化学科领域高质量技期刊分级目录(控制理论与控制工程)
  8. Git复习(九)之理解git工作区和暂存区
  9. 多线程《一》线程理论
  10. cxf客户端访问方式