iOS 使用Upnp實(shí)現(xiàn)DLNA投屏技術(shù)

前言

最近有些時(shí)間塞琼,隨便記起來(lái)之前關(guān)于upnp技術(shù)的現(xiàn)實(shí)止喷,想想需要好好整理一下胰蝠。2016年做了一個(gè)項(xiàng)目有這種需求:將手機(jī)本地音樂(lè)或者其他第三方的音樂(lè)資源送到一款智能音樂(lè)播放設(shè)備進(jìn)行播放塞茅,當(dāng)時(shí)就懵逼啦亩码!最后也是通過(guò)網(wǎng)上找資料棋品實(shí)現(xiàn)的,雖然功能實(shí)現(xiàn)了野瘦,但是感覺(jué)現(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ā)起成立、旨在解決個(gè)人電腦啡省,消費(fèi)電器娜睛,移動(dòng)設(shè)備在內(nèi)無(wú)線網(wǎng)絡(luò)和有線網(wǎng)絡(luò)的互聯(lián)互通,使得數(shù)字媒體和內(nèi)容服務(wù)的無(wú)限制的共享和增長(zhǎng)成為可能卦睹,目前成員公司已達(dá)280多家畦戒。

UPnP

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

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

整個(gè)upnp的實(shí)現(xiàn)需要三個(gè)要素:
1秸谢、渲染器(播放視頻、播放音樂(lè)的設(shè)備)
2霹肝、服務(wù)(DMS)估蹄,其實(shí)就是設(shè)備提供的服務(wù),比如我這個(gè)音樂(lè)播放器提供播放音樂(lè)服務(wù)沫换,具體設(shè)備提供哪些服務(wù)還得看設(shè)備
3臭蚁、控制點(diǎn),作為遙控裝置使用讯赏,可尋找 DMS 上可播放的媒體檔案垮兑,并指定到可播放該內(nèi)容的終端播放裝置進(jìn)行播放的動(dòng)作。

關(guān)于具體的詳細(xì)介紹我就不多講了待逞,可以參考這個(gè)人寫的,我今天的任務(wù)是將封裝好的dlna工具分享給大家哈网严。

干貨

YPnP管理者:YMUpnpManager

@interface YMUpnpManager : NSObject

+ (instancetype)manager;

功能總體上分為兩大類:
1识樱、通過(guò)發(fā)送upd消息進(jìn)行設(shè)備搜索
2、對(duì)搜索到的設(shè)備進(jìn)行各種功能演示震束,比如設(shè)置URI資源怜庸,播放等等操作,

3垢村、輔助方法

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

在數(shù)據(jù)請(qǐng)求中侵佃,沒(méi)有按照網(wǎng)上很多很low的代理方式進(jìn)行回調(diào)麻昼,而是使用了block的方式,因?yàn)檫@里在針對(duì)數(shù)據(jù)回調(diào)上使用代理是非常不合理的馋辈,在程序設(shè)計(jì)上使用block也比較順手抚芦,更加注重“一呼即答”設(shè)計(jì)理念。

針對(duì)網(wǎng)上缺失的訂閱方面的資源進(jìn)行補(bǔ)充(只經(jīng)過(guò)理論測(cè)試哈)
/**
 發(fā)送訂閱消息

 @param time 訂閱事件
 @param callBack 回調(diào)地址
 @param serverType 服務(wù)類型
 接收回調(diào)會(huì)在內(nèi)部建立一個(gè)http server,需要保存sid
 
 */
- (void)sendSubcirbeWithTime:(int)time callBack:(NSString*)callBack serverType:(YMUpnpServerType)serverType result:(void(^)(BOOL success))result;

/**
 續(xù)訂某項(xiàng)服務(wù)
 注意:要在之前訂閱的時(shí)間之前發(fā)起,否則無(wú)效
 @param time 續(xù)訂的時(shí)間
 @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實(shí)現(xiàn)具體的itunes音樂(lè)和本地phone服務(wù)操作

點(diǎn)擊這里查看相關(guān)介紹哈
1叉抡、首先我之前的項(xiàng)目是借助Platinum.frame框架實(shí)現(xiàn)的
2尔崔、啟動(dòng)服務(wù)

/**
 啟動(dòng)itunes音樂(lè)服務(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ù)啟動(dòng)

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

只有啟動(dòng)服務(wù)后,才會(huì)有服務(wù)點(diǎn)褥民,這些是系統(tǒng)自帶的季春。
上面代碼比較陳舊,有需要的可以自行找下那個(gè)Platinum.frame哈轴捎,我這個(gè)項(xiàng)目寫的比較亂鹤盒,不想整理了

注意點(diǎn)

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

咱寫這篇文章就是想讓大家知道dlna其實(shí)一點(diǎn)都不難哈!或許是我們接觸的較少才會(huì)對(duì)這方面的知識(shí)比較陌生固耘,然后給大家提供下載地址题篷,如果喜歡記得點(diǎn)個(gè)贊就好,點(diǎn)個(gè)贊就好厅目,點(diǎn)個(gè)贊就好番枚。
活在當(dāng)下,不努力就是一種慢性自殺损敷,學(xué)習(xí)才能使自己進(jìn)步葫笼,才能變成高富帥,贏取白富美拗馒,達(dá)到人生巔峰路星!謝謝!S展稹洋丐!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挥等,隨后出現(xiàn)的幾起案子垫挨,更是在濱河造成了極大的恐慌,老刑警劉巖触菜,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件九榔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)哲泊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門剩蟀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人切威,你說(shuō)我怎么就攤上這事育特。” “怎么了先朦?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵缰冤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我喳魏,道長(zhǎng)棉浸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任刺彩,我火速辦了婚禮迷郑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘创倔。我一直安慰自己嗡害,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布畦攘。 她就那樣靜靜地躺著霸妹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪知押。 梳的紋絲不亂的頭發(fā)上叹螟,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音朗徊,去河邊找鬼首妖。 笑死偎漫,一個(gè)胖子當(dāng)著我的面吹牛爷恳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播象踊,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼温亲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了杯矩?” 一聲冷哼從身側(cè)響起栈虚,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎史隆,沒(méi)想到半個(gè)月后魂务,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年粘姜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鬓照。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡孤紧,死狀恐怖豺裆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情号显,我是刑警寧澤臭猜,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站押蚤,受9級(jí)特大地震影響蔑歌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜活喊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一丐膝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钾菊,春花似錦帅矗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至滞详,卻和暖如春凛俱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背料饥。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工蒲犬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岸啡。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓原叮,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親巡蘸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奋隶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355