專案需求:使用者輸入開始/結束時間,Media Player 只播放該區段。經研究發現,直接操控 ActiveX 控制項屬性(CurrentPosition, SelectionStart 等)在本機可行,但部署至遠端伺服器時,緩衝未完成前無法跳轉,導致功能失效。
Windows Media Metafile(.asx)支援 <STARTTIME> 與 <DURATION> 標籤,精確控制播放切入點與長度,且不受緩衝限制。
<ASX VERSION="3.0">
<TITLE>你的標題</TITLE>
<ENTRY>
<REF HREF="音訊檔案完整URL" />
<STARTTIME VALUE="0:30.0" /> <!-- 從 30 秒開始 -->
<DURATION VALUE="00:50" /> <!-- 播放 50 秒 -->
</ENTRY>
</ASX>
<object>。經測試,僅保留以下參數最穩定:
<param name="AutoStart" value="true">
<param name="Filename" value=""> <!-- 由 JS 動態指定 .asx URL -->
<param name="ShowPositionControls" value="true">
<param name="ShowStatusBar" value="true">
關鍵發現: 設 AutoStart="false" 會導致 .asx 無法播放,必須設為 true;Filename 初始留空,由腳本動態賦值。
// 使用者送出後
const asxContent = `...`; // 組裝 ASX 字串
const blob = new Blob([asxContent], {type: 'video/x-ms-asx'});
const asxUrl = URL.createObjectURL(blob);
player.Filename = asxUrl; // player 為 Media Player 物件參考
此法完美解決遠端指定區段播放問題,適用於試聽、教學切片等場景。