AVPlayer不能在渐进式下载和流媒体之间切换。

6

我有一个应用程序处理流媒体视频。从一个.m3u8播放列表开始,它创建了一个AVAssets数组,并通过翻转它们来播放。

[player replaceCurrentItemWithPlayerItem:[AVPlayerItem playerItemWithAsset:[assetItems objectAtIndex:index]]]

这个工作很顺利,但在此之前,我希望使用渐进式下载播放一个短的mp4视频。我使用以下代码加载AVPlayer:

AVAsset *prerollAsset = [AVAsset assetWithURL:prerollURL];
[player replaceCurrentItemWithPlayerItem:[AVPlayerItem playerItemWithAsset:prerollAsset]];

它可以播放,但当我像之前一样继续使用流媒体视频时,AVPlayerStatusFailed状态出现了错误,AVPlayerItem中的错误为The operation could not be completed

为了使其正常工作,我需要为(渐进式下载)预加载创建一个AVPlayer对象,然后再创建一个全新的AVPlayer对象来开始播放流媒体视频。

单个AVPlayer实例是否无法播放紧随其后的流媒体视频?或者还有其他我做错的地方吗?


1
我遇到了同样的问题。在MPMoviePlayerController中,有一个可以设置的movieSourceType属性,但在AVPlayer或AVPlayerItem中没有。 - Kent Nguyen
这个 bug 在 iOS7.1 SDK 上仍然存在。 - Taher Saeed
@KentNguyen 有点晚了,但你可以阅读https://developer.apple.com/library/mac/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/02_Playback.html,查看部分**创建和准备HTTP直播流以进行播放**。 - onmyway133
@onmyway133 请注意,我们经常无法控制所要播放内容的格式;例如,流媒体内容与渐进式下载广告交替播放。 - coco
AVFoundationErrorDomain Code=-11800,伴随着OSStatus错误-12783 — 你是否遇到了同样的问题?如果是,我会把解决方法留在这里,以便帮助其他人节省一天的谷歌搜索时间。 - Gleb A.
@GlebA。切换从MP3到HLS时,我遇到了AVErrorUnknown (-11800)错误,并且有NSUnderlyingError (NSOSStatusErrorDomain,code = -12783)。切换从HLS到MP3时没有NSUnderlyingError。感谢你发布这些数字,否则我不会发现这个问题。 :-) - Andrey Tarantsov
1个回答

2

这个bug是已知问题,在下一个iOS的主要版本中据称已经修复。

在此期间,创建一个新的AVPlayer对象是唯一已知的解决方法。


1
根据WWDC14上的苹果工程师们所说,iOS 8仍然存在这个问题。他们还提到这个问题并不是他们优先解决的。回到解决方法吧! - coco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接