【问题标题】:Establish connection to Sony DSC QX10 (Sony Camera Remote API) using AsyncUdpSocket for SSDP connection on iPhone在 iPhone 上使用 AsyncUdpSocket 建立与 Sony DSC QX10 (Sony Camera Remote API) 的连接以进行 SSDP 连接
【发布时间】:2014-05-17 06:22:38
【问题描述】:

昨天我开始使用 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.0.1.1)收到来自主机(IP 地址:10.29.57.38)的响应。但是,响应数据与发送的数据完全相同。

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 的相同行为?

谢谢, 约瑟夫

【问题讨论】:

  • 您看到的实际上是您发送的消息。我有同样的问题,并发现(通过一些 UDP 嗅探)索尼自己的应用程序不使用 SSDP 发现方法。他们只是连接到 QX10 可用的地址 10.0.0.1/sony/camera。我自己尝试过,并且能够到达该地址上的相机。由于 Sony 的 SampleApp 甚至无法找到 QX10,我相信 SSDP 发现甚至不起作用。
  • 感谢您的回答。我还测试了显然无法正常工作的 SampleApp(他们甚至在测试自己的 SampleApp 吗?)。不过,连接到地址 10.0.0.1/sony/camera 可以正常工作。

标签: objective-c sony


【解决方案1】:

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

其他资源: 相机远程 API 开发指南文档有服务发现请求/响应示例。 网络上的 UPnP SSDP 服务发现示例。

另外,当我看到您提到的 IP 地址时,您能否再次检查您的 iPhone 是否连接到充当 WiFi 接入点的 QX-10。我希望 QX10 的 IP 地址类似于 10.0.1.1。

最好的问候, 前言

【讨论】:

  • 这是有道理的。我已经想知道为什么 iPhone 似乎作为服务器运行(使用 IP 地址 10.0.0.1)。好像我的 iPhone 显示的 IP 地址不正确。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多