• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 消費電子 > 設計應用 > UPnP媒體播放器的研究與實現

    UPnP媒體播放器的研究與實現

    作者: 時間:2009-12-09 來源:網絡 收藏
    1 引言
    通用型即插即用(Universal Plug and Play)是PnP(Device Plug and Play)的擴展,它可發現和控制各種網絡設備,如網絡打印機、Internet網關等,并能提供相應服務。但不是即插即用的簡單擴展,它支持“0配置”和無線網絡,可自動發現其他供應商提供的設備。在協議下,一個設備可動態的加入網絡,獲得IP地址,廣播其功能,并了解其他設備的功能。很多種類的設備都可以使用UPnP協議,包括智能設備,無線設備。
    UPnP使用標準的TCP/IP和Internet協議,能夠很好的在現存網絡中使用,使用這些標準協議使UPnP可從已有的各種經驗和知識中獲利,打破各種信息孤島,越過各種物理層,可以是有線的,也可以是無線的,具有設備間的相互協作基本特點。
    目前,DLNA(現代數字家庭)是一個非常活躍的領域,UPnP是其中的主流協議之一。DLNA/UPnP的遠景是構建一個有線與無線的互操作網絡,由個人電腦、家用電器和移動設備組成,在家庭內部設備互聯和網絡控制,從而影音娛樂、內容共享。
    UPnP組成包括設備節點,服務節點和控制節點。在UPnP網絡中,最小的可控制單位是服務,采用一系列的狀態變量描述服務的“行為”和“狀態”。UPnP使用各種現存的標準協議口,包括TCP/IP、HTTP,HTTPU、SSDP、GENA。使用標準化的協議保證了各種設備間的互操作性。總之,UPnP建立在各種協議之上,而不是API上,這使其能應用在各種不同的平臺上。同時,建立在各種現存的標準之上,具備很強的靈活性,可很好的適應現在和將來各種網絡設備的需求。

    2 UPnP設計的基本思想
    2.1 功能描述
    UPnP網絡可以提供從網絡中獲取的各種娛樂信息,它允許控制節點對其進行控制。此外,根據所支持協議的不同,播放器也可以提供對數據流進行控制的功能。一個標準的UPnP網絡包含播放控制服務、連接管理服務和媒體傳輸服務。任何媒體播放器都至少提供兩種服務:播放控制服務和連接管理服務,媒體傳輸服務是可選的,它取決于設備所支持的傳輸協議。這里設計使用的協議是HTTP GET,能提供媒體傳輸服務,因而可以在數據傳輸過程中控制數據流。
    2.2 過程描述
    媒體播放器可由控制節點在局域網內對媒體服務器所提供的媒體進行播放控制。媒體服務器、播放器、控制節點3者的互動過程如下:控制節點使用SSDP協議在局域網內發現一個或多個媒體服務器和媒體播放器,首先定位媒體服務器上的資源,并需明確在服務器和播放器之間傳輸數據所需的協議和它們都支持的數據格式。這些傳輸參數都被確定后,控制節點就可以對傳輸的內容進行控制,如播放、暫停、停止等。真正的數據傳輸是在服務器和媒體播放器之間直接進行的,并且獨立于控制節點,因此不包含在UPnP內。即內容的傳輸是使用UPnP以外的協議。之后,控制節點使用媒體服務器所提供的內容目錄服務來獲取該服務器所支持的協議和數據類型,使用媒體播放器的連接管理服務來獲取相應的信息,比較后選定雙方都支持的傳輸協議和數據類型。在本設計中,使用的傳輸協議是HTTP GET,所支持的數據格式為MP3。最后,控制節點使用媒體播放器提供的媒體傳輸服務來控制數據流。

    本文引用地址:http://www.czjhyjcfj.com/article/166840.htm

    3 UPnP媒體播放器的方法
    設計使用Intel公司的開源UPnP開發工具Device-Builder,在Microsoft.NET Framwork下開發。DeviceBuilder生成的UPnP協議棧由MiniServer模塊、HTTP模塊、線程庫模塊、XML解析模塊及協議棧編程接口等模塊組成,負責提供基本的UPnP功能,具體實現流程如下。
    3.1 生成UPnP框架
    使用DeviceBuilder生成相應平臺上的代碼,由于是在Microsoft.NET Framwork下開發,所以選擇的Target Platform應為:Windows 98,NT,XP。具體功能有:尋址、發現、描述、控制、發布事件。各功能組合在一起,為媒體播放器提供UPnP能力,但Intel開發包生成的僅是一個框架,還要為其添加解碼、控制功能及對播放列表的識別等。
    3.2 添加媒體解碼庫
    下載一個開源的播放器,將其改造成媒體解碼庫。即將播放器的功能抽象成函數以供外界調用,主要函數如下:
    int decodestart(char*pBuffer):調用該函數開始播放,相當于原來播放器的play功能。pBuffer是一個公共緩沖區,存放已下載的媒體數據。
    extem void Read(int*position):負責向公共緩沖區中裝入已下載的媒體數據,position指針則對應于公共緩沖區中應裝入的位置。由于一般下載的速度遠大于解碼速度,所以應注意裝入新數據時不要將尚未解碼的數據覆蓋掉。
    extern void Decode(int*Dposition):當外界調用該函數時開始解碼,Dposition則指示對應于公共緩沖區的解碼位置。
    此外還有pause,resume,stop等函數,均對應于原播放器的相應功能。將已實現的媒體解碼庫添加到生成的UPnP框架,再在UPnP框架中相應的位置調用庫文件中的函數以實現解碼、播放控制。
    3.3 播放控制功能實現
    添加媒體解碼庫后。還需添加:數據流實時控制能力、根據播放器的狀態發布消息。詳細過程如下:
    (1)設置傳輸地址 當控制節點從媒體服務器選定一首歌時,則觸發設置傳輸地址(由媒體傳輸服務提供)這一動作。這時,如果播放器正在播放,首先要停止播放器的解碼動作,為新歌曲的播放做準備。接下來,在播放器獲得所選定歌曲的地址后(由控制節點提供),直接從媒體服務器中下載這首歌曲,在此項目中,播放器采用HTTP GET下載。下載前,還需對該URL進行判斷,查看下載的是否為播放列表,如果是播放列表,就不能將其直接傳給播放器,而要繼續從播放列表提供的地址中得到第1首歌的URL,再從媒體服務器中下載。最后,調用函數SetLastChange發布自己的狀態信息。
    (2)數據流實時控制在下載的大小達到一定長度時,觸發傳輸控制服務中Play這一動作,這時,主線程創建一個解碼線程,該線程調用媒體解碼庫中的decodestart(char*pBuffer)函數,對存放在公用緩沖區中的數據進行解碼并播放,進行同步控制,以免當網絡出現擁塞或系統內存不足時,緩沖區中的播放指針超過下載指針而導致意外。如果選定的是含有多首歌曲的播放列表,則過程類似,只不過在一首歌曲播放完時會自動從媒體服務器端下載另一首歌曲,一邊下載,一邊播放。當用戶點擊next,previous時,首先檢查之前保存的URL是否為播放列表,若不是,則輸出錯誤信息;若是,則停止播放器的解碼動作,撤銷當前解碼線程,為新歌的播放做準備。由播放列表得到下一首歌的地址和端口號,開始下載數據,并創建新的解碼線程,最后,發布狀態信息。


    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 灵川县| 旬阳县| 平定县| 大安市| 福泉市| 观塘区| 社旗县| 唐山市| 武清区| 开封市| 台山市| 石林| 浦县| 北安市| 奇台县| 新闻| 宁德市| 靖宇县| 云阳县| 裕民县| 光山县| 中方县| 呼玛县| 醴陵市| 潮安县| 齐齐哈尔市| 修武县| 三原县| 清镇市| 芜湖市| 乌兰察布市| 肇源县| 时尚| 桦甸市| 米泉市| 容城县| 哈巴河县| 鄂尔多斯市| 仁化县| 银川市| 涪陵区|