iOS AvPlayer AvAudioPlayer音频的后台播放问题

iOS 分解视频中所在帧 hihi勇敢的小伙伴儿们,大家好~前言抖音很火,大家应该都知道的哈,这个产品可以说是做的非常成功了,这样一款当下最火的App,作为一名开发者,必须要学习一下人家的产品设计,其中最先被关注的是抖音小视频的封面动图效果如何实现,我自己测试得到的这些小视频封面是从服务器获取的图片,但是我也想自己自己试试能不能实现,所以有了这篇博客。如图所示,为视频内提取的帧动画(侵删)。Demo地址:视频截取帧 有需要... 阅读详情
iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了。如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,AvPlayer播放的话,要实现完美的后台音频播放,依据app的功能需要,可能需要实现几个关键的功能。

首先,播放音频之前先要设置AVAudioSession模式,通常只用来播放的App可以设为AVAudioSessionCategoryPlayback即可。模式意义及其他模式请参考文档。

  1. AVAudioSession *session = [AVAudioSession sharedInstance];  
  2. [session setCategory:AVAudioSessionCategoryPlayback error:nil];  
  3. [session setActive:YES error:nil];  

1。通知OS该app支持background audio。缺省情况下,当按下home键时,当前正在运行的程序被suspend,状态从active变成in-active,也就是说如果正在播放音频,按下HOME后就会停止。这里需要让app在按在HOME后,转到后台运行而非被suspend,解决办法是在程序的-info.plist中增加required background modes这个key项,并选择App plays audio这个value项。



2。现在按下HOME键后,程序退到后台,但是声音仍在播放。但是如果要实现播放列表的依次播放、循环播放,即放完一首后自动切换到下一首,问题来了,当App在后台放完一首后,就会停下来。原因是在后台运行时,一旦声音停下来,程序也随之suspend,因此在切换文件加载的间隙,程序就会被suspend。曾经有山寨的解决办法是专门起一个player的实例连续不停的放同一无声音片断,阻止程序被suspend。这里提供的方法是通过申请后台taskID达到后台切换播放文件的功能。

即声明后台task id,并通过beginBackgroundTaskWithExpirationHandler将App设为后台Task,达到持续后台运行的目的。我们知道一般情况下,按HOME将程序送到后台,可以有5或10秒时间可以进行一些收尾工作,具体时间[[UIApplication sharedApplication] backgroundTimeRemaining]返回值。超时后app会被suspend,现在要做的就是用[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]开始后台任务,可以将后台运行超时时间长时间的延长,具体延长多少时间还是见返回值,总之对于放段时间音乐应该够了。另一个问题是每个开始的后台任务,都必须用endBackgroundTask来结束。 因此,在每次开始播放后启动新的后台任务,同时结束上一个后台任务:

首先,要在viewdidload中

  1. [UIApplication sharedApplication] beginReceivingRemoteControlEvents];  
否则,无法切换到下一首,接下来
  1. UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid;  
  2.       
  3. [avPlayer play];  
  4. newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];  
  5. if (newTaskId != UIBackgroundTaskInvalid && oldTaskId != UIBackgroundTaskInvalid) {  
  6.      [[UIApplication sharedApplication] endBackgroundTask: oldTaskId];}   
  7. oldTaskId = newTaskId;  

当然,还有更方便的办法就是在resignActive时beginBackgroundTaskWithExpirationHandler:并在BecomeActive中endBackgroundTask: 


3。我们知道,ipod播放程序在后台时,双击HOME键,会有个控制界面,可以对它进行播放控制。

如果您想让您的app可以像ipod一样在后台也可以方便的通过双击HOME键来控制,就要用到远程控制事件了。

首先在viewdidload等初始化的地方声明App接收远程控制事件,并在相应地方结束声明

  1. - (void) viewWillAppear:(BOOL)animated  
  2. {  
  3. [super viewWillAppear:animated];  
  4. [UIApplication sharedApplication] beginReceivingRemoteControlEvents];  
  5. [self becomeFirstResponder];  
  6. }  
  7.   
  8. - (void) viewWillDisappear:(BOOL)animated  
  9. {  
  10. [super viewWillDisappear:animated];  
  11. [UIApplication sharedApplication] endReceivingRemoteControlEvents];  
  12. [self resignFirstResponder];  
  13. }  
定义
  1. - (BOOL)canBecomeFirstResponder  
  2. {  
  3.        return YES;  
  4. }  
最后定义 remoteControlReceivedWithEvent,处理具体的播放、暂停、前进、后退等具体事件
  1. - (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent {      
  2.     if (receivedEvent.type == UIEventTypeRemoteControl) {  
  3.   
  4.         switch (receivedEvent.subtype) {  
  5.   
  6.             case UIEventSubtypeRemoteControlTogglePlayPause:  
  7.                 [self playButtonPressed:playButton];  
  8.                 [self testing];  
  9.                 break;  
  10.   
  11.             case UIEventSubtypeRemoteControlPreviousTrack:  
  12.                 [self rewButtonReleased:(UIButton *)rewButton];  
  13.                 break;  
  14.   
  15.             case UIEventSubtypeRemoteControlNextTrack:  
  16.                 [self ffwButtonReleased:(UIButton *)ffwButton];  
  17.                 break;  
  18.   
  19.             default:  
  20.                 break;  
  21.         }  
  22.     }  
  23. }  
4. 至此,您有播放App已经相当完美了,还有最后一个问题,那就是当用户使用耳机时,问题又来了。系统默认当插入耳机时,正在播放的声音不中断,直接切换到耳机播放,而当拔出耳机时,播放停止。如果这种行为满足您的要求,那OK,否则您就需要进一步研究耳机检测和声音路由切换的问题
短视频App开发方案IOS架构 随着社交媒体的兴起和短视频的日益普及,开发短视频App已成为一个赚钱的好主意。iOS开发人员在创建这些应用程序方面非常有需求,因为这需要一组独特的功能和设计。在本文中,我们将探讨在iOS上开发短视频App的不同方法,并提供源代码的演示。 阅读详情

相关推荐

iOS音频播放问题:后台播放与AvPlayer和AvAudioPlayer

在iOS开发中,使用AvPlayer和AvAudioPlayer进行音频播放是常见的做法。然而,当我们希望在应用程序进入后台时继续播放音频时,可能会遇到一些问题。本文将介绍如何实现后台播放音频的功能,并提供相应的源代码示例。要在后台播放音频,我们需要进行一些设置和配置。首先,我们需要在应用程序的Info.plist文件中添加一些键值对。在Info.plist文件中,右键单击并选择"Open As" > “Source Code”,然后在标签内添加以下代码:

HackCyberX的博客 676

2025软考网络工程师--基础知识精讲视频

对软考网络工程师教材进行了详细解析,通过对考查知识点的细致讲解,让考生掌握解题思路和方法,做到举一反三,事半功倍。小任老师帮你把握考试重点,用短的时间,让你学到应该掌握的软考网络工程师内容。

佳博3120TU驱动及软件.rar

佳博3120TU驱动

血腥大地-第二季(资源破解与管理)

课程继承游戏内容1.主要完成游戏资源的获取,从原血腥大地游戏中获取(不涉及任何商业利益,不能将游戏资源用于其他商业游戏).2.游戏资源的整理以及优化3.游戏纹理资源打包工具的制作4.游戏字体资源打包制作工具

cantest软件,报文发送,接收

CANTest官方版是一款专业的周立功can卡的测试调试软件。CANTest最新版能够帮助用户进行CAN数据的收发,以及监测CAN总线上的数据,适用于CANalyst-II双通道。CANTest软件还是SBCAN-I/II 智能CAN接口卡配套驱动程序,是周立功CAN总线设备测试的必不可少的工具。 一、接收滤波设置 接收滤波设置,这里以设备类型为“USBCAN2”为例,点击“滤波设置”弹出对话框,在“滤波模式选择”中建议选择前两个——接收单个ID,选择后在邮编输入要滤波的ID,点击提交并确定即可对指定的ID进行滤波,即只接受指定ID的数据。此处滤波设置无需停止系统,此功能方便对指定ID的数据进行监测。 二、普通发送模式 高级操作可直接在发送列表设置数据帧,发送列表最多可设置100条数据,勾选每条数据左边勾可以将这条数据添加到发送列表;右边可以设置发送方式,包括:正常发送、单次发送、自发自收、单次自发自收,4中发送方式;发送次数及每次发送间隔,可设置循环发送次数及间隔时间;每帧发送间隔可设置发送列表中多帧数据数据每帧的间隔时间。此功能极其方便对需

xxxx.rar_tube24XXXX_数码管动态显示

数码管显示一般分静态显示及动态显示两种驱动方式,静态显示占用口线比较多,本文介绍的是如何实现数码管动态显示,应该说数码管动态显示是单片机外部指令输出的重要途径,因此如何设计数码管以及数码管的工作原理、数码管显示的方法、数码管显示的抗干扰设计等在单片机系统设计中占有重要地位。这个例子在系统硬件的基础上设计了软件查询程序、软件延时程序(防止干扰),大致讲述了一种数码管动态显示的工作原理与读取方式。

网站源码YMYS009强大专业的x站在线视频网站.zip

网站源码

电脑手机端网页捕鱼游戏小游戏源码

力港网络独家精心力作,精美的画面,华丽的炮弹射击!五大特色系统:"天天现金大奖、宝藏副本、美人鱼剧情、荣誉系统、互动养鱼。在原有版本的基础上又增添了剧情模式,紧凑新颖的剧情为玩家打造了一个童话般的海底世界,可爱又美丽的人鱼MM将与你一起征战海岛!精美的原画抢先曝光,我们一起来欣赏这美轮美奂的海底世界吧!无需下载,打开网页即玩,占用超低网速即可轻松体验捕鱼完美流畅版,多种鱼 群华丽摆陈,各类特色神秘武器,伴随着华丽打击,让你的激情随意喷放!加入游戏即可多人在线共同捕鱼,伴随着华丽打击音效,捕鱼激情随意喷放!与大家一起共享捕鱼带来的欢乐时光。 游戏画面:捕鱼假日网页版是原汁原味的深海狩猎场景再现,整个画面非常清新自然,并且无打斗血腥场面,绿色健康,适合4岁以上各年龄的玩家。另外在色彩搭配和明暗对比方面都做的相当出色,海洋背景栩栩如生,鱼类动态也非常逼真,给玩家一种与海洋亲密接触的感觉。游戏中进行撒网捕鱼时会有金币粒子和炮弹粒子效果,五彩弹花把深海点缀的分外美丽,捕鱼之余,心情也不错,看来开发商在这个方面下了不少功夫。

上一篇: iOS 消息推送原理及实现总结
下一篇: Background Modes in iOS Tutorial
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值