Tag: avplayer

AVPlayer和MPMoviePlayerController的区别

我正在开发一个需要播放video的iPhone应用程序。 到目前为止,我了解到至less有两个API可以实现这个function。 AVPlayer和MPMoviePlayerController 。 主要区别是什么?

检查AVPlayer的播放状态

有没有办法知道AVPlayer播放是否已经停止或到达最后?

如何减lessiOS AVPlayer启动延迟

请注意,对于以下问题:设备上的所有资产都是本地的 – 不会发生networkingstream式传输。 video包含音轨。 我正在开发一个iOS应用程序,要求播放video文件的延迟时间最短,以启动video片段。 不幸的是,我们不知道下一个具体的video剪辑,直到我们真的需要启动它。 具体来说:当一个video剪辑正在播放时,我们将知道下一个(大致)10个video剪辑是什么,但是我们不知道到底是哪一个,直到“立即”播放下一个剪辑。 我所看到的实际启动延迟是,在video播放器上调用addBoundaryTimeObserverForTimes ,时间为1毫秒,以查看video实际开始播放的时间,并将该时间戳的差异与第一位在指示哪个资产开始播放的代码中。 从我目前看到的情况来看,我发现使用AVAsset加载组合,然后创build一个AVPlayerItem ,然后在我调用play之前等待AVPlayerStatusReadyToPlay ,往往需要1到3秒开始剪辑。 我已经切换到我认为是大致相同的:调用[AVPlayerItem playerItemWithURL:]并等待AVPlayerItemStatusReadyToPlay播放。 大致相同的performance。 我注意到的一件事情是,第一个AVPlayer项目负载比其他的慢。 似乎有一个想法是在试图播放第一个video之前,用一个短暂的/空的资源预先播放AVPlayer,这可能是一个很好的普遍做法。 [ 第一次播放声音时,AVAudioPlayer启动缓慢 我很乐意尽可能地减lessvideo的开始时间,并且有一些想要尝试的事情,但是希望有人能够提供帮助。 更新:下面的想法7,实现了大约500毫秒的开关时间。 这是一个改进,但它更好地得到这个更快。 想法1:使用N AVPlayers(将不起作用) 使用〜10 AVPPlayer对象,并开始和暂停所有〜10剪辑,一旦我们知道我们真的需要哪一个,切换到,并取消暂停正确的AVPlayer ,并重新开始下一个周期。 我不认为这是有效的,因为我已经读过,在iOS中大约有4个主动AVPlayer's限制。 有人在StackOverflow上询问了这个问题,并发现了AVPlayer的限制: 快速切换video-using-avfoundation 想法2:使用AVQueuePlayer(不起作用) 我不相信把10个AVPlayerItems放到一个AVQueuePlayer可以预先加载它们以便无缝启动。 AVQueuePlayer是一个队列,我认为这只能使队列中的下一个video准备好立即播放。 我不知道我们想要播放的10个video中的哪一个,直到开始播放。 IOS-avplayervideo预载 想法3:在后台加载,播放和保留AVPlayerItems (不是100%肯定 – 但看起来不太好) 我正在看是否有任何好处,加载和播放每个video剪辑的第一秒在背景(抑制video和audio输出),并保持每个AVPlayerItem的引用,当我们知道哪个项目需要播放真实的,交换一个,并交换背景AVPlayer与活动的一个。 冲洗并重复。 理论上说,最近播放的AVPlayer/AVPlayerItem可能仍然保存一些准备好的资源,这将使后续播放更快。 到目前为止,我还没有看到这方面的好处,但我可能没有正确的AVPlayerLayer设置为背景。 我怀疑这会真正改善我见过的事情。 想法4:使用不同的文件格式 – 也许加载速度更快? 我目前正在使用.m4v(video – MPEG4)H.264格式。 H.264有很多不同的编解码器选项,所以有些选项可能比其他选项更快。 我发现使用更高级的设置可以缩小文件的大小,增加查找时间,但还没有find任何其他方法。 想法5:无损video格式+ AVQueuePlayer的组合 如果存在快速加载的video格式,但是可能文件大小是疯狂的,则可能有一个想法是预先准备每个video剪辑的前10秒,其版本臃肿但加载速度更快,但是返回用H.264编码的资产。 […]

避免video开始和结束时的模糊(甚至在使用setPreferredVideoStabilizationMode:AVCaptureVideoStabilizationModeAuto之后)?

我们在使用setPreferredVideoStabilizationMode:AVCaptureVideoStabilizationModeAuto同时在iOS上捕捉video,但是video在开始和结束时有时会变得模糊(尽pipe在中间很好),这是非常有问题的,因为我们把第一帧作为静止图像以便在不切换相机模式的情况下启用video和照片function)。 将设备平放在桌面上可以消除所有模糊现象,因此整个video都非常清晰。 这表明它与video稳定有关,但是还有其他属性可以设置吗? locking焦点模式的问题吗? 其他疑难解答提示? 以下是PBJVision的video捕获function,我们使用这个function: – (void)startVideoCapture { if (![self _canSessionCaptureWithOutput:_currentOutput] || _cameraMode != PBJCameraModeVideo) { [self _failVideoCaptureWithErrorCode:PBJVisionErrorSessionFailed]; DLog(@"session is not setup properly for capture"); return; } DLog(@"starting video capture"); [self _enqueueBlockOnCaptureVideoQueue:^{ if (_flags.recording || _flags.paused) return; NSString *guid = [[NSUUID new] UUIDString]; NSString *outputFile = [NSString stringWithFormat:@"video_%@.mp4", guid]; if ([_delegate respondsToSelector:@selector(vision:willStartVideoCaptureToFile:)]) { outputFile […]

为AVQueuePlayer预缓冲

有谁知道AVQueuePlayer是否开始caching下一个AVPlayerItem当前项目即将完成播放? 我知道在文档中没有什么可以提出这个build议,我主要问的是,如果有人观察到这种行为或不。

AVPlayerItem失败,AVStatusFailed和错误代码“无法解码”

我遇到了一个奇怪的问题,我希望有人可以帮忙。 在我的iOS应用程序中,我通过将来自用户照片库的video与应用程序包中的audio文件相结合,使用MutableComposition创build一个带有自定义配乐的video。 然后,我使用AVPlayer和AVPlayerItem使用我制作的自定义video播放器将video播放回给用户。 每次创build一个新的作品,资产,玩家和作品都被清除,释放,它基本上从干净的初始状态开始。 所有的工作正常,直到完全成功的4个video创build这种方式后,每隔一个尝试创build播放器失败,错误Cannot Decode 。 没有关系,如果它正在重新创build相同的video,没有关系的video或audio文件的大小/长度,它总是在第五次尝试,就像发条一样完全失败。 一旦失败,它将永远失败! 这很奇怪,因为它只是解码了同一个video四次没有问题,所以突然失败了? 所以,如果有人有线索,请让我知道。

如何让我的AVPlayer在应用程序在后台播放?

我已经完成了我的功课…一直在这里阅读,文档,谷歌search,stackoverflowing …但仍然没有运气让我的声音棒,当用户使应用程序进入后台。 到目前为止我所做的:将UIBackgroundModes,audio添加到plist文件。 首先这个代码: radioAudio = [[AVAudioSession alloc] init]; [radioAudio setCategory:AVAudioSessionCategoryPlayback error:nil]; [radioAudio setActive:YES error:nil]; 那么这个: NSString *radioURL = @"http://xxx.xxx.xxx/radio.m3u"; radioPlayer = [[AVPlayer playerWithURL:[NSURL URLWithString:radioURL]] retain]; 但只要用户点击主页button,我的声音就会消失。 我也发现这个,但没有添加cuase一些我读过的东西说这是不需要的; newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; if (newTaskId != UIBackgroundTaskInvalid && bgTaskId != UIBackgroundTaskInvalid) [[UIApplication sharedApplication] endBackgroundTask: bgTaskId]; bgTaskId = newTaskId; 现在我不知道该怎么去让我的AVPlayer让广播歌曲,而用户在电话上做其他的东西。 我正在用4.2testingiPhone 4。 build设4.0。 任何人有什么build议我应该做的?

在这个区块强烈地捕获自我很可能会导致一个保留周期

我怎样才能避免在xcode这个警告。 这里是代码片段: [player(AVPlayer object) addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(0.1, 100) queue:nil usingBlock:^(CMTime time) { current+=1; if(current==60) { min+=(current/60); current = 0; } [timerDisp(UILabel) setText:[NSString stringWithFormat:@"%02d:%02d",min,current]];///warning occurs in this line }];

使用AVFoundation AVPlayer播放video?

在AVFoundation中有一个相对简单的循环播放video的方法吗? 我创build了我的AVPlayer和AVPlayerLayer,如下所示: avPlayer = [[AVPlayer playerWithURL:videoUrl] retain]; avPlayerLayer = [[AVPlayerLayer playerLayerWithPlayer:avPlayer] retain]; avPlayerLayer.frame = contentView.layer.bounds; [contentView.layer addSublayer: avPlayerLayer]; 然后我播放我的video: [avPlayer play]; video播放正常,但最后停止。 使用MPMoviePlayerController,您只需将其repeatMode属性设置为正确的值即可。 在AVPlayer上似乎没有类似的属性。 电影结束的时候,似乎还没有一个callback可以告诉我,所以我可以寻求开始,并再次播放。 我没有使用MPMoviePlayerController,因为它有一些严重的限制。 我希望能够一次播放多个videostream。