頁面嵌入式流媒體播放器

來源:互聯網
上載者:User

出自:http://www.cnblogs.com/riky/archive/2007/03/04/663269.html

 

1.流媒體簡介

多媒體資訊的資料量很大,在網路上傳輸音/視頻等資訊主要有下載和串流兩種方案,串流採用的是邊接收邊播放的原則,即資料流由流媒體伺服器向使用者電腦連續、即時地傳送,客戶機不必等到

整個檔案全部下載完畢,只需經過幾秒或十數秒的啟動延時即可進行觀看,採用一邊播放,一邊下載,一邊丟棄的方式,節省了用戶端儲存空間,有效利用了頻寬,並真正實現作品智慧財產權保護。

實現流媒體傳輸需要2個條件:支援串流的流媒體伺服器和能串流的流媒體檔案。目前主要有三家流媒體公司在這方面佔主導市場:

(1)Microsoft公司的WindowsMedia

http://www.microsoft.com/windows/windowsmedia/

(2) RealNetworks公司的RealMedia

http://www.real.com

(3) Apple公司的QuickTime

http://www.apple.com/quicktime/download/

圖1為流媒體網路播放的過程。

圖1 流媒體傳輸原理

2.流媒體檔案的網上發布方式

與圖片文字不同的是,瀏覽器本身不能播放流媒體檔案,需要外掛程式或安裝播放器,常用的播放器如Windows Media Player或Real Player可到相應的網站都提供免費下載使用。

流媒體檔案頁面發布一般有2種方式:頁面連結和頁面嵌入。採用頁面嵌入式,播放器成為頁面的一個基元,影片或聲音無間隙地內嵌在網頁中,當頁面開啟時便可自動播放,其好處主要有:(1)設計者可以完全控制播放器的外觀和功能,也就可以自由設計播放器的尺寸,在頁面中位置,可以使用的按紐,播放指定的唯一檔案,與頁面實現無縫結合。(2)通過頁面指令碼語言JavaScript或VBScript來控制播放器,可以建立自訂的播放器外觀和實現特殊功能,例如實現頁面點唱機功能。

對於Windows Media 還是Real Media視頻檔案都包括2個檔案:一個為視頻源檔案,一個為指向源檔案的指標檔案,利用指標檔案來重新導向流資訊的主要原因是:目前通用的用戶端瀏覽器通常均不能直接支援用於播放流資訊的MMS協議或RTSP協議,需要向流媒體伺服器發出請求,由Media Server以串流方式播放點檔案中指定的視頻源檔案。本文以Windows Media為例說明其實現方法[1]。

在頁面加入視頻最簡單的方法就是在頁面中用HTML語言加入指向Web Server的指標檔案,先使用文字編輯器產生yourfile.asx指標檔案,它是純文字檔案,其中代碼如下:

<ASX version="3.0">

<TITLE>yourfile.asx</TITLE>

<ENTRY>

<TITLE>A Simple ASX</TITLE>

<AUTHOR>Your Name</AUTHOR>

<REF HREF="mms:// windows media server/sample.asf"/>

</ENTRY>

</ASX>

它的<entry></entry>可以有多個,表示有多個流要播放,也就是播放清單,每個<entry></entry>之間還有屬於每個流的相關資訊包括TITLE,AUTHOR,COPYRIGHT等。產生yourfile.asx檔案後,把它上傳到Web Server,且要和播放頁面在同一個路徑下。

嵌入式頁面在IE採用的是ActiveX Control技術,對Netscape Navigator而是採用plug-in技術。要實現流媒體直接在頁面中播放,先用上述方法建立asx指標檔案,或者可以用同一個asx,具體實現的話,如在Microsoft FrontPage中,通過插入Windows Media Player 這個ActiveX控制項,在HTML中BODY項中將會自動產生<object > </object>代碼,如下所示。 你所要做的就是根據你的要求更改Param項參數,其中Param項的FileName參數指向流媒體檔案的指標檔案asx,即http://server/path/your-file.asx,各參數項根據自己要求設定。

<object id="MediaPlayer1" width=180 height=200

classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"

codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"

standby="Loading Microsoft Windows Media Player components..."

type="application/x-oleobject" align="center">

<param name="FileName" value="server/path/your-file.asx ">

<param name="ShowStatusBar" value="True">

<param name="DefaultFrame" value="mainFrame">

<embed type="application/x-mplayer2"

pluginspage = "http://www.microsoft.com/Windows/MediaPlayer/"

src=" http://server/path/your-file.asx " align="center"

width=176

height=144

autostart=1

showcontrols=0>

</embed>

</object>

播放視窗適宜大小:

視窗大小

傳輸速率

Width=160 height=120

適合28.8kbps

Width=240 height=160

適合56kbps

Width=320 height=240

適合高於100kbps ,全屏要達到300kbps.

3.具體實現

Media Player做為一個ActiveX對象,有很多的屬性(Property)和方法(Method)可以供Web頁使用,如果與JavaScript結合的話,可以實現更複雜的功能,具體用到了Media Player的Play( ), Pause( ), stop( ) 方法實現播放、暫停、停止操作,利用Media Player的displaySize、showControls、fileName屬性控制播放視窗大小、按鈕的可見、改變播放的媒體檔案,由於Media Player對象的屬性和方法太多,我們不可能在此一一介紹,使用者在使用時可以參考Media Player SDK[2]的協助文檔以擷取更多的資訊。本文利用JavaScript語言結合Media Player的屬性和方法實現了一個流媒體嵌入式頁面點唱機功能。

點唱機的完整代碼如下:

<HTML><HEAD>

<TITLE>嵌入式流媒體頁面點唱機</TITLE>

<SCRIPT LANGUAGE = "JavaScript">

<!--先定義流媒體檔案結構,加入欲播放的流媒體檔案-->

var streams = new Array();

streams[0] = new makeStream("http://server/path/your-file.asx", "Your Movie Name");

streams[1] = new makeStream("mms:// windows media server/sample.asf ", "Sample Movie");

function makeStream(url, name) {

this.url = url;

this.name = name;

}

function handleControlsOnOffClick() {

if (document.mediaPlayer.showControls == true) {

document.mediaPlayer.showControls = false;

document.playerCtrl.controls.value = " 顯示控制項 ";

}

else { document.mediaPlayer.showControls = true;

document.playerCtrl.controls.value = " 隱藏控制項 "

}

}

function handlePlayOrPauseClick(){

var state;

playerStatus = document.mediaPlayer.playState;

if (playerStatus == 6) {

document.mediaPlayer.play();

document.playerCtrl.playOrPause.value = " 暫停 ";

}

else if (playerStatus == 1) {

document.mediaPlayer.play();

document.playerCtrl.playOrPause.value = " 暫停 ";

}

else if (playerStatus == 2) {

document.mediaPlayer.pause();

document.playerCtrl.playOrPause.value = " 播放 ";

}

}

function changeSize(newSize) {

document.mediaPlayer.displaySize = newSize;

}

<!--當使用者改變欲播放的流媒體檔案時,調用Media Player的stop( )方法,把URL地址賦值到Media Player的fileName參數中,Media Player重新開始播放-->

function change() {

var list = document.playerCtrl.streams;

var streamURL = list.options[list.selectedIndex].value;

document.mediaPlayer.stop();

document.playerCtrl.playOrPause.value = " 暫停 ";

document.mediaPlayer.fileName = streamURL;

}

</SCRIPT>

</HEAD>

<BODY LEFTMARGIN = "100">

<h3>嵌入式流媒體頁面點唱機</h3><P>

<OBJECT

ID="mediaPlayer"

CLASSID="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95"

CODEBASE="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"

STANDBY="Loading Microsoft Windows Media Player components..."

TYPE="application/x-oleobject" width="286" height="225">

<PARAM NAME="fileName" VALUE=" server/path/your-file.asx ">

<PARAM NAME="animationatStart" VALUE="true">

<PARAM NAME="transparentatStart" VALUE="true">

<PARAM NAME="autoStart" VALUE="true">

<PARAM NAME="showControls" VALUE="true">

</OBJECT><P>

<FORM NAME="playerCtrl">

<INPUT TYPE="button" VALUE="暫停" NAME="playOrPause" onClick="handlePlayOrPauseClick()" STYLE = "font-family:courier">

<INPUT TYPE="button" VALUE="隱藏控制項" NAME="controls" onClick="handleControlsOnOffClick()" STYLE = "font-family:courier"><BR>

<INPUT TYPE="button" VALUE="小螢幕" NAME="small" onclick="changeSize(1)" STYLE="font-family:courier"><INPUT TYPE="button" VALUE="原始大小" NAME="normal" onclick="changeSize(0)" STYLE="font-family:courier"><INPUT TYPE="button" VALUE="大螢幕" NAME="large" onclick="changeSize(2)" STYLE="font-family:courier">

<p>選擇播放的電影

<SCRIPT LANGUAGE="JavaScript">

<!--當使用者從從下拉式清單中選擇想播放的流媒體檔案後,擷取該檔案的URL和Name-->

with (document) {

writeln('<SELECT NAME="streams" onChange="change()">');

for (var i = 0; i < streams.length; i++) {

writeln('<OPTION VALUE="', streams[i].url, '">', streams[i].name);

}

writeln('</SELECT>');

}

</SCRIPT>

</p>

</FORM> </BODY> </HTML>

其中播放清單中的流媒體檔案,根據定義包括url(指向媒體檔案網路地址)和name(頁面顯示的檔案名稱),可以根據要求加入多個不同地址的媒體檔案,指向的媒體檔案可以是ASX和ASF的2種類型,其寫法不一樣,採用ASX索引檔案用http協議指向對應的索引檔案地址,採用ASF媒體檔案用mms流媒體傳輸協議直接播放指向的媒體檔案。圖2為具體實現的一個例子。

圖2頁面嵌入式流媒體點唱機實現

4.結束語

本文對Media Service的客戶應用程式Media Player在Web頁面中的使用做了簡單的介紹,結合JavaScript語言具體實現了一個頁面嵌入式點唱機程式,可以實現流媒體檔案的選擇開啟和播放,該例子應用在音樂和ApsaraVideo for VOD網站可以更好的保護作者的著作權。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.