Mac OS X app远程摄像头控制wi-fi

use*_*762 5 objective-c

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

小智 1

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

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

以及一些显示 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];
Run Code Online (Sandbox Code Playgroud)

作为一般示例写入outputStream:

// data is of class NSData, the following writes the data bytes to the outputStream
[outputStream write:[data bytes] maxLength:[data length]];
Run Code Online (Sandbox Code Playgroud)

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

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent
Run Code Online (Sandbox Code Playgroud)

文档:NSStreamDelegate 协议参考(左侧边栏上还有流编程指南的链接)