亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

控制多個媒體播放器的瀏覽器可譯文檔及相關(guān)系統(tǒng)和方法

文檔序號:6476672閱讀:318來源:國知局

專利名稱::控制多個媒體播放器的瀏覽器可譯文檔及相關(guān)系統(tǒng)和方法
技術(shù)領(lǐng)域
:本公開涉及媒體播放器軟件領(lǐng)域,更具體而言,描述了一種用于控制多個媒體播放器的瀏覽器可譯(browserinterpretable)文檔。
背景技術(shù)
:用于音頻文件的運動圖片娛樂組級別3("MP3")數(shù)字編碼的出現(xiàn)通過將音樂分發(fā)代價減小到近乎為零而從根本上改變了音樂分發(fā)。這進而鼓勵藝術(shù)家創(chuàng)作新作品并使得他們的作品可以數(shù)字形式獲得。但是,MP3媒體類型具有某些缺陷。例如,在MP3媒體類型中沒有建立數(shù)字權(quán)限管理能力。因此,需要設(shè)計新的媒體類型來輔助數(shù)字權(quán)限管理。為了改進在將模擬源(例如聲音或光)轉(zhuǎn)換成數(shù)字格式和/或從數(shù)字格式轉(zhuǎn)換成模擬格式時所使用的技術(shù),已經(jīng)創(chuàng)建出新的媒體類型。另外還已經(jīng)創(chuàng)建出新的媒體類型,其注重減小為了以足夠的精確性播放內(nèi)容而需要發(fā)送和/或存儲的數(shù)據(jù)量,從而至少取悅大多數(shù)用戶或出于其他特定目的。這導(dǎo)致常用的不同媒體類型不斷激增。數(shù)字可用內(nèi)容(digitally-availablecontent)的快速增長還促使各種媒體播放器的創(chuàng)建,其中包括專用、獨立設(shè)備和用在便攜式計算機上的基于軟件的媒體播放器,所述專用、獨立設(shè)備例如(但不局限于)由加州庫珀蒂諾的蘋果計算機公司提供的iPod系列的個人音樂播放器、由華盛頓州雷德蒙的微軟公司提供的Zime、以及由新加坡的創(chuàng)新公司提供的Zen系列的個人音樂播放器。為了輔助用戶對數(shù)字內(nèi)容的訪問,很多媒體播放器可以播放使用各種媒體類型編碼后的內(nèi)容。例如,由華盛頓州雷德蒙的微軟公司提供的WindowsMediaPlayer軟件可以播放使用多種媒體類型編碼后的內(nèi)容,包括WindowsMediaAudio("WMA")、WindowsMediaVideo("WMV")、MotionPictureEntertainmentGroup("MPEG")、MP3、WAVE禾口MusicalInstrumentDigitalInterface("MIDI")。WindowsMediaPlayer還允許用戶通過簡單地安裝適當?shù)木幋a器/解碼器("CODEC")來添加對新的和替換性的媒體類型的支持。雖然很多媒體播放器可以播放以多種媒體類型中的任意一種編碼后的內(nèi)容,但是某些媒體類型是私有的,并且顯示使用該媒體類型編碼后的內(nèi)容的權(quán)限通常受到嚴格控制。例如,由蘋果計算機公司的Quicktime所采用的編碼技術(shù)以及RealNetworks的RealVideo和RealAudio媒體類型一般都是私有的。結(jié)果,如果用戶希望播放使用一私有媒體類型所創(chuàng)建的內(nèi)容,用戶則被迫使用相應(yīng)的私有媒體播放器,而不能使用他們偏好的媒體播放器。這對于嘗試訪問用戶自己的個人庫中的多種媒體文件的用戶以及嘗試訪問來自其他庫的媒體文件的用戶都是個問題。例如,某些用戶可能與其他用戶共享一播放列表(或者將播放的內(nèi)容的有序列表),并且這些其他用戶可能沒有意識到他們偏好的媒體播放器將不能播放該播放列表中的所有內(nèi)容。某些基于軟件的媒體播放器允許用戶針對特定的媒體播放器創(chuàng)建定制的"皮膚"或用戶界面。這些皮膚允許用戶更容易地訪問他們最常用或需要的命令和控制。另外,在與其他可用的媒體播放器進行比較時,每種媒體播放器通常具有其優(yōu)勢和劣勢,并且用戶傾向于使用具有對其而言最方便和/或最舒服的特征和用戶界面的播放器。結(jié)果,用戶傾向于逐漸習(xí)慣于一特定的媒體播放器用戶界面,尤其是定制的用戶界面,并且當他們被迫從包含該用戶界面的媒體播放器切換到使用不同界面的媒體播放器時(例如在利用私有媒體類型對內(nèi)容進行編碼時會發(fā)生的情況),用戶可能變得無計可施
發(fā)明內(nèi)容需要一種用于提供可通過其控制多個媒體播放器的標準化界面的手段。因此,本公開用于提供一種瀏覽器可譯文檔,用于控制多個媒體播放器,該瀏覽器可譯文檔實質(zhì)上克服了由于現(xiàn)有技術(shù)的局限和缺點所導(dǎo)致的一個或多個問題。本公開中所描述的媒體播放器能夠播放音頻、視頻和/或其它類型的內(nèi)容;但是,為了清晰,本公開將集中關(guān)注播放以各種媒體類型編碼后的音頻內(nèi)容,所述各種媒體類型中的某些可能需要特定的媒體播放器。這樣的關(guān)注被用來說明瀏覽器可譯文檔及其與媒體播放器之間的操作,并且不應(yīng)該被理解為將由此所創(chuàng)建的瀏覽器可譯文檔或用戶界面局限于用于音頻內(nèi)容的媒體播放器?,F(xiàn)在很多設(shè)備都能夠播放內(nèi)容,包括,不作為限制,個人計算機("PC")、膝上型電腦、個人數(shù)字助理("PDA")、蜂窩電話、游戲機和便攜式媒體播放器("PMP")。這些設(shè)備還通常能夠運行至少一個瀏覽器。瀏覽器是能夠翻譯文檔并將文檔的內(nèi)容呈現(xiàn)給用戶的軟件應(yīng)用,所述文檔以超文本標記語言("HTML")、可擴展標記語言("XML")或其他這樣的標記語言存儲。瀏覽器還通常支持至少一種腳本語言,例如,不作為限制,由由華盛頓州雷德蒙的微軟公司提供的VisualBasicScript("VAScript");和由太陽微系統(tǒng)提供的JavaScript。這些腳本語言可以向瀏覽器添加可編程措施,而不是將瀏覽器局限于僅僅向用戶顯示經(jīng)標記的文檔。某些實施例包括利用標準化界面來控制多個媒體播放器的方法,包括定義一圖形用戶界面,通過該圖形用戶界面,多個媒體播放器將被控制,其中所述圖形用戶界面包含將作為所述圖形用戶界面的一部分被顯示的用戶界面元素;將至少一種功能與所定義的所述用戶界面元素相關(guān)聯(lián);將至少一個播放列表與所述圖形用戶界面相關(guān)聯(lián),其中所述播放列表包含多個條目,并且其中每個條目包含第一媒體文件或到所述第一媒體文件的指針;以web瀏覽器可譯的方式存儲所述圖形用戶界面和所述播放列表與所述圖形用戶界面的關(guān)聯(lián);以及將計算機程序過程代碼與所述圖形用戶界面相關(guān)聯(lián),其中所述計算機程序過程代碼包含用于以下操作的指令判斷能夠播放所述第一媒體文件的媒體播放器是否能被計算設(shè)備所訪問;使所確定的能夠播碼放所述第一媒體文件的媒體播放器被所述計算設(shè)備所加載,其中所述媒體播放器的至少一個控件對用戶隱藏;監(jiān)視與所定義的所述用戶界面元素之間的交互;以及經(jīng)由所述用戶界面元素控制所述媒體播放器,以使所述媒體播放器以對應(yīng)于與所述用戶界面元素相關(guān)聯(lián)的功能的方式工作。在某些實施例中,圖形用戶界面可以與任意媒體播放器獨立存在,并且可以包含至少一個圖形文件。在某些實施例中,播放列表還可以包括與所述第一媒體文件相關(guān)聯(lián)的媒體類型指示符,并且能夠播放所述第一媒體文件的所述媒體播放器是至少部分通過與所述第一媒體文件相關(guān)聯(lián)的媒體類型指示符來確定的。在某些實施例中,所述圖形用戶界面以及所述計算機程序過程代碼與所述圖形用戶界面之間的關(guān)聯(lián)可以以web瀏覽器可譯的方式來存儲。在某些實施例中,所述圖形用戶界面、所述圖形用戶界面和所述播放列表之間的關(guān)聯(lián)、以及所述圖形用戶界面和所述計算機程序過程代碼之間的關(guān)聯(lián)被存儲在同一文件中。某些實施例包括一種用于控制多個媒體播放器的系統(tǒng),包括定義的圖形用戶界面,其中所述定義的圖形用戶界面接收用戶交互,其中所述定義的圖形用戶界面包括用戶界面元素,其中所定義的用戶界面元素具有與其相關(guān)聯(lián)的功能,并且其中所述定義的圖形用戶界面被以從標準化通用標記語言派生的標記語言存儲,并且能被運行在計算設(shè)備上的web瀏覽器所翻譯;所述web瀏覽器可譯的指令集合,借由該指令集合,所述web瀏覽器能向安裝在所述計算設(shè)備上的多個媒體播放器之一發(fā)送命令,從而允許所述web瀏覽器基于用戶與所述定義的圖形用戶界面之間的交互來控制媒體文件的回放;以及播放列表,其中所述播放列表被以從標準化通用標記語言派生的標記語言存儲,并且能被所述web瀏覽器所翻譯,其中所述播放列表包括多個條目,并且其中所述多個條目的至少一個子集對應(yīng)于一個多媒體文件。在某些實施例中,所述指令集合還可以包括用于判斷能夠播放媒體文件的媒體播放器是否被安裝在所述計算設(shè)備上的指令。在某些實施例中,每個播放列表條目還可以包括與所述播放列表條目相關(guān)聯(lián)的至少一個媒體類型指示符,其中所述判斷能夠播放媒體文件的媒體播放器是否被安裝在所述計算設(shè)備上是至少部分地基于與播放列表條目相關(guān)聯(lián)的所述媒體類型指示符來進行的。在某些實施例中,所述播放列表和所述圖形用戶界面是使用常用標記語言來存儲的,所述常用標記語言例如(不作為限制)是可擴展標記語言和/或超文本標記語言。某些實施例包括一種瀏覽器可譯文檔,包括播放列表,包括多個條目,其中每個條目包括第一媒體文件或到所述第一媒體文件的指針;圖形用戶界面定義或到所述圖形用戶界面定義的指針,所述圖形用戶界面定義包括第一用戶界面元素和與所述第一用戶界面元素相關(guān)聯(lián)的功能;以及命令集合或到所述命令集合的指針,用于控制多個媒體播放器的操作;其中,當所述瀏覽器可譯文檔被傳統(tǒng)的web瀏覽器提供時,所述web瀏覽器基于所述圖形用戶界面定義來提供圖形用戶界面,并且其中所提供的圖形用戶界面控制所述多個媒體播放器之一來實現(xiàn)所述第一媒體文件的播放。在某些實施例中,圖形用戶界面定義可以是利用從標準化通用標記語言派生的標準化標記語言來定義的,例如,不作為限制,超文本標記語言。在某些實施例中,所述命令集合可以包括腳本語言指令。在某些實施例中,每個播放列表條目還包括與所述第一媒體文件相關(guān)聯(lián)的媒體類型指示符,并且其中所述命令集合包括如下指令所述瀏覽器能通過所述指令來判斷能夠播放所述第一媒體文件的媒體播放器是否被安裝在所述瀏覽器正在其上運行的計算設(shè)備上,并且其中該判斷是至少部分地基于與所述第一媒體文件相關(guān)聯(lián)的所述媒體類型指示符來進行的。將會理解,前面的一般描述和以下的詳細描述都是示例性的和說明性的,并且用于提供對所公開的瀏覽器可譯文檔的進一步說明。在以下描述中將提出本發(fā)明的額外特征和優(yōu)點,并且這些特征和優(yōu)點將從本公開中部分地體現(xiàn)出來或者可以通過實施本發(fā)明而獲知。本發(fā)明的目的和其他優(yōu)點將利用在本說明書(包括這里所包含的任意權(quán)利要求和附圖)中所特別指出的結(jié)構(gòu)來實現(xiàn)和達成。為了進一步理解所公開的用于控制多個媒體播放器的瀏覽器可譯文檔,本說明書中包括了附圖,這些附圖被并入在說明書中并構(gòu)成說明書的一部分,附圖與以下描述一起用于說明各個實施例,并且用于說明所公開的瀏覽器可譯文檔的至少一個實施例的原理。在附圖中圖1是示出一種示例性方法的框圖,通過該方法,可以使用瀏覽器可譯文檔來控制多個媒體播放器。圖2是提供播放列表的示例性瀏覽器可譯文檔。圖3是提供了可用于控制多個媒體播放器的用戶界面的一示例性瀏覽器可譯文檔。圖4是提供了可用于控制多個媒體播放器的用戶界面的一替換性的示例性瀏覽器可譯文檔。圖5是被用于控制媒體播放器的一替換性的示例性瀏覽器可譯文檔。圖6是被用于控制媒體播放器的一替換性的示例性瀏覽器可譯文檔。圖7是一替換性的示例性瀏覽器可譯文檔,其中由該瀏覽器可譯文檔提供的用戶界面還提供對播放列表的訪問。圖8是一替換性的示例性瀏覽器可譯文檔,其中由該瀏覽器可譯文檔提供的用戶界面還提供可用于編輯播放列表的用戶界面。圖9是一替換性的示例性瀏覽器可譯文檔,其中由該瀏覽器可譯文檔提供的用戶界面允許對播放列表的條目進行拖放重排序。圖10是一替換性的示例性瀏覽器可譯文檔,其中由該瀏覽器可譯文檔提供的用戶界面中播放列表條目已被重排序。圖11是一替換性的示例性瀏覽器可譯文檔,其中通過向內(nèi)容拖放一URL而添加了一播放列表條目。圖12是輔助存儲播放列表的一替換性的示例性瀏覽器可譯文檔。圖13是用HTML書寫的一示例性瀏覽器可譯文檔。圖14是用HTML書寫的一替換性的示例性瀏覽器可譯文檔。圖15是用HTML書寫的一替換性的示例性瀏覽器可譯文檔。圖16是示出一種示例性方法的框圖,通過該方法,可以獲得適當?shù)臄?shù)字權(quán)限管理許可信息。具體實施例方式現(xiàn)在將更詳細地參考所公開的用于控制多個媒體播放器的瀏覽器可譯文檔的實施例,在附圖中圖示出本發(fā)明的示例。在實施例中,所提供的瀏覽器可譯文檔包含多個內(nèi)容條目和用于控制多個媒體播放器的指令集合。在實施例中,為了確保瀏覽器可譯文檔能夠被多種瀏覽器讀取和翻譯,該瀏覽器可譯文檔利用現(xiàn)有的瀏覽器可譯語言,并且盡可能小地脫離這些瀏覽器可譯語言的標準化定義,所述現(xiàn)有的瀏覽器可譯語言例如(但不局限于)是超文本標記語言("HTML")、可擴展標記語言("XML")、層疊樣式表("CSS")等等。例如,不作為限制,這里所描述的瀏覽器可譯文檔的實施例僅僅在傳統(tǒng)的瀏覽器詞匯中引入兩個新的關(guān)鍵字,"hTrack"和"timed",其兩者都被用作類名。這些類在HTML4+規(guī)范中定義。在傳統(tǒng)的標記語言(例如,HTML)中,鏈接或到內(nèi)容的指針可能被寫作〈ahref='7media/example.mp3"〉ExampleLink</a>。當該鏈接被瀏覽器呈遞時,統(tǒng)一資源定位符("URL")和相關(guān)的標簽(tag)將對用戶隱藏,并且用戶將僅看到單詞ExampleLink,但是由于瀏覽器對標記語言的翻譯,用戶可以點擊所述單詞或以其他方式與單詞進行交互,從而訪問鏈接中所引用的內(nèi)容。當用戶與單詞交互時,瀏覽器嘗試從URL中所指定的路徑加載文件,該過程可能包括創(chuàng)建example.mp3的本地拷貝。如果瀏覽器在文件開始處或附近沒有檢測到任意瀏覽器可譯指令,瀏覽器則可以嘗試判斷該文件是否具有瀏覽器的任意插件或其他增強版本能夠翻譯的類型。如果該文件可以被一插件所翻譯,瀏覽器則加載該插件,并且文件被該插件所加載。如果該文件不具有瀏覽器或插件可翻譯的格式,瀏覽器則可以將文件信息傳遞到操作系統(tǒng)。操作系統(tǒng)隨后基于文件的信息來確定應(yīng)該被加載以處理該文件的適當應(yīng)用,例如媒體播放器。例如,不作為限制,操作系統(tǒng)可以查看文件的擴展名(即,在文件名中最右端部分之后的字符),以確定將被加載的適當應(yīng)用。在以上提供的示例中,由于example.mp3是媒體文件,操作系統(tǒng)可以使得本地安裝的媒體播放器被加載,并且可以向該本地安裝的媒體播放器發(fā)送播放example.mp3的指令。這種行為可能是繁瑣的,并且如上所述,會導(dǎo)致具有用戶不熟悉的界面的媒體播放器的加載。通過修改鏈接以使得瀏覽器認出文件具有音軌(track)(即,通過采用"hTrack"類),可以在用戶與鏈接交互時指示瀏覽器采取替換性的動作。例如,不作為限制,通過將上述鏈接改變?yōu)樽x取〈ahref="/media/example.mp3"class="htrack"〉mp3link</a〉,可以指示瀏覽器example.mp3是一音軌,因此其應(yīng)該根據(jù)包含在瀏覽器可譯文檔中或在其中所引用的替換性指令來處理。一個或多個這樣的音軌可以被一起組合在"播放列表"或者將由適當?shù)拿襟w播放器播放的內(nèi)容列表中。在實施例中,音軌的播放順序可以按照音軌出現(xiàn)在播放列表或其他瀏覽器可譯文檔中的順序來確定。例如,不作為限制,包含在下表1中列出的代碼的瀏覽器可譯文檔將使得first,mp3首先播放,隨后second.mp3再被播放。<ahref="/media/first.mp3,,class="htrack,,>firstsong</a><ahref="/media/second.mp3,,class="htrack,,〉secondsong</a〉表i雖然音軌在瀏覽器可譯文檔中被列出的順序可被用于確定播放順序,但是在實施例中,該播放順序可以通過利用在公知的HTML4+和/或XHTML規(guī)范中定制的tabindex屬性來改變。因此,通過將表1中列出的代碼修改為以下表2所列代碼,可以指示瀏覽器首先播放first,mp3,即使first.mp3不是在播放列表中最先列出的內(nèi)容。<ahref="/media/second.mp3,,class="htrack,,tabindex="2,,〉secondsong</a〉<ahref="/media/first.mp3,,class="htrack"tabindex="l,,>firstsong</a>表2雖然這里采用HTML進行描述,但是也可以設(shè)想替換性的實施例,包括采用XML可共享播放列表格式("XSPF")、MPEG音頻第3層URL("M3U")或高級流重定向器("ASX")的那些實施例。本公開使用HTML型URL和標記語言是為了描述清楚的目的,而不應(yīng)該理解為將瀏覽器可譯文檔和/或播放列表局限于這樣的標記語言。額外的屬性也可被用于進一步簡化針對給定媒體類型對適當?shù)拿襟w播放器的識別。例如,不作為限制,"類型(type)"屬性可被采用。類型屬性可以給出關(guān)于經(jīng)由鏈接可獲得的媒體類型的建議性暗示。這種暗示可以允許瀏覽器可譯文檔或與其相關(guān)聯(lián)的指令在當前運行瀏覽器的設(shè)備不支持該媒體類型的情況下發(fā)起替換程序。在實施例中,使用該屬性的作者可以負責管理所指定的媒體類型與經(jīng)由鏈接可獲得的內(nèi)容不一致的風險??杀徊捎玫牧硪粚傩允?標題(title)"屬性。在實施例中,標題屬性可以按照XSPF播放列表中使用〃playlist/trackList/track/title屬性類似的方式被使用。就是說,標題屬性可以提供關(guān)于內(nèi)容標題的暗示。另一可被采用的屬性是圖像或"img"屬性。在實施例中,圖像屬性可以按照XSPF播放列表中使用〃playlist/trackList/track/image屬性類似的方式被使用。就是說,圖像屬性可以提供到與內(nèi)容相關(guān)聯(lián)的唱片藝術(shù)或其他圖像的鏈接。另一可被采用的屬性是"自由文本(free-text)"元素。在實施例中,自由文本元素可以按照XSPF播放列表中使用playlist/trackList/track/annotation屬性類似的方式被使用。就是說,自由文本元素可以提供關(guān)于內(nèi)容的注釋或其他信息。當被組合用于創(chuàng)建瀏覽器可譯文檔中的播放列表條目時,示例性鏈接可能類似于以下表3所示。<ahref="http:〃example.com/mp3,,class="htock,,title="MySharona,,type="audio/mpeg,,><imgalt="TheKnackalbumart"src="http:〃exampIe.com/img/albumart/the—knack.gif,/>don'tdenyyoulovethissong</a>表3為了允許用戶在他們所偏好的媒體播放器中播放內(nèi)容,某些內(nèi)容提供商將使得內(nèi)容可以多種媒體類型獲得,或者在一媒體類型中采用不同屬性(例如不同的比特率),并且這些內(nèi)容提供商可能喜歡讓對應(yīng)于他們所提供的內(nèi)容的播放列表條目包括到內(nèi)容的可用形式的至少一個子集的指針。為了允許這多個指針根據(jù)本瀏覽器可譯文檔來實現(xiàn),可以將hTrack關(guān)鍵字應(yīng)用到容器(container)元素。這如以下表4所示。<divclass="htrack,,>Hello,hTrackWorld!</div>表4假定單個播放列表條目可以包含多個到內(nèi)容的可播放鏈接以及其他鏈接,則問題變成如何將可播放鏈接與其它鏈接區(qū)分開。例如,不作為限制,在具有多個鏈接的hTrack容器中(例如以下表5所示),不存在可編程方式用來區(qū)分可播放鏈接"http://example.com/mp3"和到其他信息的一個或多個鏈接,例如(不作為限制),到關(guān)于藝術(shù)家的信息的鏈接和/或用于購買該可播放鏈接所屬內(nèi)容的鏈接。<divclass="htrack',〉<ahref="http:〃example.com/mp3">Hello,HtrackWorld!</a><ahref="http:〃example.com/about,,>Lyricstothissong</a></div>表5第二新關(guān)鍵字"timed"幫助區(qū)分可播放鏈接和其他相關(guān)鏈接。該關(guān)鍵字"timed"表示如下思想這是可以找到作為該音軌的核心的計時媒體(timedmedia)的URL。其并不是暗示只存在一個這樣的URL,存在多于一個計時媒體鏈接也是可接受的。該關(guān)鍵字的示例性使用如以下表6所示,并且更完整地,基于HTML的示例由圖15提供。<divclass="htrack"〉<ahref="http:〃example.com/ogg,,class="timed,,〉Hello,hTrackWorld!(OggVorbis)</a><ahref="http:〃example.com/qt"class="timed,,>Hello,hTrackWorld!(Quicktime)</a><ahref="http:〃example.com/about"〉Lyricstothissong</a></div>表6某些本領(lǐng)域技術(shù)人員將意識到,"類型"屬性具有與"饋送(feed)"格式的"包封(enclosure)"元素類似的功能,因此本瀏覽器可譯文檔最初可被視為與podcasting的下層技術(shù)類似。但是,經(jīng)過更仔細的檢査,podcasting與本瀏覽器可譯文檔之間的差別應(yīng)該是顯而易見的。例如,hTrack的語義是一系列按用戶設(shè)置的順序呈遞的一個或多個計時媒體元素。相反,在podcasting中所使用的包封元素幫助預(yù)取大文件,以反向時間順序讀取條目,并且將媒體文件拷貝到便攜式設(shè)備中。結(jié)合播放列表,根據(jù)本公開的瀏覽器可譯文檔還可以包括一系列用于判斷是否針對給定內(nèi)容的媒體類型可獲得適當?shù)拿襟w播放器的指令。在實施例中,這一系列指令可以用任意幫助調(diào)用其他應(yīng)用的編程或腳本語言來書寫,所述編程或腳本語言包括以下語言例如,不作為限制,AJAX、JAVA、JAVAScript、VBScript、C+十等等。在替換性實施例中,這一系列指令可以用任意語言書寫,并且可以將信息傳遞給中間的"幫助應(yīng)用",例如,不作為限制,瀏覽器插件或擴展。當一播放列表條目具有多個到內(nèi)容的鏈接(例如,具有不同比特率或利用不同媒體類型編碼后的相同內(nèi)容)時,指令還可以基于瀏覽器在其上進行操作的設(shè)備的屬性來從可獲得的鏈接中選擇適當?shù)膬?nèi)容鏈接。例如,不作為限制,播放列表可以包括針對與運動圖片相對應(yīng)的全運動視頻的條目,并且播放列表條目可以包括以不同的屏幕分辨率到視頻的鏈接。這一系列指令可以確定設(shè)備的顯示分辨率,并從鏈接集合中選擇設(shè)備最容易呈遞的鏈接,而無需不必要下載和/或下采樣更高分辨率的內(nèi)容。在實施例中,所述一系列指令還可以判斷多個標準媒體播放器中的任意一個是否被安裝在設(shè)備上。這一系列指令隨后可以幫助通過用于一個或多個這樣的媒體播放器的應(yīng)用編程接口("API")與這些媒體播放器進行交互。在實施例中,幫助訪問這些API的指令序列被實現(xiàn)為可以容易地更新的分離模塊,從而允許支持新的媒體播放器并且新的媒體播放器版本可以被容易地添加。這些更新可以通過以固定間隔(例如,在每次瀏覽器可譯文檔被加載時,每周一次,每次設(shè)備重啟時,等等)對源進行輪詢來獲得,或者更新可以被"推(push)"給設(shè)備和/或瀏覽器。這里所描述的瀏覽器可譯文檔的優(yōu)點在于除了提供可被多個瀏覽器所翻譯并在這多個瀏覽器間使用的良好結(jié)構(gòu)化的播放列表格式之外,該瀏覽器可譯文檔還可被用于定義可以通過其控制多個媒體播放器的用戶界面。圖l是示出一種方法的框圖,通過該方法,瀏覽器可譯文檔可被用于控制多個媒體播放器。在圖1的框100中,圖形界面被創(chuàng)建,通過該圖形界面將控制多個媒體播放器。在實施例中,這樣的圖形界面可以被創(chuàng)建為單個平面圖像文件,例如(不作為限制)JPEG編碼后的圖像;文本元素的集合,例如(不作為限制)"<—"、"<-"、"Stop(停止)"、"Play(播放)"、"II"、"->"、"—>";靜態(tài)和/或運動圖像的集合;或它們的組合。圖像和/或文本的集合可以被組合到使用HTML、XHTML或其他這樣的語言的瀏覽器可譯文檔中,以創(chuàng)建圖形用戶界面。圖3示出一示例性實施例,其中多個圖形和文本元素被組合在一HTML文檔中,以創(chuàng)建這樣的圖形用戶界面。在圖3中,按鈕310、320和330希望用于分別實現(xiàn)前一音軌、播放/暫停和下一音軌功能。按鈕340提供用戶可通過其訪問內(nèi)容提供商(在此情況下是公知的Yahoo!音樂引擎)的方便鏈接。按鈕350允許用戶查看利用按鈕310、320和330所控制的播放列表。在圖1的框110中,至少一個用戶界面元素(或控件)被定義。在實施例中,用戶界面元素可以通過標識圖像中的一個或多個區(qū)域(例如,不作為限制,通過使用HTML中的圖(map)和區(qū)域(area)元素)來定義。在實施例中,當圖形用戶界面包含一個或多個HTML元素時,容器元素(例如,但不作為限制,〈div〉元素)可以被放置在一個或多個HTML元素周圍,從而將這些HTML元素標識為用戶界面元素。在框120中,至少一個功能與所定義的用戶界面元素相關(guān)聯(lián)。用戶界面元素通常被創(chuàng)建用于輔助控制媒體播放器或以其他方式與媒體播放器進行交互,并且在該步驟中,與用戶界面元素相關(guān)聯(lián)的特定功能被定義。在框130中,至少一個播放列表被與圖形用戶界面相關(guān)聯(lián)。該播放列表包括至少一個媒體文件或到該媒體文件的指針。在實施例中,這樣的播放列表可以使用上面描述的播放列表規(guī)范來定義,并且在某些實施例中,播放列表和圖形用戶界面可以被存儲在同一文件中。某些實施例可以將對圖形用戶界面的引用并入到播放列表中,并且某些實施例可能將到播放列表的引用并入到圖形用戶界面中。在框140中,判斷能夠播放播放列表中的媒體文件的媒體播放器是否己經(jīng)安裝在實現(xiàn)本發(fā)明的方法的計算設(shè)備上。如果尚未安裝這樣的媒體播放器,則可以向所述設(shè)備提供可以通過其獲得適當?shù)拿襟w播放器的鏈接(框150)。一旦適當?shù)拿襟w播放器己被識別出并且其安裝狀態(tài)已被確認,實現(xiàn)了本發(fā)明的方法的瀏覽器就可以使計算設(shè)備加載該適當?shù)拿襟w播放器(框160)。在實施例中,媒體播放器的本身控制對用戶隱藏(框170),并且用戶可以利用圖形用戶界面所提供的控件來控制媒體播放器。在實施例中,可以在窗口中呈現(xiàn)由媒體播放器所呈現(xiàn)的任意圖像(例如,不作為限制,靜態(tài)或動態(tài)圖像、可視化工具等等),從而幫助用戶査看。在這樣的實施例中,窗口可以被附接到或嵌入到圖形用戶界面中。在替換性實施例中,本發(fā)明的方法可以允許用戶移動包含圖像的窗口。在框180中,本發(fā)明的方法監(jiān)視用戶與用戶界面元素之間的交互,并且將與用戶的交互相關(guān)聯(lián)的命令發(fā)送到所加載的媒體播放器(框190)。圖2是提供播放列表的一示例性瀏覽器可譯文檔。在圖2中,控件200幫助控制內(nèi)容條目210、220、230、240和250中的每一個的回放。內(nèi)容條目210是到使用MP3媒體類型編碼的內(nèi)容的鏈接。內(nèi)容220是使用WMA媒體類型編碼的內(nèi)容。內(nèi)容230是使用Quicktime媒體類型編碼的內(nèi)容。內(nèi)容240是使用RealVideo媒體類型編碼的。內(nèi)容250是到由內(nèi)容提供商提供的內(nèi)容的鏈接,其中內(nèi)容是使用WMA媒體類型來編碼的。傳統(tǒng)的嘗試播放該列表中所表示的內(nèi)容的媒體播放器將只能播放一內(nèi)容子集,因為有至少兩種媒體類型是私有媒體類型。結(jié)果,用戶將不得不在媒體播放器之間進行切換以收聽所表示的內(nèi)容。內(nèi)容還無法以連續(xù)流的形式播放,因為不存在媒體播放器之間的用于實現(xiàn)下一媒體播放器的回放初始化的通信。相反,通過實現(xiàn)結(jié)合了上述下層指令序列的瀏覽器可譯播放列表,用戶界面元素200可以控制用于播放該播放列表中的內(nèi)容所需的每種媒體播放器,從而提供方便、一致的用戶界面,通過該用戶界面,可以控制多個媒體播放器。圖4是提供了可被用于控制多個媒體播放器的用戶界面的替換性的示例性瀏覽器可譯文檔,其中瀏覽器可譯文檔已經(jīng)被瀏覽器所呈遞。相應(yīng)的瀏覽器可譯文件的基于文本的版本在圖13中提供。在該實施例中,播放列表已經(jīng)根據(jù)上述播放列表格式被定義。每個播放列表條目400、410、420和430包括至少一個到將被播放的內(nèi)容的鏈接、到將被顯示的唱片藝術(shù)或其他圖形的鏈接和對內(nèi)容的描述。圖形用戶界面440是由一系列指令所生成的窗口,所述一系列指令由圖13中的〈scripttype="text/javascript"src="http:〃server.yahoo.com/user/file.js"x/script〉指令所引用。用于生成這樣的圖形用戶界面和用于經(jīng)由該界面接收用戶的輸入和與用戶進行交互的示例性指令集合被包括在附錄A中,該附錄A的整體內(nèi)容通過引用被結(jié)合于此。在實施例中,這些指令可以用AsynchronousJavaScript和XML("AJAX")或其他用于產(chǎn)生交互式應(yīng)用的標準化語言來書寫。指令可以幫助加載圖形用戶界面,監(jiān)視用戶與圖形用戶界面之間的交互,并且經(jīng)由與媒體播放器相關(guān)聯(lián)的API來控制多個媒體播放器。圖5是被用于控制媒體播放器的一替換性的示例性瀏覽器可譯文檔。在圖5中,用戶已經(jīng)點擊按鈕510,以從播放列表條目410移動到播放列表條目420,并且圖形用戶界面440已被更新,以反映被播放的新內(nèi)容。圖6是被用于控制媒體播放器的一替換性的示例性瀏覽器可譯文檔。在圖6中,用戶已經(jīng)右擊圖形用戶界面440,從而使上下文敏感菜單610被顯示。在所示實施例中,上下文敏感菜單610允許用戶控制各種回放選項,包括重復(fù)播放列表以及對定義在播放列表中的內(nèi)容進行隨機選擇。上下文敏感菜單610還允許用戶指示希望在更簡化的界面中査看播放列表的需求。這樣的界面如圖7所示。圖7是一替換性的示例性瀏覽器可譯文檔,其中由瀏覽器可譯文檔所提供的用戶界面還提供對播放列表界面700的訪問。播放列表界面700可以顯示在播放列表中所引用的內(nèi)容的列表項,并且還可以允許用戶對播放列表和播放列表界面700進行控制。例如,不作為限制,播放列表界面700可以包括多個用戶界面元素710,通過這些用戶界面元素710,用戶可以保存播放列表,撤銷已經(jīng)對播放列表進行的編輯,從播放列表中刪除歌曲,開始對播放列表中的特定內(nèi)容的回放,隱藏播放列表界面等等。播放列表界面710還可以允許用戶編輯播放列表,如圖8-11所示。在圖8中,用戶已經(jīng)點擊或以其他方式選擇內(nèi)容條目810。在圖9中,用戶已經(jīng)開始拖動或以其他方式對內(nèi)容條目810進行重排序,以使其在播放列表界面中出現(xiàn)在內(nèi)容條目820之后。在圖10中,用戶已經(jīng)完成播放列表700中的內(nèi)容條目的重排序,從而內(nèi)容條目810現(xiàn)在出現(xiàn)在內(nèi)容條目820之后。圖11是一替換性的示例性瀏覽器可譯文檔,其中已經(jīng)通過從分離的瀏覽器界面向播放列表界面700拖放到內(nèi)容的URL而添加了一播放列表條目。在圖11中,用戶點擊或以其他方式選擇URL1100,并將該URL拖動到播放列表界面700中。在所示實施例中,播放列表界面700能夠基于包含在URL1100中的信息來獲得唱片藝術(shù)或與URLIIOO相關(guān)聯(lián)的其他信息。播放列表界面700隨后被更新,以包括對URLIIOO之后的下層內(nèi)容的引用。在實施例中,播放列表界面700還可以判斷用戶是否具有訪問URLIIOO之后的下層內(nèi)容的權(quán)限,如果沒有,播放列表界面700則可以幫助獲得所需的權(quán)限。圖12是一替換性的示例性瀏覽器可譯文檔,其幫助存儲播放列表。將會意識到,當用戶已經(jīng)改變了播放列表時(例如經(jīng)由播放列表界面700),用戶可能希望保存改變后的播放列表。在實施例中,用戶界面1200可以允許用戶保存改變后的播放列表,作為瀏覽器可譯文檔。在實施例中,到特定內(nèi)容流或到特定內(nèi)容的URL可能不容易獲得。例如(不希望限制本發(fā)明),某些服務(wù)提供對多個藝術(shù)家的多種形式的內(nèi)容以及關(guān)于每個內(nèi)容的信息的訪問。在這些服務(wù)中,與一項特定內(nèi)容相關(guān)聯(lián)的公共可獲得的URL—般通過ID號或名稱(例如,不作為限制,16472906)來引用內(nèi)容。訪問與內(nèi)容相關(guān)聯(lián)的URL(例如http:〃www.SomeServer.com/track/16472906)的用戶將通常看到這樣的信息頁面該信息頁面包括藝術(shù)家的名字、內(nèi)容的描述等等,以及可以通過其播放內(nèi)容的按鈕或其他用戶界面元素。雖然這里描述的是幫助訪問內(nèi)容的整體,但是在替換性實施例中,訪問可以局限于僅僅內(nèi)容的一部分。在傳統(tǒng)的媒體播放器環(huán)境中,當用戶點擊按鈕或其他用戶界面元素時,媒體播放器被啟動并且內(nèi)容被播放。在這樣的環(huán)境中,用戶通常不知道被用于訪問內(nèi)容的任何下層URL。由于公共可獲得的到內(nèi)容的URL不直接指向內(nèi)容流或內(nèi)容文件,因此用戶可能難以容易地將來自這些URL的下層內(nèi)容添加到播放列表。但是,在實施例中,瀏覽器可譯文檔可以包括用于獲取到與來自這些服務(wù)的公共URL相對應(yīng)的內(nèi)容流或內(nèi)容文件的URL的指令。在實施例中,到內(nèi)容流或內(nèi)容文件的URL可以通過訪問來自一個或多個web服務(wù)的信息來獲得。當用戶不具有對特定內(nèi)容的訪問權(quán)限時可以采取類似的手段。例如,不作為限制,特定的播放列表可以包括對存儲在遠程服務(wù)器上的內(nèi)容的引用。如果該服務(wù)器不可用,本發(fā)明的系統(tǒng)則可以訪問通過替換內(nèi)容源可獲得的拷貝。類似地,播放列表可以包括到用戶不具有適當許可的內(nèi)容的引用,并且在實施例中,本發(fā)明的系統(tǒng)可以確定下層的內(nèi)容或內(nèi)容流并嘗試為用戶定位相同內(nèi)容或內(nèi)容流的替換源。在實施例中用于下層內(nèi)容或內(nèi)容流的URL可以通過請求來自web服務(wù)的適當信息來獲得,所述web服務(wù)例如是(不作為限制)由MusciNet使用簡單對象訪問協(xié)議("SOAP")、ORB間協(xié)議("HOP")、遠程方法調(diào)用("RMI")或其他這樣的手段所提供的服務(wù)。用于獲取到用戶具有適當?shù)腄RM權(quán)限的下層內(nèi)容或內(nèi)容流的URL的示例性方法如圖16所示。在框1600中,登錄信息(例如登錄令牌)被獲取,用戶可以通過該登錄信息被標識給內(nèi)容提供商。登錄令牌相對于傳統(tǒng)的用戶名/密碼組合可能是具有優(yōu)勢的,因為這樣的令牌不需要發(fā)送密碼。雖然在該示例性實施例中使用登錄令牌,但是替換性用戶認證信息(包括傳統(tǒng)的用戶名/密碼組合)可以被用來替換,而不會脫離本發(fā)明的精神或范圍。"Cookies"或關(guān)于用戶、瀏覽器和/或設(shè)備的信息也可以從瀏覽器獲得(框1605)。登錄令牌和任意所需或所希望的cookies被傳遞到內(nèi)容提供商,并且創(chuàng)建可通過其傳遞信息的會話(框1610)。在實施例中,會話可以被加密,從而輔助瀏覽器和內(nèi)容提供商之間的安全通信。內(nèi)容提供商可以提供令牌,通過該令牌,瀏覽器可被標識為與內(nèi)容提供商的系統(tǒng)中己被正確認證的用戶相對應(yīng),其中所述令牌可被用于訪問來自一個或多個服務(wù)提供商的信息(框1615)。在所示實施例中,瀏覽器可以使用服務(wù)提供商令牌來創(chuàng)建會話,通過該會話,瀏覽器可以與服務(wù)提供商通信(框1620)。瀏覽器和/或內(nèi)容提供商可以提供關(guān)于所需內(nèi)容(例如,不作為限制,與內(nèi)容相關(guān)聯(lián)的標號)的信息,并且服務(wù)提供商可以返回可通過其訪問內(nèi)容的位置URL(框1625)。用戶的DRM權(quán)限隨后被查詢,以判斷用戶是否具有播放內(nèi)容的適當權(quán)限(框1630)。如果用戶具有允許回放內(nèi)容所需的適當?shù)腄RM許可信息,則內(nèi)容被播放(框1635)。如果用戶不具有適當?shù)腄RM許可信息,則可以向服務(wù)提供商發(fā)送特定于設(shè)備、瀏覽器和/或用戶的標識符,以發(fā)起對這樣的許可信息的獲取(框1640)。在某些實施例中,內(nèi)容提供商可以針對用戶和服務(wù)提供商之間的某些交互充當代理,并且內(nèi)容提供商和/或服務(wù)提供商可以執(zhí)行任意與交易相關(guān)的過程,例如,不作為限制,針對用戶獲取適當?shù)腄RM權(quán)限對用戶計費。在實施例中,服務(wù)提供商將適當?shù)腄RM許可信息傳輸?shù)綖g覽器(框1645),并且瀏覽器存儲該信息(框1650)。DRM許可信息可被瀏覽器通過多種手段來存儲,包括通過使用WindowsMediaPlayer數(shù)字權(quán)限管理(WM-DRM)的用戶瀏覽器的ActiveX控件或其他這樣的控件。一旦URL和DRM許可信息已被獲取,內(nèi)容就可被播放(框1655)。在實施例中,由服務(wù)提供商所提供的URL可以是臨時URL,從而幫助在每次播放內(nèi)容時核實和加強相關(guān)聯(lián)的DRM許可信息。通過這里所描述的瀏覽器可譯文檔,用戶可以容易地創(chuàng)建結(jié)構(gòu)化的播放列表,并且通過單個用戶界面來播放這些播放列表中的內(nèi)容,而與負責播放內(nèi)容的媒體播放器無關(guān)。雖然這里已經(jīng)描述了用于控制多個媒體播放器的瀏覽器可譯文檔的詳細和特定實施例,但是本領(lǐng)域技術(shù)人員將會意識到,在不脫離用于控制多個媒體播放器的瀏覽器可譯文檔的精神和范圍的情況下,可以進行各種改變和修改。因此,在修改和變化落在任意所附權(quán)利要求和/或它們的等同物的范圍內(nèi)的情況下,希望本公開覆蓋這些修改和變化。附錄A〃//Goose.js//Copyright(c)2006Yahoo!Inc.Allrightsreserved.〃〃〃〃Include"http://us.js2.yimg.com/us.js.yimg.com/1ib/common/utils/2/yahoo—2.0.0-b2.js〃/*Copyright(c)2006Yahoo!Inc.Allrightsreserved.Vvar//SomeSupportedMIMETypesYAHOOymuwmpTypes=newArray()^YAHOOymuwmpTypes:"text/plain"〗=true/YAHOOymuwmpTypes:"video/ms-asf"]-true-YAHOOymuwmpTypes:"video/iTis-wma''j-true,'YAHOOymuwmpTypes:"video/ms-wmv"]-trus,'YAHOOynrnwmpTypes:"video/x-ms-asf"〗=true,-YAHOOymu畫pTypes"audio/ms-asf"]-true,.YAHOOymuwmpTypes"audio/ras-wma,,〗-true,'YAHOOymuwmpTypes"audio/ms-wmv"]=true,'YAHOOymuwmpTypes"audio/x-ms—asf"]=true-YAHOO,ymuwmpTypes"audio/x-nis-wma"]=true/YAHOOymuwmpTypes"audio/x-ms—wmv(']=true,'YAHOO.ymuwmpTypes,'application/ogg"〗=true,'YMOO.ymuwmpTypes"audio/mpeg1']=true,.//SOAPRequestFunctionsYAHOO.ymu.makeLaunchSoapRequest-function(request,operation,parametersmainRequest,callback}tryif(request==null)request-YMOOymu,createXMLHttpRequest(),'request.abort()7request,onreadystatechange。function(}if((request!=null)&&(request.readyState==4》)correctly://Preventcodefrombeingre-entered:varme=request,'request=null,me.onreadystatechange=YAHOO.ymu.nullFunction,'callback,call(me),'//SetallparameterstonulltoensureGCcleansupme=null;operation=null,'parameters=null;mainRequest=null,-callbacknull,'request,cpen("POST",(mainRequest)""http://webservice.launch.yahoo.com/musicclient/main■asrax""http://websvice.launch.yahoo.com/musicclient/radio.asmx"frequest.setRequestHeader("SOAPAction","urn:yahoo:music:webservice/"+operation),'request,setRequestHeader("Content—type","text/xml,,charset=utf-8"),'varsoapBody=newArray(》,'soapBody[O]='<7xinlversion="l-0'Tencoding=t,"utf-8,,"?><soap:Envelopexmlns:xsi="http://www,w3.org/2001/XMLSchema-instance"xmlns:xsd-"http://www.w3>org/2001/XMLSchema"xinlns:soap^"http://schemas.xmlsoap.org/soap/envelope/"xsoap:Bodyx1;soapBociy[l〗-operation^soapBody[2]='xmlns-"urn:yahoo:rausic:webservice">','soapBody[3];parameters,,soapBody[4]=■</,''soapBody〖5]=operation/soapBody[6J=,><Vsoap:Body></soap:Envelope>'request.sencl(soapBody.join(""》》,-catch{e)(requestnull)request.onreadystatechangerequestnull,'callback,call(null)^YAHOO,ymu,11Functionreturnrequest'.YAHOO.ymu.makeMusicNetSoapRequest=function(request^operation,parameters,csllbacIOvarneedHttps=(operation"Login")r'tryif(request==nuU〉request=YAHOO,y腿.createXMIiHttpRequest(〉,'request.abort(),'request.onreadystatechange=function()if((request11)"(request,readyStatecorrectly://Preventcodefrombeingre-entered:varme=request;request=null,'me.onreadystatechange=YAHOO.ymu,nullFunct丄orwcallback,call(me),'//SetallparameterstonulltoensureGCcleansupme=null,'operation=null;parameters=null,'callback=null;request,open("POST","http"+((needHttps)"s":,',,)+"://stgapp,rausicnet.com/jboss—net/services/Fulfillment',,true),'request.setRequestHeader("SOAPAction',,,'http://ws.rausicnet.com/"+operation),'request,setRequestHeader("Content—type",、'text/xml,.charset=utf-8")varsoapBody-newArray()jsoapBody[O]-,〈?xmlversion="l,0"encoding='rutf-8"><soap:Envelopexmlns:soap="http:〃schemas,xmlsoap,org/soap/envelope/,'xriilns:xsi='rhttp://www'w3.oj:g/2001/XM:LSchenia-instance"xmlns:xsd-"http://www,w3.org/2001/XMIiSchema"><soap:Body><','soapBody〖1]-operation'.soapBody〖2J='xmlns-"http://ws,musicnet,coiW,soapBody[3]-parameters,'soapBody[4]='</','soapBody[5]=operation,'soapBody[6]='></soap:Body></soap:Erwelope>T,-request■send(soapBody.join("")>/catch(e)if(request!=null)request.onreadystatecharige=YAHOO.ymu,nullFuncti0n7request=null,'callback.call(null);returnrequest,-YAHOO.ymu,DEFAULT—IMAGESRC="http://us.entl,yimg,com/images,launch,yahoo.com/noPicturellQ.jpg";//Thesecanreturnnullorthevaliddata:YAHOO.ymu,getXMLFromNode=function(nodeList,index,item)varxml=null,'trydataNodeList=nodeList.item(index).selectNodes(item)』varlength=dataNodeljist.length,'if(length>0>xml=dataNodeList.item(0),xml;catch(e)dataNodeList=null,'returnxml'*Y朋00,ymu,getDataFromNocie-function(node!List,index,item)vardata:mill,'vardataNode匸isttrydataNodeList=node!List-item(index),selectNodes(item),-varlength=dataNodelj丄stlength,'if(length>0)data-dataNodeList.item(O).firstChild,data;C3tch(e)dataNodeljist-rmll,'returndata,'YMOCKymu.getDataFromTSlocieOffset=function(nodeliist,index,item,offset)vardata-null/vardataNodeListtryciatsNocieljist=nodeList,item(index)-selectNodes(item);vai:length=dataModeljist;.length,'if(length>0)data=dataNodeList.itemMath.max(length-l-offset,0)).firstChild.data,'catch(e)dataNodeList=null/returndata,'YAHOO.ymu.getAttribFromNode=function(nodeList,index,item)varvalue=null,*var:attrib,'tryattrib=nodeList,item(index>.attributes,getNamedltera(item),if(attrib卜null)value-attrib,value;catch(e)attrib=rmll^returnvalue,'YAHOO,yrnu.getImageSrcFromNode-function(nocleList,index,itemroffset}varimageSrc=YAHOO,ymu,getDataFromModeOffset(nodeList,index,item,offset)27return(imageSrcnull)imageSrc:YAHOO.yitm,DEFAULT—IMAGESRC,'null;YAHOO.ymu.YMUScmg-function(songID,streamID,componentID,title,artist,album,trackNum,songURI;,artist工D,albumID,albumArtURL,sampleID)this,song工D=song工DIInull,,this-streamID-stream工D11null,,this,component工D=componen仁ID|jthis.title=titleIInull,'this.artist=artistUnull;this.album=albumj|null,-this.trackNum-trackNum||null/this,songUR!L=songURLiUnull'-this.artistlD-artistIDIInull;this.albumID=album工OIInull;this.albumArtTOL=albumArtURLtlthis-ssmple工D=sample工D||null;this,idGUI=null;YAHOQ,ymu.YMUSong.prototype=uiLoginCallback:null,setU工IjoginCallback:function(callback)(//SetsstaticUIfunctionthatreturnsMusicNettokenYAHOQ.ymu,YMUSong.prototype.uiLoginCallback=callback'.YAHOO.ynm,DEFAULT—IMAGESRC;—onGetSonglnfo:function(callback,yirmSong)T(ymuSongnull)ifthis,songID=ymuSong"songID;this■streamID==ymuSong.streamID;this-component!CD-ymuSong,component工D;this.title=ymuSong,title,'this,artistymuSong,artistzthis,album=ymuSong,album;this,trackNum=yiruiSong.trackN頭;this.songURIi=ymuSong.songTOIj''this,artistID=ymuSong,artistID/thisalbum工D=ymuScmg,albumlD'-this.albumArtURL-ymuSong.alburaArtURL;thissample工D=ymuSongsample工D,'callback.call(this}//HandlerforYAHQO.ymu,YMUMusicNet-doLogin()completion:—getSonglnfoWithliOg丄n:function(callback,logged工n)了varYMU-YAHOO,ymu,-YMUYMUMusicNet.getSongInfo(this,true,newY亂Callback(this.—orxGetSonglnfo,this,callback))z},_—onGetSonglnfoU工Callback:function(callback,attemptLogin}TvarYMU-YAHOO,ymu'.if(atteraptLogin)YMU,YMUMusicNet.doLogin(YMU.YMULogin,getMusicNetToken()YMU,YMULogin,getMachineID(),YMU.Callback(this.—getSonglnfoWithLogin,this,callback));}—YMU.YMUMusicNet.setClipPreviewState(true)thisgetSongInfoWithLogin(callback,false》}一getSonglnfo:function(getURL,calback)if(this.songID==null)//NotaYMUtrack:callback,call(this》elseif(getURIOthis.songURIj=null,'varuiljoginCallback=this,uiLoginCallback,*if(ui!LoginCallbacJcnull)callback,call(this},'varYMUMusicNet=YMU,YMUMusicNet,'if(YMUMusicNet,get:LoginState()||YMUMusicNet-getClipPreviewState(})this.一getSongInfoWithLogin(callback,true),'}一(uiLoginCallback-callPersist(newY亂Callback(this.—onGetSonglnfoUICallback,this,callback)》一>YMU.YMUMusicNet.getSonglnfo(this,false,newYMU,Callback(this.—onGetSonglnfo,this,callback))}一//PlaylistYAHOO,ymu,Playlist=function()this.clear(),'YAHOO.ymu.Playlist.prototype=append:function(song)this.list.push(song)insert:function(index,song)this,list,splice(index,0,song),'move:function(oldlndex,newlndex)varmax=this.getListCount(》;if((oldlndex1=newlndex》"{oldlndex>=0)"(old工ndex<max)"(new工ndex>=0)"(newlndex<max))varcurrentlndex=this,current,'if(currentlndex==olcilndex)this,current=newlndex,'elseif((currentlndex<oldlndex)"(currentlndex>-new工nciex)>thiscurrent++'.elseif((current工ridex>old工ndex)(curren匕Index<=newlndex))this,current—,'varitem=this.list.splice(old工ndex,1);this,list,splice(newlndex,0,(丄tem,length===undefined)item:item:null,'getCur:centSong:function()return(this,current<this.list.length)this.list[this.current]:setCurirentlndex:function(index)varvalidlndex=((index>=0)&&(index<this,listlength)),'if(validlnde:x:).{this.current=index,'>returnvalidlndex,'getCurrentIndex:function()returnthis.current/getliistCcmnt:function()returnthis*list.length/destroy:function()this.list=null,*//PlayerYAHOO.ymu.Playerfunction()this.event=newYAHOO.util.CustomEvent("player'this.playlist=newYAHOO.ymu.Playlist(),'this.currentURL=null,'thisstateRepest=true;this.stateShuffie=false,',this)trythis■this,this■this.catch(e)this.this.thiswrap=newActiveXObject(,'WMPlayer.OCX")wmpControls=this,wmp,controls'-wmpSettings=this,固p.settings;wmpSettings,autostart=true;wmpSettingswmpControlswmp=null,'null,'null;YAHOO.ymu.Player.prototype//WMPPlayStateenumerationvalues:WMPPLAYSTATE:UNDEFINED0,STOPPED1/PAUSED2,PLAYING3,SCANFORWARD4,SCANREVERSE5,BUFFERING6,WMTING7,MED工AENDED8,TRANSITIONING9,READY10,RECONNECTING11,LAST12wmpPlayStateToText:["Undefined","Stopped","Paused","Playing","ScanningForward","ScanningBackwards''■Buffering…,","Waiting.,","MediaEnded","Transitioning...","Ready","Reconnecting"EV麗S:GET—SONG—INFO:0x01,GET二CONTROL一STATE:0x02GST二STATUS-.—0x04,REVESTING—SONG:0x08,PLAYL工ST—C五EAR:0x10,PLAYL工ST一APPEND:0x20//WindowsMediaPlayerEventHandlers一onCurrentltemChange:function(media)varEVENTS=this.EVENTS/this,event,fire{EVENTS.GETSONGINFO|EVENTS.GETCONTROLSTATE)onEri:o:r:function()varEVENTS=this.EVENTS;this.event.fire(EVENTS.GETSONG工MFO|EVENTS.GETCONTROLSTATE)onModeChange:function(modeNarae,newValue)—onPlayStateChange:function(newState)T//seturl:transitioning—>:ready//play:transitioning->playing//songends-mediaEnded->Transationing—>StoppeclvarWMPPLAYSTATE=this.WMPPLAYSTATE;//Ifmediahasended,skiptothenextsongifrequired:if((newState==WMPPLAYSTATE,MEDIASN,》"((!this'playiistisCurrentLastlnList())||this,stateRepeat))varme=this;setTimeout(function(){me.next(),'me-null},1);if((newState==WMPPLAYSTATE.READY)||(newStateWMPPLAYSTATE'STOPPED)M(newState==WMPPLAYSTATE.PAUSED)||(newStateWMPPLAYSTATE.PLAYING)II(newState--WMPPLAYSTATE.MED工AENDED)}this*event.fire(this.EVENTS,GET—CONTROL—STATE),'}—一—onStatusChange:function()仁his,event,fire(this.EVENTS,GETSTATUS)//EndWindowsMediaPlayerEventHandlersinitEvents:function()tif(this,wmp!=null)■vsi:YMU=YAHOO,ymu,'YMU,addScript(,,YAHOO一wmpeventsJs',,YMU.gooseRoott)RL+"wmpevents.js",3addSubscriber:function(fimcHandler,subscriber)this.event.subscribe(funcHandler,subscriber,true}removeSubscriber:function(funcHandler,subscriber)this,event.unsubscribe(fimcHandler,subscriber),'appendToPlaylist:function(song)this-playlist.append(song),'this.event,fire(this,EVENTS,PLAYLIST—APPEND,song),'this,event.fire(this.EVENTS.GET一CONt5oL一STATE);movePlaylistItem:function{oldlndex,new工ndex)this,playlist.move(oldlndex,newlndex),'learPlaylist:function()this.playlist-clear()/this.stop();this■event■fire(this,EVENTS.GET_SONG—INFOthis,EVENTS,PLAYLISTCLEAR),'一—getCurrentSong:function()returnthis,playlist.getCurrentSong()getCurrentlndex:function()returnthis,playlist,getCurrentIndex()7playSongAt-function(index)this.stop(》if(this,playlist,setCurrentlndex(index))this,play()removeSongAt:function(index)(if((index==this.playlist,getCurrentlndex())"this.getPlayState。"this.WMPPLAYSTATE,PLAYING))if(this.isNextAvailableO)this-next()this.stop(),'this.playlist,remove(index)getCurrentPlaylist:function()returnthis.playlistz—playGetSonglnf0D0ne:function(song)Tif((this.wmp!-null)"(song.songURLnull)"(songthis.getCurrentSong()))trythis*wmp丄RIj=song.songURlj,'this.currentURIi=song,songURIj''this.event.fire(this.EVENTS.GET—CONTROLSTATE);}——cstch(e)play:functioji()if(this.wmpnull)varsong=this.getCurrentSong()if{song卜null)<varEVEMTS^this.EVENTS,■if((song.songTOIi!=null)(thiscurrentURIjsong.songURL))varcontrols=this.wmpControls,-if(controlsnull)controls,play(),'this.event.fire(EVENTS.GET—CONTROL—STATE)}——elsesong.getSongInfo(true,newYAHOO.ymu.Callback(thisplayGetSonglnfoDone,this)),'Ehis.event,fire(EVENTS,GET—SONG—INFOIEVENTS.REQUESTING—SONG>———}catch(e〉pause:function()tryvarcontrols=this,麗pControls,'if(controls!=null)《controls,pause()^this,event'fire(this.EVENTS.GET—CONTROL—STATE);}——catch(e}stop:function()tryvarcontrols=this.wmpControls/if((this-wmp!=mill)"(controlsnull)){controls.stop(),'this,cu;crentUR;L=this.wmp.URL-this,event,fire(this.EVENTS.GET—CONTROL—STATE)}一一catch(e)next:function()this,stop()this,playlist,next{>this.play()zprevious:function{)this.stop(),'this.playlist,previous(),'this.play(),*getPlayState:function()varstate=this.WMPPLAYSTATE.UNDEFINED,'tryifcatch(ereturn(this,winpnull)state=this.wmp.playState,-state,.getStatus:function(>varstatus=try{if(this,wmp!=null)(status=this.wmp,status,'}catch(e)returnstatus,.getDuration;functionOvarduration=l,'tryif(this.wmp!-null)vai:mediaif(media!={durationthis,wmp,currentMedia;null)media,duration;catch(e》returnduration;getDurstionString-function()varduration=",','tryif(this.wmp!varmediaif(medianull)this,winp,currentMedia/-null)duration=media-durationString;catch(e)returnduratiorwgetTiraeString'.function()returnthis■—getPlayerValue(this.wmpControis,"currentPositionString"),'一putPlayervalue:function(type,setting,value)7tryif(type!=null)type[setting]1catch(e)一getPlayerValue:function(type,setting)Tvarvalue=O,'if(type!=rxull》value=type[setting]catch(e)returnvalue-setSeek:function(position)//position:thetimetoseektoinseconds.this,—putPlayerValue(this.wmpControlsr"currentPosition1',position)■getSeelc:function()returnthis,—getPlayerValue(this.wmpControls,"currentPositicm")^setVolume:function(volume)this.一putPlayea:Value(this,wmpSettings,"volume",Math.min(Math,max(0,volume),100));getVolume:function()returnthis.—getPlayerValue(this.wmpSettings,"volume"),.setMute■function《nujte)this,_putPlayerValue(this.wmpSettings,"mute",腿te);getMute:function()returnthis—getPlayerValue(this.wmpSettings,"mute");setRepeat:function(repeat)this,stateRepeat=repeat,'getRepeat:fimction()returnthis.stateRepeat,'setShuffie:function(shuffle)this,stateShuffle-shuffle;getShuffle:function()returnthis,stateShuffle'-isControlAvailable:function(control)varavailable=false;tryvarcontrols=this.wmpControls,.if(controlsnull)available=controls.isAvailable(controlcatch(e)returnavailable/isPlayAvailable:function()return((!this.playlist*isListEmpty())"thisisControlAvailable("play"));isPauseAvailable:function()returnthisisControlAvailable("pause");isStopAvailable:function()returnthis.—isControlAvailable("stop"),'isNextAvailable:function()return(this,playlist.getListCount()>i〉;isPreviousAvailable:function()return(this,playlist-getL丄stCount()>1);isSeekAvailable'.function<)returnthis,—isControlAvailable("currentPosition")destroy:function()if(this,playlistnull)ififthis.playlist,destroy(),'this.playlist=null;(this.wmpContzrols!=null)this,this,(this.this■wmpControls,stop()wmpControls=null,'wmpwmp=null)null/this,event=null^this,currentURL-null,'〃GUIYAHOO.ymu.GUI=function()this.btnliogo=null;this.btnPrev二rmll,'this.btnPlay=null/this,btnNext=null,'this,t)tnStop=null,'this.btriMute=this.thumbSeek=null,'this,thumbVolume=null;this,player=null,'this.playlist=null,*this.btnSignIn=null,'this.btn30Sec=null,'this,btnRemernberMe-null;this.playTimer=null,'this,statusTiiuer=null,'this,loginStatusTimer^null/this.forceStatusDisplay=false;YAHOO.ymu.GUI-prototype=—onliOginKey:function(theEvent)Tif(theEvent,keyCode-13){、this.btnSign工n,clicklt(true),—onljogin:function(callback,loggedln)Tthis,btnLogothis.btnPrevthis,btnNextthis.btnStopif(logged工n)thisremoveLoginPanel();callback,call(true)/varU工=YAHOO,yrroi—ui;varFILTER—ALPHA=',DXImageTransforra.Microsoft.alpha*1for{variinthis.opacityE丄ements)ivarel=U工.getElementBy工d(this,opacityEleinerits[i])if({el!=null)(el,filters!=null))el.filters.item(FILTER—ALPHA).opacity=100;1—vartextID=UI'getElementBy工d("YAHOO—ymu—player—login—ID")textID,disabled=false,'UI.getElementById<"YAHOO—ymu—player—login—password"),disabled=fslse'-this.btnSign工n.enable(true),■this.btnRenieinberMe,enable(true)/.enable(true),■.enable(true),',enable(true),'.enable(true)zU工.setlnnerText(UI,getElementByld(',YAHOO一ymu一player一login一status"),"Sign丄nfaileci,Pleasetryagain,'1),'text工D.focus(),-//Showloginstatusfor5secondsandthenreplaceitwithbuttonfor30—secondclips:varme-this,'this,loginStatusTirner=setTiiueout(function()//Makesureloginpanelisstillthere:if((me.loginStatusTiraer!-null)"{me.btn30Sec!=null))(JI,setlnnerText(U工,getElementById("YAHOO一ynm一player一login—status"),"");me,btn30Sec.visible(true);me.bt:n30Sec,enable(true),'me.lcginStatusTimer=null;me=null,'},5000—onSigninButtonClick:function(callback)TvarYMU=YAHOO.ymu;varUI-YAHOO.ymu—ui;varFILTER一ALPHA-"DXIniageTransform.Microsoft,alpha"7vai:textID=UI,getElementBy工d("YAHOO—ymvi—player—login—ID");vartextPassword=UI■getElementBy工dl<"YAHOO—ymu—player_login—password");text工D.disabled=true,'textPassword.disabled=this.btnSignln,enable(false)7ifthis.loginStatusTiraer!=null)clearTimeout(this.loginstatusTimer),'this.loginStatusTimer=nullr'this,btn30Sec,ertab丄e(false);this,btn30Sec,visible(false),.this.btnRememberMe.enable(false),'this,btnLogo.enable(false);this.btnPrev.enable(false),'this.btnNext.enable(false);this.btnStop,enable(false);for(variinthis.opacityElements)varel=UI.getElementByld(this,opacityElements[i]);if((el!=null)"(el.filters!-null))el.filters.iteni(FILTER—ALPHA).opacity^復(fù)'}—UI,setlnnerText(UI.getElementByld("YMOO—ymu—player—login—status")"SigningintoYahoo!Music..,"),'————YMU.YMULogin,ctoIjogin(textID,value,仁extPassword,value,this.btnRememberMe.getState(),newYMU.Callback(th丄s.—onLogin,this,callback)),'—一on30SecButtcmClick:function(callback)Tthis,—removeLoginPanel();callback,call(fa丄se),.一showIjoginPanel:function(callback)Tif(this.一showingLoginPanel()》{一alert("Assertionfailurein一showLoginPanel"),'this,—removeLoginPanel(),')—thisshowPlaylistPlaylcon()/if(this,player!=null)varYMU-YAHOO.ymu,'varUI-YAHOO,ymu一ui'.varEVEMT-YAHOO,iJtil,Event;this,opacityElements=["YAHOO—ynm—player—login—instructions"YMOO—yimi—player—login—ID—caption","YAHOO—ymu_p1ayer—1ogin—工D","YAHOO—ymu_player—login—password—caption","YAHOO—y腦一player—login—password","YAHOO—ynvu_player^login—remenibe;rme—caption"]/UI.getElementBy工d("YMOO—ymu_player_J:rackpanel'f〉;if(trackPanelnull){t:rackPanel.style.display-"none",'varloginPanel=UI,getElementById("YAHOO—ymu—player—loginpanel");if(loginPanel=null〉iloginPanel,style.display="block"/loginPanel.innerHTML-'<divid="YAHOO—ymu—player—login—instructions"style-"filter:progid:DXImageTransform,Microsoft,Alpha(opacity=100),'">Toplaythistrack,signintoYahoo!Music:</div><divid="YAHOO—ymu—player—login—ID一caption,'style-"filter:progid:DX工mageTransform.Microsoft.Alpha(opacity=100),'Yahoo!工D-</div><divid-nYAHOO_ymu—player—login—ID—bg"></ciiv><inputtype=textici=,,YAHOO—ymu_player—login—ID"style-"filter:progid:DXImageTransfoon.Microsoft.Mpha(opacity=100>/"value-""/><divid="YAHOO_ymu—player—login_passwordcaption"style-"filter:progid:DX工mageTransform.Microsoft,Alpha(opacity-100)">Password:</div><divid-"YAHOO—ymu一player—丄ogin—password—bg"></div><inputtype=passwordid"YAHOO—ymuplayerlogin—password"style-,'filter:progid:DXImageTransform,Microsoft.Alpha(opacity=100);"value=',"/Xiingid=T'YAHOO—yniu_player—login—remeinberme"/><divid=',YM00—ymu—piayer一login—rememberme—caption"style="filter:progid:DX工mageTransfor:m.Microsoft.Alpha;">RememberMyYahoo!ID</div><inigid="YAHOO—ymu_player_login_signin,'/><iingid="YAHOO—ymu—p1ayer—1gin一30sec"/Xdivid="YAHOO_ymu_player—login_status"></dlv><aid="YAHO0—ymu—p1ayer—iogin_sut>scribe"PI1=1o15.—種瀏覽器可譯文檔,包括播放列表,包括多個條目,其中每個條目包括第一媒體文件或到所述第一媒體文件的指針;圖形用戶界面定義或到所述圖形用戶界面定義的指針,所述圖形用戶界面定義包括第一用戶界面元素和與所述第一用戶界面元素相關(guān)聯(lián)的功能;以及命令集合或到所述命令集合的指針,用于控制多個媒體播放器的操作;其中,當所述瀏覽器可譯文檔被傳統(tǒng)的web瀏覽器提供時,所述web瀏覽器基于所述圖形用戶界面定義來提供圖形用戶界面,并且其中所提供的圖形用戶界面控制所述多個媒體播放器之一來實現(xiàn)所述第一媒體文件的播放。16.如權(quán)利要求15所述的瀏覽器可譯文檔,其中所述圖形用戶界面定義是利用從標準化通用標記語言派生的標準化標記語言來定義的。17.如權(quán)利要求16所述的瀏覽器可譯文檔,其中所述標記語言是超文本標記語言。18.如權(quán)利要求17所述的瀏覽器可譯文檔,其中所述命令集合包括腳本語言指令。19.如權(quán)利要求15所述的瀏覽器可譯文檔,其中每個播放列表條目還包括與所述第一媒體文件相關(guān)聯(lián)的媒體類型指示符。20.如權(quán)利要求19所述的瀏覽器可譯文檔,其中所述命令集合包括如下指令所述瀏覽器能通過所述指令來判斷能夠播放所述第一媒體文件的媒體播放器是否被安裝在所述瀏覽器正在其上運行的計算設(shè)備上,并且其中該判斷是至少部分地基于與所述第一媒體文件相關(guān)聯(lián)的所述媒體類型指示符來進行的。全文摘要一種瀏覽器可譯文檔包括第一媒體文件或到第一媒體文件的指針;圖形用戶界面定義或到圖形用戶界面定義的指針,所述圖形用戶界面定義包括第一用戶界面元素和與第一用戶界面元素相關(guān)聯(lián)的功能;以及命令集合或到命令集合的指針,用于控制多個媒體播放器的操作;其中,當瀏覽器可譯文檔被傳統(tǒng)的web瀏覽器提供時,所述web瀏覽器基于圖形用戶界面定義來提供圖形用戶界面,并且其中所提供的圖形用戶界面控制多個媒體播放器之一來輔助第一媒體文件的播放。文檔編號G06F17/00GK101636730SQ200880009030公開日2010年1月27日申請日期2008年3月13日優(yōu)先權(quán)日2007年3月20日發(fā)明者卡爾·索比斯凱,盧卡斯·岡澤申請人:雅虎公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1