首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC Windows Media Player 控件播放狀態切換事件中切換視頻源失效的排查思路

     編輯:程式設計疑難解答

問題代碼

void ShowMov::PlayStateChangeOcx1(long NewState) {
    if (NewState == 1) { // 1 = 停止?實際應為 8 (MediaEnded)
        m_Play.put_URL(_T("E:\\1111.avi")); // 不生效
    }
}

狀態碼對照

值常量含義
0Undefined未定義
1Stopped停止
2Paused暫停
3Playing播放中
8MediaEnded播放結束
9Transitioning緩衝/轉換中

播放結束應判斷 NewState == 8。

常見失效原因

  1. 狀態誤判:用 1 代替 8,導致在停止(如用戶手動停止)時也嘗試切換。
  2. 未顯式播放:put_URL 只設置源,不自動播放,需調用 m_control.play()。
  3. URL 路徑問題:雙反斜杠轉義、文件不存在、編碼不支持。
  4. 事件重入:切換源觸發新的狀態變化,可能導致遞歸或死循環,需加鎖標志。

修正代碼

void ShowMov::PlayStateChangeOcx1(long NewState) {
    static bool switching = false;
    if (switching) return;
    if (NewState == 8) { // MediaEnded
        switching = true;
        m_Play.put_URL(_T("E:\\1111.avi"));
        m_Play.put_autoStart(TRUE); // 或
        m_control.play();
        switching = false;
    }
}

調試建議

  • 在事件處理器開頭 TRACE(_T("State: %d\n"), NewState); 觀察實際觸發序列。
  • 檢查 m_Play.getError() 獲取詳細錯誤碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved