使用AVURLAsset时遇到问题。
NSString * const kContentURL = @
"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8";
...
NSURL *contentURL = [NSURL URLWithString:kContentURL];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:contentURL
options:nil];
[asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:tracksKey]
completionHandler:^{
...
NSError *error = nil;
AVKeyValueStatus status = [asset statusOfValueForKey:tracksKey
error:&error];
...
}
在完成块中,状态为AVKeyValueStatusFailed,错误消息为“无法打开”。我见过的所有例子都使用本地文件,所以使用远程文件可能有问题......
此致 昆汀
答案 0 :(得分:6)
您无法直接为Apple Live AV Foundation Programming Guide中所述的HTTP Live流创建AVURLAsset
。
您必须使用流网址创建AVPlayerItem
并使用它实例化AVPlayer
AVPlayerItem *pItem = [AVPlayerItem playerItemWithURL:theStreamURL];
AVPlayer *player = [AVPlayer playerWithPlayerItem:pItem];
如果您需要访问后面的AVURLAsset
,可以按照以下步骤操作。
步骤1 /注册玩家项目的status
属性的更改
[playerItem addObserver:self forKeyPath:@"status" options:0 context:nil];
第2步/ observeValueForKeyPath:ofObject:change:context:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"status"]) {
AVPlayerItem *pItem = (AVPlayerItem *)object;
if (pItem.status == AVPlayerItemStatusReadyToPlay) {
// Here you can access to the player item's asset
// e.g.: self.asset = (AVURLAsset *)pItem.asset;
}
}
}
编辑:更正了答案