2012-04-11 11 views
6

Mi chiedo se è possibile ottenere l'indirizzo IP del dispositivo airplay attualmente in uso sulla mia app iOS.Come trovare l'indirizzo IP del dispositivo AirPlay attivo?

Oppure, oppure gli indirizzi IP di tutti i dispositivi abilitati alla trasmissione in aria sulla rete.

Grazie in anticipo!

EDIT: Anche se ora ho una risposta accettata, sono interessato a sapere come ottenere l'IP del dispositivo airplay attualmente in riproduzione.

risposta

7

Quello che devi utilizzare è NSNetServiceBrowser per eseguire una ricerca dei dispositivi con il protocollo. Ho fatto la stessa cosa con le stampanti, il mio codice è simile:

_netServiceBrowser= [[NSNetServiceBrowser alloc] init]; 
    _netServiceBrowser.delegate= self; 
    [_netServiceBrowser searchForServicesOfType:@"_pdl-datastream._tcp" inDomain:@"local."]; 

Devi cambiare @"_pdl-datastream._tcp" per il protocollo che si desidera effettuare la ricerca, è possibile trovare un elenco dei protocolli qui: http://developer.apple.com/library/mac/#qa/qa1312/_index.html

Dopo di che dovete scrivere le funzioni del protocollo:

#pragma mark - NSNetServiceBrowserDelegate 

-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser{ 
    //prepare the start of the search 
} 

-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing{ 
//Find a service, remember that after that you have to resolve the service to know the address 

[_printers addObject:aNetService]; 
aNetService.delegate=self; 
[aNetService resolveWithTimeout:5.0]; 

//More coming says if it has find more services, in case of more service are in queue wait to reload your interface 
if (!moreComing) { 
    [self.tableView reloadData]; 
} 
} 

-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didNotSearch:(NSDictionary *)errorDict{ 
//Do what you want in case of error 
} 

-(void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)aNetServiceBrowser{ 

//End search! 
} 

- (NSString *)getStringFromAddressData:(NSData *)dataIn { 
//Function to parse address from NSData 
struct sockaddr_in *socketAddress = nil; 
NSString   *ipString = nil; 

socketAddress = (struct sockaddr_in *)[dataIn bytes]; 
ipString = [NSString stringWithFormat: @"%s", 
      inet_ntoa(socketAddress->sin_addr)]; ///problem here 
return ipString; 
} 

- (void)netServiceDidResolveAddress:(NSNetService *)sender 
{ 
//delegate of NSNetService resolution process 
[_addresses addObject:[self getStringFromAddressData:[sender.addresses objectAtIndex:0]]]; 
[self.tableView reloadData]; 
} 

Una rete che può essere utile: http://www.macresearch.org/cocoa-scientists-part-xxviii-bonjour-and-how-do-you-do

Spero che ti sia d'aiuto

+0

Grazie mille! Lo proverò APPENA POSSIBILE. – Nailer

+2

Sembra che "_airplay._tcp" sia il protocollo corretto per questo uso. Devo ancora provarlo nella pratica, ma invierò un aggiornamento una volta che so che funziona. – Nailer

+0

Vedrai che è molto facile, se hai qualche problema a dirlo e vediamo qual è il problema – Jpellat

Problemi correlati