首先,需要特別感謝藍斯老師的資料,我這里有很大一部分是參考藍斯老師的,附上傳送門:http://blog.csdn.net/lancees/article/details/9178385
一、DLNA相關(guān)設(shè)備說明
DMS:Digital Media Server的縮寫,把本設(shè)備內(nèi)的多媒體文件(自己控制需要共享哪些文件)到DLNA服務(wù)端;
DMP:Digital Media Player的縮寫,可以搜索局域網(wǎng)內(nèi),所有DMS提供的多媒體內(nèi)容,并在本設(shè)備播放;
DMC:Digital MediaController的縮寫,作為控制DMP搜索播放DMS的內(nèi)容,與DMP不同,DMC可以控制局域網(wǎng)內(nèi)的其他設(shè)備的DMS和DMP之間的交互,比如,pad作為DMS,機頂盒做DMP,手機用做DMC,三個設(shè)備在同一局域網(wǎng)內(nèi),手機可以直接控制讓機頂盒播放pad里面共享出來的多媒體;
DMR:Digital Render的縮寫,作用:DMP+DMR。
一般來說,播放器中的DLNA功能具有DMS+DMC功能,如PPTV等,也就是說播放器能夠找到該局域網(wǎng)下的DMP服務(wù)端,同時能把自己的多媒體文件推送到DMP上
而作為服務(wù)端一般會實現(xiàn)DMR功能,即可以播放DMS上的多媒體文件。
DLNA技術(shù)是采用upnp協(xié)議進行通信傳輸。
二、UPnP設(shè)備工作過程
UPnP定義了設(shè)備之間、設(shè)備和控制點、控制點之間通訊的協(xié)議。完整的UPnP由設(shè)備尋址、設(shè)備發(fā)現(xiàn)、設(shè)備描述、設(shè)備控制、事件通知和基于Html的描述界面幾部分構(gòu)成。
1.設(shè)備尋址
uPnP網(wǎng)絡(luò)的基礎(chǔ)就是TCP/IP協(xié)議族,UPnP設(shè)備能在TCP/IP協(xié)議下工作的關(guān)鍵就是正確的設(shè)備尋址。一個UPnP設(shè)備尋址的一般過程是:首先向 DHCP服務(wù)器發(fā)送DHCPDISCOVER消息,如果在指定的時間內(nèi),設(shè)備沒有收到DHCPOFFERS回應(yīng)消息,設(shè)備必須使用 Auto-IP完成IP地址的設(shè)置。使用Auto-IP時,設(shè)備在地址范圍169.254/169.16范圍中查找空閑的地址。在選中一個地址之后,設(shè)備測試此地址是否在使用。如果此地址被占用,則重復(fù)查找過程直到找到一個未被占用的地址,此過程的執(zhí)行需要底層操作系統(tǒng)的支持,地址的選擇過程應(yīng)該是隨機的以避免多個設(shè)備選擇地址時發(fā)生多次沖突。為了測試選擇的地址是否未被占用,設(shè)備必須使用地址分辨協(xié)議(ARP)。一個ARP查詢請求設(shè)置發(fā)送者的硬件地址為設(shè)備的硬件地址,發(fā)送者的IP地址為全0。設(shè)備應(yīng)該偵聽ARP查詢響應(yīng),或者是否存在具有相同IP地址的ARP查詢請求。如果發(fā)現(xiàn),設(shè)備必須嘗試新的地址。
2.設(shè)備發(fā)現(xiàn)
一旦設(shè)備連接到網(wǎng)上并且分配了地址,就要進行發(fā)現(xiàn)的操作了。設(shè)備發(fā)現(xiàn)是UPnP網(wǎng)絡(luò)實現(xiàn)的第一步。設(shè)備發(fā)現(xiàn)是由簡單發(fā)現(xiàn)協(xié)議SSDP(Simple Service Discovery Protocol)來定義的。在設(shè)備發(fā)現(xiàn)操作之后,控制點可以發(fā)現(xiàn)感興趣的設(shè)備,并使得控制點獲得設(shè)備能力的描述,同時控制點也可以向設(shè)備發(fā)送命令,偵聽設(shè)備狀態(tài)的改變,并將設(shè)備展示給用戶。
3.設(shè)備描述
uPnP網(wǎng)絡(luò)結(jié)構(gòu)的第二步是設(shè)備描述。在控制點發(fā)現(xiàn)了一個設(shè)備之后,控制點仍然對設(shè)備知之甚少,控制點可能僅僅知道設(shè)備或服務(wù)的uPnP類型,設(shè)備的UUID和設(shè)備描述的URL地址。為了讓控制點更多的了解設(shè)備和它的功能或者與設(shè)備交互,控制點必須從發(fā)現(xiàn)消息中得到設(shè)備描述的URL,通過URL取回設(shè)備描述。
4.設(shè)備控制
設(shè)備控制是uPnP網(wǎng)絡(luò)的第三步。在接收設(shè)備和服務(wù)描述之后,控制點可以向這些服務(wù)發(fā)出動作,同時控制點也可以輪詢服務(wù)的狀態(tài)變量值。發(fā)出動作實質(zhì)上是一種遠程過程調(diào)用,控制點將動作送到設(shè)備服務(wù),在動作完成之后,服務(wù)返回相應(yīng)的結(jié)果。
5.事件通知
設(shè)備事件是uPnP網(wǎng)絡(luò)的第四步。一個服務(wù)的UPnP描述包括服務(wù)響應(yīng)的動作列表和運行時模擬服務(wù)狀態(tài)的變量列表。當這些變量改變時,服務(wù)就會發(fā)布更新,則控制點就會收到設(shè)備事件。
6.展示
只要得到了設(shè)備的ULR,就可以取得該設(shè)備表達頁面的ULR,然后可以將此表達納入用戶的本地瀏覽器上。這部分還包括與用戶對話的界面,以及與用戶進行會話的處理。
三、開發(fā)步驟
1.下載PlatinumKit開源庫