2012-02-20 21 views
1

我的視頻播放器使用AV Foundation API並通過HTTP漸進式下載播放剪輯時遇到問題。即使AVPlayer發佈時,我仍然在下載視頻剪輯(通過HTTP Traffic sniffer觀察)。發佈AVPlayer實例後仍然下載視頻

我的播放器初始化這樣的:

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

我發現的解決方法是添加m_player.ReplaceCurrentItemWithPlayerItem(new AVPlayerItem());視頻下載中斷。 – nicolas 2012-02-20 17:37:32

+0

您應該將您的評論移至答案中,並將其標記爲已回答。你還應該考慮打開一個bug報告,在http://bugzilla.xamarin.com上用一個測試用例,因爲這應該(至少)被記錄下來,並且*可能*我們可以做些事情來讓它更容易(在API中)。 – poupou 2012-02-20 18:14:40

+0

我希望這是足夠的解決方法在這裏:-) – nicolas 2012-02-21 08:00:31

回答

2

我找到的解決方法是在destroy()方法的代碼

m_player.ReplaceCurrentItemWithPlayerItem(new AVPlayerItem()); 

然後將視頻下載中斷加入這一行。