进行实时 HTTP 流式传输时出现 AVPlayerItemStatusUnknown
Posted
技术标签:
【中文标题】进行实时 HTTP 流式传输时出现 AVPlayerItemStatusUnknown【英文标题】:AVPlayerItemStatusUnknown showing up when doing Live HTTP streaming 【发布时间】:2011-05-16 22:23:12 【问题描述】:我正在使用 AVPlayer 查看存储在 Amazon CloudFront 上的视频 -- 使用实时 HTTP 协议,播放列表和片段存储在 S3 上并使用 CloudFront 托管。
播放几个视频后,我开始从 AVPlayer 项目中获取 AVPlayerItemStatusUnknown 状态
AVPlayer.currentItem.status == AVPlayerItemStatusUnknown
此状态仍然存在新的视频播放列表时 - 我尝试在设置新的播放列表URL之前取消分配AVPlayer,并且仍然是AvPlayerItemStatusunknown状态,直到我终止应用程序。
两个问题。是否有人使用亚马逊 CloudFront 托管视频遇到同样的问题?有谁知道解决方法,所以我可以恢复 AVPlayer 的状态,以防止用户不得不终止应用程序才能查看更多视频?
非常感谢,
//亚伦
【问题讨论】:
【参考方案1】:对于流媒体,这在我看来是一种正常行为。您是否为“状态”属性添加了观察者?您应该在状态更改为 AVPlayerItemStatusReadyToPlay 时开始播放。
[item addObserver:self forKeyPath:@"status" options:0 context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
if ([keyPath isEqualToString:@"status"])
AVPlayerItem *item = (AVPlayerItem *)object;
if (item.status == AVPlayerItemStatusReadyToPlay)
//Ready
【讨论】:
感谢您的回复。是的,我正在观察该属性,并在获得 AVPlayerItemStatusReadyToPlay 后允许用户播放。我确实找到了我在这里回答的问题。 如果不消费key change,请在observeValueForKeyPath方法结束时调用super【参考方案2】:我发现了问题。简短的回答是它是一个过度保留的 AVPlayer,顺便说一句,使用泄漏模板的 Instruments 工具没有注意到它。很抱歉误报。
//亚伦
【讨论】:
以上是关于进行实时 HTTP 流式传输时出现 AVPlayerItemStatusUnknown的主要内容,如果未能解决你的问题,请参考以下文章
通过 CloudFront 进行私有 HTTP 实时流式传输
尝试使用 Python Jupyter Notebook 将带有地理标记的推文流式传输到 PostgreSQL 时出现问题