在iPhone上使用AsyncUdpSocket与SSDP连接建立与Sony DSC QX10(Sony Camera Remote API)的连接

时间:2014-03-22 17:09:44

标签: objective-c sony

昨天我开始使用Sony Camera Remote API开发iPhone应用程序。

使用WiFi摄像头的第一步是建立与摄像头的连接。因此,我使用AsyncUdpSocket使用以下代码启动ssdp发现:

-(void)discoverWiFiCamera{
self.ssdpSock = [[AsyncUdpSocket alloc] initIPv4];
[self.ssdpSock setDelegate:self];
[self.ssdpSock enableBroadcast:TRUE error:nil];

NSError *socketError = nil;
if (![self.ssdpSock bindToPort:1900 error:&socketError]) {
    NSLog(@"Failed binding socket: %@", [socketError localizedDescription]);
}
if(![self.ssdpSock joinMulticastGroup:@"239.255.255.250" error:&socketError]){
    NSLog(@"Failed joining multicast group: %@", [socketError localizedDescription]);
}
if (![self.ssdpSock enableBroadcast:TRUE error:&socketError]){
    NSLog(@"Failed enabling broadcast: %@", [socketError localizedDescription]);
}

[self.ssdpSock sendData:[@"M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: \"ssdp:discover\"\r\nMX: 1\r\nST: urn:schemas-sony-com:service:ScalarWebAPI:1\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]
                 toHost:@"239.255.255.250" port:1900 withTimeout:-1 tag:1];
[self.ssdpSock receiveWithTimeout:-1 tag:1];
[NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(completeSearch:) userInfo:self repeats:NO];
}

- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{
NSLog(@"%s %ld %@ %d",__FUNCTION__,tag,host,port);
NSString *aStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"\r\n%@",aStr);

return YES;
}

如图所示,该应用程序可以建立与相机的连接(Sony DSC QX10)。因此,iPhone接收来自主机的响应(IP地址:10.29.57.38)(IP地址:10.0.1.1)。但是,响应数据与发送的数据完全相同。

M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
MAN: "ssdp:discover"
MX: 1
ST: urn:schemas-sony-com:service:ScalarWebAPI:1

因此,我想问一下,如果你们中的任何人已经遇到过Sony Camera API或AsnycUdpSocket的相同行为?

谢谢, 约瑟夫

2 个答案:

答案 0 :(得分:0)

请记住ssdp:discover message是一条mulitcast消息,发送到该子网上的每个接口。如果消息相同,您可能正在阅读自己发送的消息。

其他资源: Camera Remote API开发指南Doc具有服务发现请求/响应示例。 Web上的UPnP SSDP服务发现示例。

此外,当我看到您提到的IP地址时,您是否可以仔细检查您的iPhone是否正在连接到充当WiFi接入点的QX-10。我希望QX10拥有像10.0.1.1这样的IP地址。

最诚挚的问候, PREM

答案 1 :(得分:0)

我遇到了同样的问题。我通过使用bindToAddress:port:方法而不是bindToPort方法来解决它。