【问题标题】:AVPlayerItemStatusUnknown showing up when doing Live HTTP streaming进行实时 HTTP 流式传输时出现 AVPlayerItemStatusUnknown
【发布时间】:2011-05-16 22:23:12
【问题描述】:

我正在使用 AVPlayer 查看存储在 Amazon CloudFront 上的视频 -- 使用实时 HTTP 协议,播放列表和片段存储在 S3 上并使用 CloudFront 托管。

播放几个视频后,我开始从 AVPlayer 项目中获取 AVPlayerItemStatusUnknown 状态

AVPlayer.currentItem.status == AVPlayerItemStatusUnknown

此状态仍然存在新的视频播放列表时 - 我尝试在设置新的播放列表URL之前取消分配AVPlayer,并且仍然是AvPlayerItemStatusunknown状态,直到我终止应用程序。

两个问题。是否有人使用亚马逊 CloudFront 托管视频遇到同样的问题?有谁知道解决方法,所以我可以恢复 AVPlayer 的状态,以防止用户不得不终止应用程序才能查看更多视频?

非常感谢,

//亚伦

【问题讨论】:

    标签: ios avfoundation 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 工具没有注意到它。很抱歉误报。

    //亚伦

    【讨论】:

      猜你喜欢
      • 2013-10-17
      • 2011-05-17
      • 2012-01-05
      • 2011-09-01
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多