前提
最近在做這么一個功能, 就是現在各大視頻網站都有的,手機視頻軟件里的視頻投放到在同一WiFi下智能電視上進行播放。
DLNA
DLNA的全稱是DIGITAL LIVING NETWORK ALLIANCE(數字生活網絡聯盟), 其宗旨是Enjoy your music, photos and videos, anywhere anytime, DLNA(Digital Living Network Alliance) 由索尼、英特爾、微軟等發起成立、旨在解決個人PC,消費電器,移動設備在內的無線網絡和有線網絡的互聯互通,使得數字媒體和內容服務的無限制的共享和增長成為可能,目前成員公司已達280多家。
DLNA并不是創造技術,而是形成一種解決的方案,一種大家可以遵守的規范。所以,其選擇的各種技術和協議都是當前所應用很廣泛的技術和協議。
DLNA將其整個應用規定成5個功能組件。從下到上依次為:網絡互連,網絡協議,媒體傳輸,設備的發現控制和管理,媒體格式。
正題
通過我們自己的底層庫,可以獲取到相應設備的Location。但是,這個location是一個XML文件。
那么,我們接下來就說說,解析這個XML過程中的隨記。
隨記
我看了很多的技術帖子講解在iOS解析XML的方式。主要的就是兩種,一種是iOS系統自帶的解析類NSXMLParser,另一種就是GDataXML。 關于這兩種解析的具體方式我就不多介紹了。可以去參考iOS開發——XML/JSON數據解析
重點
一開始我們用的就是系統自帶的,因為直覺感覺系統的會好一點,但是用了之后才知道這其中的辛酸淚啊!!!!后來我么那就用了GDataXML這個用起來輕便多了。但是我看網上的 各種例子都是加載本地的XML文件。下面我就上代碼,怎么去解析一個網絡的XML文件。
NSString *xmlStr = [@"寫入你獲取的網絡XML文件的URL" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* xml = [NSString stringWithContentsOfURL:[NSURL URLWithString:xmlStr] encoding:NSUTF8StringEncoding error:nil];
GDataXMLDocument* xmlDoc = [[GDataXMLDocument alloc]initWithXMLString:xml options:0 error:nil];
GDataXMLElement *xmlEle = [xmlDoc rootElement];
NSLog(@"xmlELE = %@",xmlEle);
NSArray *array = [xmlEle elementsForName:@"device"];
for (GDataXMLElement *ele in array) {
GDataXMLElement *friendlyNameELe = [[ele elementsForName:@"friendlyName"]objectAtIndex:0];
NSString *friendlyNameStr = [friendlyNameELe stringValue];
NSLog(@"friendlyNameStr = %@",friendlyNameStr);
GDataXMLElement *iconListELe = [[ele elementsForName:@"iconList"]objectAtIndex:0];
GDataXMLElement *iconELe = [[iconListELe elementsForName:@"icon"]objectAtIndex:0];
GDataXMLElement *urlELe = [[iconELe elementsForName:@"url"]objectAtIndex:0];
NSString *urlStr = [urlELe stringValue];
NSLog(@"urlStr = %@",urlStr);
}
獲取什么樣的節點內容還是需要你自己去根據你自己的需求去做調整的,這里我們需要的就是friendlyName和url這兩個節點的內容。