近來在一個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">