Tag: avqueueplayer

使iOS Audio Player变得简单

因为互联网上的点点滴滴令人费解! 任务:创建没有外部库的音频播放器(差不多) 我搜寻了已知的google空间的长度,以查找有关使用Swift和基本功能制作音频播放器的所有可用信息。 简单吧? 事实证明……不多。 大多数StackOverflow(从现在开始为SO)处理过程的一部分,通常分为Obj-C,Swift-2,Swift-3和一小部分Swift-4。 文章还受Swift版本控制的困扰,或者缺少它,并且完全用Obj-C编写。 插件和库也已过时,用Obj-C编写或未维护。 第一个子任务:创建一个AudioQueue并播放一个曲目。 因此,我们开始使用AVFramework创建一个简单的AudioQueue 主要故事任务:建立一个AudioPlayer类 为了做到这一点,我们首先需要做两件事。 如我们所见,为了将项目添加到AVQueuePlayer我们必须将它们转换为AVPlayerItem并且要做到这一点,我们必须首先将它们转换为AVAsset 。 但是这里有个问题, AVAsset在定义AVAsset开始加载,这意味着我们不想立即添加它,因为它AVAsset无法播放,我们需要先加载它,然后将其添加到AVQueuePlayer 。 这里还有第二个陷阱,如果我们按照上面描述的路径进行操作,我们会将异步功能添加到队列中,并且很可能肯定不会以我们希望它们添加的顺序添加内容。 我们做什么? 抢救同步队列! 完成加载后,曲目将被一一添加。 循环每个.mp3 url->使它成为队列中的资产->加载资产(异步)时->将其转换为AVPlayerItem->队列继续下一个.mp3 url 那么什么时候知道所有物品都准备好了呢? 很简单(不是,但是确实如此) 在上面的代码中,我们缺少AVItemPool参考。 这里是: 如果您有任何疑问或更正,请在评论中打上我一行,希望对您有用。 请享用!

播放/暂停/停止本地存储的多个audio文件

我有20个音轨,存储在我的项目本地。 我想按顺序播放所有文件。 为此,我使用了AVQueuePlayer。 请检查下面的代码以供参考。 宣言 :- @interface ViewController () { AVAudioPlayer *player; NSMutableArray *arrPlayData; AVPlayerItem *item; } @property (nonatomic, retain) AVQueuePlayer *queuePlayer; button点击如下, -(IBAction)click_Play:(id)sender { for (int j = 0; j < arrPlayData.count; j++) { path =[[NSBundle mainBundle] pathForResource:[[arrPlayData objectAtIndex:j] valueForKey:@"AudioName"] ofType:@"wav"]; item = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:path]]; if (_queuePlayer == nil) { _queuePlayer = […]

如何在AVPlayer中使用AVQueuePlayer

目前我正在使用下面的代码播放歌曲 playerItem = [AVPlayerItem playerItemWithURL:[song valueForProperty:MPMediaItemPropertyAssetURL]]; [_avPlayer replaceCurrentItemWithPlayerItem:playerItem]; 在这里我使用AVPlayer播放audio文件,但我的要求是需要连续播放歌曲组(NSArray)(目前播放器停止后播放一首歌曲)。我听说AVQueuePlayer,但不知道如何使用avplayer如果有人知道这一点,请帮助我

在AVQueuePlayer中检测当前项目并知道它何时更改?

我目前有一个AVQueuePlayer按顺序播放几个.aif文件。 当它通过每个audio时,我想要执行与特定声音相关的操作(例如,更改imageview的uiimage)。 我的问题是正确设置NSNotification。 我已经设置它通知我,当队列完成最后一个对象,但我无法收到每个当前项目的通知。 这是我有什么: //Setting Up My Queue List yellowVoice = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/YellowVoice.aif", [[NSBundle mainBundle] resourcePath]]]]; orangeVoice = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/OrangeVoice.aif", [[NSBundle mainBundle] resourcePath]]]]; redVoice = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/RedVoice.aif", [[NSBundle mainBundle] resourcePath]]]]; pinkVoice = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/PinkVoice.aif", [[NSBundle mainBundle] resourcePath]]]]; NSArray *soundEmotions = [NSArray arrayWithObjects:yellowVoice, […]

iOS xcode4 AVQueuePlayer不能播放声音

我试图在iPhone4上使用AVQueuePlayer播放.m4a声音文件,但是没有声音。 如果我用相同的文件尝试AudioServicesPlaySystemSound,所有的作品没关系。 这是代码。 (AVFoundation framework is installed.) #import <AVFoundation/AVFoundation.h> -(void) play_sound_file: (NSString *) sound_file_m4a { printf("\n play_sound_file 1: '%s' ", [sound_file_m4a UTF8String] ); AVPlayerItem *sound_file = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:[[NSBundle mainBundle] pathForResource:sound_file_m4a ofType:@"m4a"]]]; AVQueuePlayer *player = [AVQueuePlayer queuePlayerWithItems:[NSArray arrayWithObjects:sound_file, nil]]; [player play]; return; } 最新的代码截至2012年8月28日………..(注意:两个声音文件均可与AudioServicesPlaySystemSound配合使用) AVPlayerItem *sound_file1 = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:[[NSString alloc] […]

如何从下一首歌曲开始,或者在播放AVPlayer的过程中认出一首歌曲已经完成?

如何用AVPlayer立即启动下一首歌曲? 我有从MPMediaItemCollection iPod库中select歌曲的集合。 现在我怎样才能使用AVPlayer的歌曲列表一一播放?

从audiostream获取元数据

我想从AVQueuePlayer播放的AVPlayerItem中的stream式传输URL获取文件名称(如果可能的话),但我不知道如何去做这件事。 此外,如果事实certificate,我的stream媒体url没有任何元数据,我可以把元数据放在我的NSURL*之前传递给AVPlayerItem? 谢谢。

AVPlayer在开始缓冲audiostream时“冻结”应用程序

我正在使用AVQueuePlayer一个子类,当我用streamURL添加新的AVPlayerItem ,应用程序冻结了一两秒钟。 通过冻结我的意思是,它不响应用户界面的触摸。 另外,如果我已经播放了一首歌曲,然后再添加一首歌曲, AVQueuePlayer自动开始预加载该歌曲,同时它仍然是第一个播放歌曲。 这使得应用程序不响应在界面上触摸两秒钟,就像添加第一首歌曲但歌曲仍在播放一样。 所以这意味着AVQueuePlayer正在主线程中做某些事情,导致明显的“冻结”。 我正在使用insertItem:afterItem:添加我的AVPlayerItem 。 我testing了一下,确定这是造成延迟的方法。 也许这可能是AVPlayerItem在将其添加到队列时被AVQueuePlayer激活时所做的事情。 必须指出的是,我正在使用Dropbox API v1testing版通过使用此方法调用来获取stream式URL: [[self restClient] loadStreamableURLForFile:metadata.path]; 然后,当我收到streamURL,我发送到AVQueuePlayer如下: [self.player insertItem:[AVPlayerItem playerItemWithURL:url] afterItem:nil]; 所以我的问题是:我如何避免这种情况? 我应该在没有AVPlayer帮助的情况下自行预先加载audiostream吗? 如果是这样,我该怎么做? 谢谢。

AVQueuePlayer播放没有间隙和冻结

我使用AVQueuePlayer播放从URL加载的电影序列。 我尝试使用所有需要播放的AVPlayerItems数组初始化播放器实例。 player = [[AVQueuePlayer queuePlayerWithItems:playerItemsArray] 但在这种情况下, AVQueuePlayer会在开始播放之前加载每个AVPlayerItem一些初始部分。 它会导致令人沮丧的冻结,并且应用程序在几秒钟内不响应。 有可能只添加第一个AVPLayerItem到播放器的队列中,观察它的状态,并且只在第一个播放到达结束时才在队列中添加第二个播放项,但在这种情况下,由第二个AVPlayerItem初始化和缓冲。 有没有办法组织无缝播放的几个video没有冻结? 我是否应该使用其他玩家来达到这个目的? 提前致谢。