我的视频播放器出现问题,该播放器使用AV Foundation API并通过HTTP渐进式下载播放剪辑。即使AVPlayer发布,我仍在下载视频片段(通过HTTP流量嗅探器观察)。
我的播放器初始化如下:
m_player = new AVPlayer();
m_playerLayer = new AVPlayerLayer();
m_playerLayer.Player = m_player;
然后,当我有视频的网址时:
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;
}
我用调试器测试了我的应用程序,当然,我陷入了这个代码。我的对象似乎很好发布,但可以肯定的是应用程序仍在下载视频网址。我在init / release代码中做错了吗?
提前感谢您的帮助!
答案 0 :(得分:2)
我找到的解决方法是在Destroy()代码中添加这一行
m_player.ReplaceCurrentItemWithPlayerItem(new AVPlayerItem());
然后视频下载中断。