Iphone AVURLAsset无法与远程文件一起加载
我在使用AVURLAsset时遇到问题Iphone AVURLAsset无法与远程文件一起加载,iphone,ios,avfoundation,Iphone,Ios,Avfoundation,我在使用AVURLAsset时遇到问题 NSString * const kContentURL = @ "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"; ... NSURL *contentURL = [NSURL URLWithString:kContentURL]; AVURLAsset *asset = [AVURLAsset URLAssetWithURL:contentURL
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,错误消息为“无法打开”。我看到的所有示例都使用本地文件,所以使用远程文件可能会有问题
问候,,
昆汀你不能像苹果公司的声明那样直接为HTTP直播流创建一个
avurlaste
。
您必须使用流url创建一个AVPlayerItem
,并用它实例化一个AVPlayer
AVPlayerItem *pItem = [AVPlayerItem playerItemWithURL:theStreamURL];
AVPlayer *player = [AVPlayer playerWithPlayerItem:pItem];
如果您需要访问后面的avurlaste
,可以按照以下步骤操作
步骤1/注册玩家物品的状态
属性的更改
[playerItem addObserver:self forKeyPath:@"status" options:0 context:nil];
步骤2/在observeValueForKeyPath:of对象:更改:上下文:
- (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;
}
}
}
编辑:更正了答案谢谢,我尝试了此解决方案,但没有调用currentItem值上的observer方法,因为在添加observer时已设置了属性。所以我在AVPlayerItem的状态上放置了一个观察者方法,从这里我可以得到AvPlayerCurrentItem。@Quentin你说得对,谢谢!与我的代码的另一部分混在一起。。。我编辑了我的答案来纠正这个问题。