前言

最近有點(diǎn)時間,請隨意記住之前關(guān)于UPnP技術(shù)的現(xiàn)實,想想需要好好整理一下。

2016年做了一個項目有這種需求:將手機(jī)本地音樂或者其他第三方的音樂資源送到一款智能音樂播放設(shè)備進(jìn)行播放,當(dāng)時就懵逼啦!最后也是通過網(wǎng)上找資料才實現(xiàn)的,雖然功能實現(xiàn)了,但是感覺現(xiàn)在有必要整理一番,順便講講心得哈!

正文

DLNA,這里就借用百度百科上的吧:

DLNA的全稱是DIGITAL LIVING NETWORK ALLIANCE(數(shù)字生活網(wǎng)絡(luò)聯(lián)盟), 其宗旨是Enjoy your music, photos and videos, anywhere anytime, DLNA(Digital Living Network Alliance) 由索尼、英特爾、微軟等發(fā)起成立、旨在解決個人電腦,消費(fèi)電器,移動設(shè)備在內(nèi)無線網(wǎng)絡(luò)和有線網(wǎng)絡(luò)的互聯(lián)互通,使得數(shù)字媒體和內(nèi)容服務(wù)的無限制的共享和增長成為可能,目前成員公司已達(dá)280多家。

UPnP

通用即插即用(英語:Universal Plug and Play,簡稱UPnP)是由“通用即插即用論壇”(UPnP? Forum)推廣的一套網(wǎng)絡(luò)協(xié)議。該協(xié)議的目標(biāo)是使家庭網(wǎng)絡(luò)(數(shù)據(jù)共享、通信和娛樂)和公司網(wǎng)絡(luò)中的各種設(shè)備能夠相互無縫連接,并簡化相關(guān)網(wǎng)絡(luò)的實現(xiàn)。UPnP通過定義和發(fā)布基于開放、因特網(wǎng)通訊網(wǎng)協(xié)議標(biāo)準(zhǔn)的UPnP設(shè)備控制協(xié)議來實現(xiàn)這一目標(biāo)。

網(wǎng)上資料其實現(xiàn)在也越來越多了,但是個人覺得,作為iOS開發(fā)能用系統(tǒng)原生方案,何必使用第三方呢,可能是我比較喜歡原生的吧!

整個upnp的實現(xiàn)需要三個要素:

1、渲染器(播放視頻、播放音樂的設(shè)備)

2、服務(wù)(DMS),其實就是設(shè)備提供的服務(wù),比如我這個音樂播放器提供播放音樂服務(wù),具體設(shè)備提供哪些服務(wù)還得看設(shè)備

3、控制點(diǎn),作為遙控裝置使用,可尋找 DMS 上可播放的媒體檔案,并指定到可播放該內(nèi)容的終端播放裝置進(jìn)行播放的動作。

關(guān)于具體的詳細(xì)介紹我就不多講了,可以參考[這個人寫的](https://eliyar.biz/DLNA_with_iOS_Android/),我今天的任務(wù)是將封裝好的dlna工具分享給大家哈。

干貨

YPnP管理者:YMUpnpManager

@interface YMUpnpManager : NSObject + (instancetype)manager;

功能總體上分為兩大類:

1、通過發(fā)送upd消息進(jìn)行設(shè)備搜索

2、對搜索到的設(shè)備進(jìn)行各種功能演示,比如設(shè)置URI資源,播放等等操作,

3、輔助方法

/** 選擇具體的設(shè)備, 在真實場景中,可能存在有多個服務(wù)設(shè)備,這個時候必須選中一個進(jìn)行接下來的交互, 如果這步?jīng)]有進(jìn)行,則接下來的步驟將無法進(jìn)行 */ - (void)selectedDevice:(YMUpnpDevice*)device;

在數(shù)據(jù)請求中,沒有按照網(wǎng)上很多很low的代理方式進(jìn)行回調(diào),而是使用了block的方式,因為這里在針對數(shù)據(jù)回調(diào)上使用代理是非常不合理的,在程序設(shè)計上使用block也比較順手,更加注重“一呼即答”設(shè)計理念。

針對網(wǎng)上缺失的訂閱方面的資源進(jìn)行補(bǔ)充(只經(jīng)過理論測試哈)

/** 發(fā)送訂閱消息 @param time 訂閱事件 @param callBack 回調(diào)地址 @param serverType 服務(wù)類型 接收回調(diào)會在內(nèi)部建立一個http server,需要保存sid */ - (void)sendSubcirbeWithTime:(int)time callBack:(NSString*)callBack serverType:(YMUpnpServerType)serverType result:(void(^)(BOOL success))result; /** 續(xù)訂某項服務(wù) 注意:要在之前訂閱的時間之前發(fā)起,否則無效 @param time 續(xù)訂的時間 @param serverType 服務(wù)類型 */ - (void)contractSubscirbeWithTime:(int)time serverType:(YMUpnpServerType)serverType result:(void(^)(BOOL success))result; /** 移除訂閱 @param serverType 服務(wù)類型 */ - (void)removeSubscirbeWithServerType:(YMUpnpServerType)serverType result:(void(^)(BOOL success))result;

將手機(jī)變成DMS實現(xiàn)具體的itunes音樂和本地phone服務(wù)操作

「鏈接」點(diǎn)擊這個鏈接查看相關(guān)介紹哈

1、首先我之前的項目是借助Pla框架實現(xiàn)的

2、啟動服務(wù)

/** 啟動itunes音樂服務(wù) */ - (void)intendStartItunesMusicServerWithServerName:(NSString *)theName { [self initUPnP]; itunesServer = [[PLT_MediaServerObject alloc] initServerSelfDelegateWithServerName:theName]; itunesDMSDelegate = [[ItunesMusicDMSDelegate alloc] init]; [itunesServer setDelegate:itunesDMSDelegate]; [upnp addDevice:itunesServer]; }

photo服務(wù)啟動

/** 啟動圖片server */ - (void)intendStartIOSPhotoServerWithServerName:(NSString *)theName { [self initUPnP]; // photoServer = [[PLT_MediaServerObject alloc] initServerSelfDelegateWithServerName:theName]; // photoDMSDelegate = [[PhotoDMSDelegate alloc] init]; // [photoServer setDelegate:photoDMSDelegate]; // [upnp addDevice:photoServer]; }

只有啟動服務(wù)后,才會有服務(wù)點(diǎn),這些是系統(tǒng)自帶的。

上面代碼比較陳舊,有需要的可以自行找下那個Pla哈,我這個項目寫的比較亂,不想整理了

注意點(diǎn)

對于某種的設(shè)備進(jìn)行什么操作,雖然可以通過獲取設(shè)備詳細(xì)的服務(wù)來獲取,但是針對一些實際開發(fā)場景,你會對你的設(shè)備有哪些功能會不知道嗎?所以,demo中的一些功能也只是大眾化的操作,這些upnp指令都是固定的,具體需要用到其他功能,需要根據(jù)設(shè)備的實現(xiàn)。

咱寫這篇文章就是想讓大家知道dlna其實一點(diǎn)都不難哈!或許是我們接觸的較少才會對這方面的知識比較陌生,然后給大家提供[下載地址](https://github.com/Mamakou/DLNA_UPNP-Manager),如果喜歡記得點(diǎn)個贊就好,點(diǎn)個贊就好,點(diǎn)個贊就好。

活在當(dāng)下,不努力就是一種慢性自殺,學(xué)習(xí)才能使自己進(jìn)步,才能變成高富帥,贏取白富美,達(dá)到人生巔峰!謝謝!??!

1.《怎么設(shè)置dlna?總結(jié)很全面速看!iOS 使用Upnp實現(xiàn)DLNA投屏技術(shù)》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《怎么設(shè)置dlna?總結(jié)很全面速看!iOS 使用Upnp實現(xiàn)DLNA投屏技術(shù)》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。

3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/gl/2980033.html