2012-12-09 17 views
5

Chciałbym zbudować program dla Mac OS X do zdalnego sterowania moją kamerą DSLR. Kamera, którą mam, ma adapter WiFi, więc chciałbym, aby sterowanie odbywało się przez WiFi. Mam dobre zrozumienie C, podstawowej, średnio zaawansowanej znajomości Objective C/Xcode, ale nie mam doświadczenia z Wi-Fi jaki framework powinienem użyć do połączenia z kamerą i komunikacji pomiędzy kamerą a komputerem? dzięki!Sterowanie kamerą zdalną aplikacji Mac OS X przez Wi-Fi

+1

To zależy trochę od tego, czy istnieje opublikowany protokół komunikacyjny oferowany przez producent aparatów ... Czy istnieje? Jakie są jego specyfikacje? – FluffulousChimp

+0

Protokół komunikacyjny wykorzystał go PTP i pobrałem SDK ze strony producenta. SDK nie zostały dokładnie zbudowane dla mojego modelu, ale spojrzałem na te dostępne dla innych modeli i wyglądają bardzo podobnie do mnie. Zastanawiałem się, czy mógłbym wykorzystać je jako punkt wyjścia ... dzięki! – user1888762

+0

Podejrzewam, że istnieje inna warstwa łączności między urządzeniami, z którą można sobie poradzić. Zgaduję, że prawdopodobnie będziesz pracował z parami 'NSInputStream' i' NSOutputStream'; ale odkrycie urządzenia w sieci będzie musiało zostać rozwiązane ... wiele pytań pozostaje. – FluffulousChimp

Odpowiedz

1

Jeśli chodzi o PTP przez IP (PTP/IP), o ile rozumiem, służy to tylko do przesyłania multimediów do/z kamery (nie wiem, jakie funkcje zdalnego sterowania są możliwe) i zasadniczo połączenie TCP/IP. Musisz ustanowić połączenie TCP. Zgodnie z sugestią NSBum wymagałoby to NSInputStream i NSOutputStream, a także posiadania klasy jako NSStreamDelegate do obsługi zdarzeń strumieniowych, takich jak kamera komunikująca się z komputerem.

chodzi o rzeczywistą protokołu, to powinno być obsługiwane przez SDK został pobrany, jeśli nie jest tu jakaś dokumentacja, które mogą pomóc Ci zacząć: gPhoto PTP/IP Documentation

A niektóre kod, aby pokazać NSInputStream i 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]; 

I na piśmie do OutputStream jako ogólny przykład:

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

Twój NSStreamDelegate będzie musiała zapewnienie wdrożenia tej metody:

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

Dokumentacja: NSStreamDelegate Protocol Reference (Również na pasku po lewej stronie znajduje się link do Przewodnika Stream programowanie)