标签: avqueueplayer

AVPlayer在缓冲音频流的开始时"冻结"应用程序

我正在使用一个子类,AVQueuePlayer当我添加新AVPlayerItem的流媒体URL时,应用程序会冻结大约一两秒钟.通过冻结我的意思是它不响应UI上的触摸.此外,如果我已经播放了一首歌曲,然后将另一首歌曲添加到队列中,AVQueuePlayer则会自动开始预加载该歌曲,同时它仍在播放第一首歌曲.这使得应用程序不会响应UI上的触摸两秒钟,就像添加第一首歌但歌曲仍在播放时一样.所以这意味着AVQueuePlayer在主线程中做了一些导致明显"冻结"的事情.

insertItem:afterItem:用来添加我的AVPlayerItem.我测试并确保这是造成延迟的方法.也许它可能是在将它添加到队列AVPlayerItem时被激活的东西AVQueuePlayer.

必须指出我使用Dropbox API v1 beta通过使用此方法调用来获取流式URL:

[[self restClient] loadStreamableURLForFile:metadata.path];
Run Code Online (Sandbox Code Playgroud)

然后,当我收到流URL时,我将其发送到AVQueuePlayer如下:

[self.player insertItem:[AVPlayerItem playerItemWithURL:url] afterItem:nil];
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:我该如何避免这种情况?我应该在没有帮助的情况下自己预加载音频流AVPlayer吗?如果是这样,我该怎么做?

谢谢.

dropbox audio-streaming ios avplayer avqueueplayer

46
推荐指数
3
解决办法
1万
查看次数

跳到AVQueuePlayer上的上一个AVPlayerItem /从队列中播放选定的项目

我正在播放一个电视节目,该节目已经使用AVQueuePlayer切换到我项目的不同章节.我还想提供跳过上一章/下一章的可能性,或者在AVQueuePlayer播放时动态选择不同的章节.

跳过下一个项目与advanceToNextItemAVQueuePlayer提供的没有问题,但是从队列中跳回或播放特定项目没有任何相似之处.

所以我不太确定这里最好的方法是什么:

  1. 使用AVPlayer而不是AVQueuePlayer,调用replaceCurrentItemWithPlayerItem:at actionAtItemEnd来播放nextItem并使用'replaceCurrentItemWithPlayerItem'让用户选择某个章节

要么

  1. 使用'insertItem:afterItem:'和'removeAllItems'重新组织队列或当前播放器

附加信息:我按照它们应该出现在NSArray中的顺序存储不同视频的路径用户应该通过按下代表章节的按钮跳转到某些章节.按钮有标签,也是阵列中相应视频的索引.

希望我能说清楚吗?有这种情况经验的人吗?如果有人知道在哪里买一个提供功能的好的IOS VideoPlayerFramework,我也很感激这个链接.

skip objective-c movieplayer avplayer avqueueplayer

15
推荐指数
1
解决办法
9384
查看次数

使用AVQueuePlayer跳转到之前的更好方法?

AVQueuePlayer在我的应用程序中使用了一个.我有两个滑动手势跳到下一个跳过以前的avplayeritems.现在要跳到下一个我只是在avqueueplayer上调用advanceToNextItem,效果很好.

然而,跳到上一个我正在删除所有项目并将它们添加回前面的前一个视频,这在跳过前几次时非常慢.我怎样才能像打电话一样加快速度advanceToNextItem

我的代码看起来像这样:

func skipToPrevious() {
    queuePlayer.removeAllItems()
    // move the previous playerItem to the front of the list then add them all back in
    for playerItem in playerItems:
        queuePlayer.insertItem(playerItem, afterItem: nil)

}
Run Code Online (Sandbox Code Playgroud)

ios avqueueplayer swift avplayeritem

14
推荐指数
1
解决办法
4934
查看次数

使用AVQueuePlayer时如何在视频之间添加转换?

我正在制作一个视频应用程序,一个接一个地播放大量视频.视频存储在一个AVPlayerItems 数组中.AVQueuePlayer初始化与那些AVPlayerItems和它自动地从该阵列播放视频.

问题是,当它改变播放下一个视频就被卡住了几分之一秒,或者它从一个到另一个过渡的时间创建了一个混蛋.我想改善与某种动画如淡入这一过渡,而更改视频淡出.

我的代码AVQueuePlayer:

AVQueuePlayer *mediaPlayer = [[AVQueuePlayer alloc] initWithItems:arrPlayerItems];
playerLayer=[AVPlayerLayer playerLayerWithPlayer:mediaPlayer];
playerLayer.frame=self.bounds;
playerLayer.videoGravity = AVLayerVideoGravityResizeAspect;
playerLayer.needsDisplayOnBoundsChange = NO;
[self.layer addSublayer:playerLayer];
self.layer.needsDisplayOnBoundsChange = YES;

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(itemPlayEnded:)
                                             name:AVPlayerItemDidPlayToEndTimeNotification
                                           object:[mediaPlayer currentItem]];
Run Code Online (Sandbox Code Playgroud)

我试图创建在过渡的时间一个新层,通过降低其不透明度和增加新的图层的不透明度动画旧层(创建淡出效果所需的渐暗),但可根据需要它无法正常工作.

自定义转换的代码:

-(void)TransitionInVideos {
    if (roundf(CMTimeGetSeconds(mediaPlayer.currentTime))==roundf(CMTimeGetSeconds(mediaPlayer.currentItem.duration))) {
        [self.layer addSublayer:playerLayerTmp];

        //Animation for the transition between videos
        [self performSelector:@selector(FadeIn) withObject:nil afterDelay:0.3];
        [self performSelector:@selector(FadeOut) withObject:nil afterDelay:0.3];
    }
}

-(void)FadeIn {
    CABasicAnimation* fadeAnim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    fadeAnim.fromValue = [NSNumber numberWithFloat:1.0];
    fadeAnim.toValue = [NSNumber numberWithFloat:0.0];
    fadeAnim.duration …
Run Code Online (Sandbox Code Playgroud)

ios avplayer avqueueplayer avplayerlayer

13
推荐指数
1
解决办法
3796
查看次数

从音频流中获取元数据

我想获取文件名,如果可能的话,从AVPlayerItem中的流媒体URL获取专辑图像,我正在使用AVQueuePlayer,但我不知道该怎么做.

另外,如果事实证明我的流媒体网址没有任何元数据,我可以在将元数据NSURL*传递给AVPlayerItem之前将元数据放入我的数据库吗?

谢谢.

metadata audio-streaming ios4 ios avqueueplayer

11
推荐指数
1
解决办法
1万
查看次数

iOS 7上的MPNowPlayingInfoCenter AVPlayer

我正在制作一个可以播放音乐的应用.我正在尝试在锁定屏幕上显示元数据(标题,艺术家和艺术作品图像).

MPNowPlayingInfoCenter似乎很好用MediaPlayer.framework,但我无法想象它可以AVPlayer在iOS 7上运行.

该播放器在后台模式下运行良好感谢AVAudioSession:

AVAudioSession *session = [AVAudioSession sharedInstance];    
[session setCategory:AVAudioSessionCategoryPlayback error:&error];
[session setActive:YES error:&error];
Run Code Online (Sandbox Code Playgroud)

这是我在锁屏上显示元数据的代码(不起作用):

Class playingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter");

if (playingInfoCenter)
{
    NSDictionary *nowPlaying = @{MPMediaItemPropertyArtist: currentTrack.artist,
                                 MPMediaItemPropertyAlbumTitle: currentTrack.title};

    [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:nowPlaying];
}        
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激 !

谢谢你读这个:)

ios avplayer avqueueplayer mpnowplayinginfocenter ios7

11
推荐指数
1
解决办法
4332
查看次数

AVQueuePlayer无间隙播放和冻结

AVQueuePlayer用来播放从URL加载的一系列电影.
我尝试使用AVPlayerItems我需要播放的所有数组来初始化播放器实例.

player = [[AVQueuePlayer queuePlayerWithItems:playerItemsArray]
Run Code Online (Sandbox Code Playgroud)

但在这种情况下AVQueuePlayer,AVPlayerItem在开始播放之前加载每个初始部分.它导致令人沮丧的冻结,应用程序几秒钟内没有响应.

有可能只添加第一个AVPLayerItem到玩家的队列,观察它的状态并且只在第一个到达结束时在队列中添加第二个项目,但是在这种情况下,由于初始化和缓冲第二个项目而导致两个项目的回放之间存在间隙AVPlayerItem.

有没有办法在没有冻结的情况下组织几个视频的无间隙播放?
我应该为此目的使用其他玩家吗?

提前致谢.

objective-c avfoundation ios avqueueplayer

10
推荐指数
1
解决办法
9178
查看次数

最后重播AVQueuePlayer中的项目

我需要在我的内容中创建类似无限循环的东西AVQueuePlayer.特别是,我要重播整个NSArrayAVPlayerItem一度的最后一个组件播放完毕.

我必须承认,我实际上并不知道如何实现这一点,并希望你能给我一些线索.

iphone avfoundation ios avplayer avqueueplayer

8
推荐指数
1
解决办法
6008
查看次数

当网络变为活动状态(并准备好播放)时,如何从AVQueuePlayer/AVPlayerItem获取回调?

我有一个AVQueuePlayer基于音频流的播放器需要在后台运行.玩家需要继续运行,直到完成所有列表的播放.当然,如果网络连接变坏,它将不得不暂停,但它应该在网络连接恢复时自动恢复.

为此,我正在监控

  • AVPlayerItem.status
  • AVPlayerItem.playbackLikelyToKeepUp
  • AVPlayer.currentItem
  • AVPlayer.status
  • AVPlayer.error

使用KVO.例如,如果网络连接从临时错误恢复,我期望currentAVPlayerItem.status变为AVPlayerStatusItemReadyToPlay,将报告给我的播放器,我可以[AVQueuePlayer play]在那时发布.

这种机制(逻辑)似乎在某些情况下起作用,但在离线环境中经常AVPlayerItem.status变为AVPlayerItemStatusFailed,哪个项目AVQueuePlayer似乎自动跳过.结果,队列将变为空,并且不能从中接收回调AVPlayerItem.

我希望,在某些属性AVPlayer,当网络连接变坏/恢复,但似乎没有任何改变(会改变status,error等等).

显然我可以监控Reachability,但当应用程序在后台运行时,这不起作用.

我怎么知道网络何时重新启动并且AVQueuePlayer在这种情况下可以再次播放?

我可能只是这个地区的新手.如果有人能够让我大致了解他/她如何AVQueuePlayer在不被临时网络连接问题完全阻止的情况下实现持续的游戏体验,那将是一个非常棒的帮助!

iphone audio ios avplayer avqueueplayer

8
推荐指数
1
解决办法
1045
查看次数

AVQueuePlayer/AVPlayer加载通知?

我有一个AVQueuePlayer(显然可以扩展AVPlayer)加载流媒体音频的播放列表.流媒体工作正常,但我想有一个活动指示器来显示用户音频正在加载.麻烦的是,我似乎无法在AVQueuePlayer(或AVPlayer)中找到任何此类通知,指示音频缓冲区何时完成加载/准备播放(似乎也没有委托方法).有什么想法吗?

objective-c avfoundation ios avplayer avqueueplayer

7
推荐指数
1
解决办法
1万
查看次数