gpt4 book ai didi

iphone - AVURLAsset 无法加载远程文件

转载 作者:可可西里 更新时间:2023-11-01 04:36:57 25 4
gpt4 key购买 nike

我在使用 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];
...
}

在完成 block 中,状态为 AVKeyValueStatusFailed,错误消息为“无法打开”。我见过的所有示例都使用本地文件,所以使用远程文件可能存在问题...

问候,昆汀

最佳答案

您不能像 Apple 的 AV Foundation Programming Guide 中所述直接为 HTTP 直播流创建 AVURLAsset .您必须使用流 url 创建一个 AVPlayerItem 并用它实例化一个 AVPlayer

AVPlayerItem *pItem = [AVPlayerItem playerItemWithURL:theStreamURL];
AVPlayer *player = [AVPlayer playerWithPlayerItem:pItem];

如果您需要访问其背后的 AVURLAsset,您可以按照以下步骤操作。

步骤 1/注册播放器项目的 status 属性的更改

[playerItem addObserver:self forKeyPath:@"status" options:0 context:nil];

observeValueForKeyPath:ofObject:change:context: 中的步骤 2/

- (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;
}
}
}

编辑:更正答案

关于iphone - AVURLAsset 无法加载远程文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4934886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com