开发音乐播放器时遇到的问题:

1,当在使用其他音乐播放软件播放音乐时,进入APP,未打开音乐播放模块,此时外面第三方音乐播放器停止播放。
需求:使用第三方播放音乐软件时,此时进入APP浏览其他内容,如果不打开音乐播放模块,则不停止第三方音乐软件的使用。
同类产品测试:其他厂商音乐播放软件,发现从网易云音乐进入到QQ音乐,会暂停,但是使用斗鱼时发现,从其他音乐播放软件进入,未关闭。
问题原因:查看代码文档,发现关键在于这一行代码[[AVAudioSession sharedInstance] setActive:YES error:nil]; 它控制着音乐播放器的激活,执行时机过早,导致其它第三方音乐软件被关闭
解决办法:触发APP内音乐模块播放功能,才调用上面激活代码

2,播放网络音乐,发现置于后台的情况下,一会音乐自己关闭,采用如下办法:申请了一个后台任务ID
// 下面的代码主要是为了防止APP进入后台后,申请一个后台ID,防止后台播放音乐被暂停

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
UIApplication *app =[UIApplication sharedApplication];

__block UIBackgroundTaskIdentifier bgTask;

bgTask= [app beginBackgroundTaskWithExpirationHandler:^{

dispatch_async(dispatch_get_main_queue(),^{
if(bgTask !=UIBackgroundTaskInvalid) {
bgTask=UIBackgroundTaskInvalid;
}
});

}];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

dispatch_async(dispatch_get_main_queue(),^{

if(bgTask !=UIBackgroundTaskInvalid) {
bgTask=UIBackgroundTaskInvalid;
}
});
})

3,使用AVPlayer播放一个远程mp3地址,监听playItem的status发现当已经准备好播放时,调用AVPlayer的play方法播放,需要等待好长时间才能播放。解决办法:

1
2
3
4
5
6
7
8
9
- (void)play {
self.status = KKMusicStreamerStatusPlaying;
double version = [UIDevice currentDevice].systemVersion.doubleValue;
if (version >= 10.0) {
[self.player playImmediatelyAtRate:1.0];
}else {
[self.player play];
}
}

建议文章:

  1. 《MP3缓冲2MB才开始播放的解决方法》
  2. 《实现输出h264直播流的rtmp服务器》
  3. 《iOS音频研究》
  4. 《iOS音频开发(录音+播放+剪辑+合成+压缩转码)》
  5. 《iOS视频开发经验》
  6. 《iOS 系统中,H.264 视频流可以硬件解码吗? 具体如何实现?》
  7. 《iOS视频边下边播–缓存播放数据流》
  8. 《iOS 继续播放或暂时其他app的背景音乐》
  9. 《利用NSURLProtocol和本地代理实现在线视频边播放边缓存》
  10. 《Audio Session 编程指南(一)》
  11. 《HLS-iOS视频播放服务架构深入探究(一)》
  12. 《最近市面上很火爆的17、花椒、虎牙直播、periscope的直播功能,是自研还是第三方直播SDK服务?》
  13. 《HTTP Live Streaming直播(iOS直播)技术分析与实现》
  14. 《[总结]FFMPEG视音频编解码零基础学习方法》
  15. 《IOS使用ijkPlayer》
  16. 《iOS弹幕(源码)实现原理解析》