5

我想为 Mac OS X 构建一个程序来远程控制我的 DSLR 相机。我的相机有一个 WiFi 适配器,所以我希望通过 WiFi 进行控制。我对C有很好的了解,Objective C / Xcode的基本中级知识但没有WiFi经验我应该使用哪个框架来连接相机以及相机与计算机之间的通信?谢谢!

4

1 回答 1

1

如果您指的是 PTP over IP (PTP/IP),据我了解,这仅用于将媒体传输到相机/从相机传输(不确定可以使用哪些远程控制功能),它基本上是 TCP/ IP 连接。您需要建立 TCP 连接。正如 NSBum 所建议的那样,这将需要 NSInputStream 和 NSOutputStream,以及作为 NSStreamDelegate 的类来处理流事件,例如与计算机通信的相机。

至于实际的协议,这应该由您下载的 SDK 处理,如果不是这里的一些文档可以帮助您入门:gPhoto PTP/IP Documentation

还有一些显示 NSInputStream 和 NSOutputStream 的代码:

// This would either be part of a Class init method or called at some point after
CFReadStreamRef readStream;
    CFWriteStreamRef writeStream;
    CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"192.168.1.2", 1234, &readStream, &writeStream);
    inputStream = (__bridge NSInputStream *)readStream;
    outputStream = (__bridge NSOutputStream *)writeStream;

[inputStream setDelegate:self];
[outputStream setDelegate:self];

[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[inputStream open];
[outputStream open];

并以写入 outputStream 作为一般示例:

// data is of class NSData, the following writes the data bytes to the outputStream
[outputStream write:[data bytes] maxLength:[data length]];

您的 NSStreamDelegate 还需要提供此方法的实现:

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent

文档:NSStreamDelegate 协议参考(左侧边栏上还有指向 Stream Programming Guide 的链接)

于 2013-02-27T14:24:19.210 回答