近來在一個web項目中,客戶提出需要在試聽的音頻檔案中,輸入開始時間和結束時間,然後從開始時間播放,到結束時間停止。在google中搜尋了幾次,都找不到相關的文檔,只有自己進行研究了。
剛開始的時候,將主要精力放在了Media Player控制項的屬性上,找到了以下幾個相關的屬性:
CurrentPosition 返回或設定剪輯的當前位置(雙精確度型)。
Duration 返回或設定剪輯剪輯的播放時間(雙精確度型)。
SelectionEnd 返回或設定流的結束位置(雙精確度型)。
SelectionStart 返回或設定流的起始位置(雙精確度型)。
經過測試,通過控制CurrentPosition屬性,可以實現需要的功能。而其他三個屬性基本上不起任何作用。但是,當頁面放到遠程伺服器的時候,發現該功能不起作用了。原來在緩衝還沒到達開始播出時間的時候,是跳轉不了。
後來只能埋頭於研究Windows Media Player 9 Series SDK,發現在Windows Media Metafile Elements Reference中STARTTIME、DURATION兩個Element正是我所需要的。而要使用這兩個Element需要在asx檔案中。
asx檔案格式如下:
<ASX VERSION="3.0">
<TITLE>Your title here</TITLE>
<ENTRY>
<REF HREF ="音頻檔案訪問路徑" />
<STARTTIME VALUE="0:30.0" />
<DURATION VALUE="00:50" />
</ENTRY>
</ASX>
經過多次測試,方案可行。現在的問題就簡單了。就是讓使用者提交開始時間和結束時間後產生asx檔案,然後將檔案送到media player就行了。
以下是我做的訪問介面:
不過在測試過程中,發現檔案傳送過去了,但media player播放不了,奇怪了。測試發現直接用本地的media player播放是沒有問題的,那麼問題肯定是出在頁面中media player的屬性上。我將media player的參數減少到只剩下filename一個屬性,發現居然行了。然後再將autostart屬性設定為false,發現不能工作了。最後只好將autostart屬性設定為true。
最終播放器的德屬性設定如下:
<param name="AutoStart" value="true">
<param name="Filename" value="">
<param name="ShowPositionControls" value="true">
<param name="ShowStatusBar" value="true">