在发布AVPlayer实例后,视频仍在下载中

本文关键字:视频 下载 AVPlayer 实例 | 更新日期: 2023-09-27 18:25:22

我的视频播放器使用AV Foundation API并通过HTTP渐进式下载播放片段时出现问题。即使AVPlayer发布了,我仍然在下载视频片段(通过HTTP流量嗅探器观察到)。

我的播放器是这样初始化的:

m_player = new AVPlayer();
m_playerLayer = new AVPlayerLayer();
m_playerLayer.Player = m_player;

然后,当我有视频的URL时:

m_url = new NSUrl (...); 
m_asset = new AVAsset(m_url);
m_asset.AddObserver(this, new NSString ("playable"), NSKeyValueObservingOptions.Initial | NSKeyValueObservingOptions.New, AVPlayerAssetObservationContext);

当我被通知资产可以播放时,我正在创建一个AVPlayerItem:

m_playerItem = new AVPlayerItem(m_asset);
if (m_player.CurrentItem != m_playerItem)
{
  m_player.ReplaceCurrentItemWithPlayerItem (m_playerItem);    
}

我的视频正在播放,没有任何问题。然后,当我按下后退按钮时,我有一个调用Destroy()方法的机制。在这里,我尝试了很多事情来确保我的球员被很好地释放:

 if(m_player != null)
  {
    m_player.Pause();
    m_player.Dispose();
    m_player = null;
  }
  if(m_playerLayer != null)
  {
    m_playerLayer.Dispose();
    m_playerLayer = null; 
  }

  if(m_playerItem != null)
  {
    m_playerItem.Dispose();
    m_playerItem = null;
  }
  if(m_asset != null)
  {
    m_asset.CancelLoading();
    m_asset.RemoveObserver(this, new NSString("playable"));
    m_asset.Dispose();
    m_asset = null;
  }
  if(m_url != null)
  {
    m_url.Dispose();
    m_url = null;
  }

我用调试器测试了我的应用程序,当然,我会陷入这种代码中。我的对象似乎发布得很好,但可以肯定的是,应用程序仍在下载视频url。我在init/release代码中是否做错了什么?

提前感谢您的帮助!

在发布AVPlayer实例后,视频仍在下载中

我找到的解决方法是在Destroy()代码中添加这一行

m_player.ReplaceCurrentItemWithPlayerItem(new AVPlayerItem()); 

视频下载随后中断。