• In eigener Sache!

    Liebe Mitglieder, liebe Besucher und Gäste
    ich weiß, es ist ein leidiges Thema, aber ich muss es ansprechen: Werbung, Werbeblocker und Finanzierung des Forums.
    Bitte hier weiterlesen ...

  • DSLR-Forum Fotowettbewerb neu erfunden!
    Nach wochenlanger intensiver Arbeit an der Erneuerung des Formates unseres internen Fotowettbewerbes ist es Frosty als Moderator
    und au lait als Programmierer gelungen, unseren Wettbewerb auf ein völlig neues Level zu heben!
    Lest hier alle Infos zum DSLR-Forum Fotowettbewerb 2.0
    Einen voll funktionsfähigen Demowettbewerb kannst du dir hier ansehen.
  • Neuer Partner: AkkuShop.de
    Akkus, Ladegeräte und mehr (nicht nur) für Digitalkameras und Drohnen
  • Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2024
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien der Eigenmarken "Upscreen", "Brotec", "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Stimmt ab über die Sieger des DSLR-Forum Fotowettbewerbs September 2024.
    Thema: "Regen"

    Nur noch bis zum 30.09.2024 23:59!
    Jeder darf abstimmen!
    Zur Abstimmung und Bewertung hier lang
  • Nicht erreichbare Adressen im Benutzerkonto
    Wir bekommen zurzeit eine große Anzahl an E-Mails, die das System zum Beispiel als Benachrichtigungen an Nutzer verschickt,
    als unzustellbar zurück, weil z.B. die Adressen nicht erreichbar sind oder das Postfach gar nicht existiert.
    Stellt doch bitte sicher, dass die Benachrichtigungen, die ihr vom System erwartet, auch zugestellt werden können.
    Nicht erreichbare E-Mail-Adressen sind dazu wenig hilfreich.
    Danke!
WERBUNG

sony nex 6 remote auslöser per wlan

easteregg

Themenersteller
Heyho

hat schonmal jemand sich den datenstrom zwischen smartphone und nex 6 / 5r genauer angeschaut? weil zum einen funktioniert die playmemorries mobile app mit meinem nexus 7 tablet gar nicht, zum anderen ist es ja einfach nur ne adhoc wlan verbindung die da aufgebaut wird. so schwer, kanns ja nich sein.

ich kann den datenstrom leider nicht dumpen, da es nich funktioniert :D
also wenn das mal jemand mitschneiden könnte und hier anhängt wäre das super.
ansonst versuch ich die tage mal an nem handy zu kommen, mit dem die spielerrei funktioniert. ich hatte nur mal mit nem laptop nen portscan gegen die cam gemacht und einzig der port 8080 schien offen zu sein. dort läuft wohl eine art rudimentärer http server, per browser zugreifen klappt allerdings nicht. der bringt nur nen http 401. wäre ja super, wenn man hier etwas weiter kommen würde :) zumal vom laptop aus, kann man sich sicherlich viel feinere programme schreiben, als die smartphoneapp! ;)
 
jain, es geht darum erstmal zu verstehen, wie die app arbeitet und was die für daten an die cam sendet, damit diese auslöst. wenn man das mitschneiden kann, und gezielt per reverse engineering ( http://de.wikipedia.org/wiki/Reverse_Engineering ) nachbauen kann, könnte man wesentlich schönere funktionen bauen. zb ein intervalauslösungen oder einfach nur ne art bessere app bauen. ggf. sogar die cam als webcam am laptop nutzen und und und.

vorallem aber will ich schauen, das überhaupt zum laufen zu bekommen, da die playmemories mobile app wie gesagt mit dem nexus 7 nicht zusammen arbeitet.

um das alles zu realisieren braucht man erstmal die steuerinformationen die übers wlan übertragen werden. und die kann man ja einfach mitlesen.
 
Kleines Update soweit hier. Ich habe ein iOS gerät in die finger bekommen und konnte erstmal grundlegend mitlesen, wie die initialen anfragen ablaufen.

Die kommunikation läuft über http und port 8080. Der Client stellt als erste anfrage folgedes:

Code:
GET /sony/index.html HTTP/1.1

die datei liefert nur ein wenig javascript aus was ich noch analysieren muss:

Code:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 669

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>SmartRemoteControl</title>
</head>
<body>

<script type="text/javascript" src="./orbjs/dist/orb-client.min.js"></script> 

<script type="text/javascript">
var guide = plenluno.orb.client.service.create({
    'url': 'http://192.168.122.1:8080/sony/guide',
    'transport': 'xhrpost',
    'serializer': 'jsonizer',
});
var camera = plenluno.orb.client.service.create({
    'url': 'http://192.168.122.1:8080/sony/camera',
    'transport': 'xhrpost',
    'serializer': 'jsonizer',
});
</script>

</body>
</html>

die ./orbjs/dist/orb-client.min.js lib ist opensource und kann hier gefunden werden: https://github.com/plenluno/orbjs

wenn man die seite einfach nur im browser öffnet passiert schlicht nichts, der client auf dem iOS lädt allerdings scheinbar von selbst noch die URL
GET /liveview/liveview.jpg HTTP/1.1 von der Cam nach.

die daten die da ankommen entsprechen dem stream, der von der cam an das handy gesendet wurde. hier trat aber scheinbar irgend ein problem auf, denn der iOS client hing sich an der stelle auf. der client auf dem nexus 7 connected nichteinmal zur cam. daher konnt ich auch nicht mitschneiden, wie überhaupt ausgelöst wird. jetzt muss man aber erstmal rausfinden, was der client da genau anfragt und aus welchen daten der videostream besteht.

falls jemand mit in den wifi dump reinschauen möchte, kann er sich gern bei mir melden. wäre interessant hier weiter zu forschen! :) falls jemand nen tipp hat, für nen handy was mit dem programm und der nex 6 sauber funktioniert wäre das auch schonmal nen sehr guter tipp. ich werds heut abend nochmal mit nem dell streak probieren, vielleicht funktioniert das programm ja auf andriod 2.2 wenn schon nicht mit 4.1.2 und iOS 6

edit//

wie es scheint ist das ne lib für client <-> server communication. scheinbar läuft ne art js server auf der cam :D (vielleicht sogar nodejs? :D das wäre extem lustig)
 
Zuletzt bearbeitet:
Bei mir funktioniert folgende Kombi:

NEX-5R
Samsung Galaxy S III (Android 4.0.4)

Die App funktioniert von Anfang an problemlos.
Sowas wie "LiveStream dumpen" oder wie du das nennst ist leider chinesisch für mich ...
 
nuja immerhin. das ist ja erstmal ne ansage, leider kenn ich nich so viele mit nem S3 :/ aber wenn ich mal einen treff, wird der mir sicherlich weiterhelfen können! ;)

edit:// zum thema daten dumpen. das bedeutet nichts anderes, als den wlantraffic zwischen dem handy und der camera mitlesen. prinzipiell ist es das selbe vorgehen, wie man in nen wlan einbricht. nur dass ich ja schon das passwort kenne und daher den datenstrom entschlüsseln kann, um so mitzulesen, was denn da eigentlich durch die luft fliegt :)
 
falls einer von euch in der lage ist den traff mitzulesen und mir den dump mit dmem zugehörigen passwort zukommen lassne kann, wäre das super. ansonst wirds wohl noch ne weile dauern, bis ich hier weiter komme!

alternativ wäre ne firmware von ner nex5r bzw. ner nex 6 auch ne super sache, aber da habcsh noch keine bezugsquellen für gesehen. vielleicht wird das aber auch zu komplex, die infos da rauszuarbeiten.
 
super ich habs geschafft, den auslösevorgang mitzulesen. ich werd das bei gelegenheit mal aufschreiben, wie die einzelnen vorgänge ablaufen!

wichtig scheint ne art initiale anmeldung zu sein. ich werd dazu nen kommentar falln lassen, wenn ich mehr weis.
 
hier eine auflistung wie die conversation aussieht.


Code:
GET /sony/index.html HTTP/1.1
Host: 192.168.122.1:8080
Accept-Encoding: gzip
Accept-Language: de-DE, en-US
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 669

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>SmartRemoteControl</title>
</head>
<body>

<script type="text/javascript" src="./orbjs/dist/orb-client.min.js"></script> 

<script type="text/javascript">
var guide = plenluno.orb.client.service.create({
    'url': 'http://192.168.122.1:8080/sony/guide',
    'transport': 'xhrpost',
    'serializer': 'jsonizer',
});
var camera = plenluno.orb.client.service.create({
    'url': 'http://192.168.122.1:8080/sony/camera',
    'transport': 'xhrpost',
    'serializer': 'jsonizer',
});
</script>

</body>
</html>
GET /sony/orbjs/dist/orb-client.min.js HTTP/1.1
Host: 192.168.122.1:8080
Accept-Encoding: gzip
Referer: http://192.168.122.1:8080/sony/index.html
Accept-Language: de-DE, en-US
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17
Accept: */*
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7

nachdem die grundlage für den client geladen ist in form der client/server lib werden die anfragen nur noch über die orb lib und json ausgetauscht.
wichtig scheint dann die initialisierung zu sein.

Code:
POST /sony/camera HTTP/1.1
Host: 192.168.122.1:8080
Accept-Encoding: gzip
Referer: http://192.168.122.1:8080/sony/index.html
Accept-Language: de-DE, en-US
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17
Origin: http://192.168.122.1:8080
Accept: text/xml, text/html, application/xhtml+xml, image/png, text/plain, */*;q=0.8
Content-Type: application/xml
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
Content-Length: 43

{"method":"getVersions","params":[],"id":1}

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 27

{"id":1,"result":[["1.0"]]}

danach gibts ne anfrage, was für methoden für die api überhaupt da sind:

Code:
POST /sony/camera HTTP/1.1
Host: 192.168.122.1:8080
Accept-Encoding: gzip
Referer: http://192.168.122.1:8080/sony/index.html
Accept-Language: de-DE, en-US
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17
Origin: http://192.168.122.1:8080
Accept: text/xml, text/html, application/xhtml+xml, image/png, text/plain, */*;q=0.8
Content-Type: application/xml
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
Content-Length: 51

{"method":"getMethodTypes","params":["1.0"],"id":2}

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 952

{"id":2,"results":[["getVersions",[],["string*"],"1.0"],["getMethodTypes",["string"],["string","string*","string*"],"1.0"],["getApplicationInfo",[],["string","string"],"1.0"],["actTakePicture",[],["string*"],"1.0"],["awaitTakePicture",[],["string*"],"1.0"],["startRecMode",[],["int"],"1.0"],["stopRecMode",[],["int"],"1.0"],["startLiveview",[],["int"],"1.0"],["stopLiveview",[],["int"],"1.0"],["getAvailableApiList",[],["string*"],"1.0"],["setExposureCompensation",["int"],["int"],"1.0"],["getExposureCompensation",[],["int"],"1.0"],["getSupportedExposureCompensation",[],["int*","int*","int*"],"1.0"],["getAvailableExposureCompensation",[],["int","int","int"],"1.0"],["setSelfTimer",["int"],["int"],"1.0"],["getSelfTimer",[],["int"],"1.0"],["getSupportedSelfTimer",[],["int*"],"1.0"],["getAvailableSelfTimer",[],["int*"],"1.0"],["receiveEvent",["bool"],["string","bool","int","int","int","int","string*","string*","bool*","string*","string*"],"1.0"]]}

POST /sony/camera HTTP/1.1
Host: 192.168.122.1:8080
Accept-Encoding: gzip
Referer: http://192.168.122.1:8080/sony/index.html
Accept-Language: de-DE, en-US
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17
Origin: http://192.168.122.1:8080
Accept: text/xml, text/html, application/xhtml+xml, image/png, text/plain, */*;q=0.8
Content-Type: application/xml
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
Content-Length: 50

{"method":"getApplicationInfo","params":[],"id":3}

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 139

{"id":4,"result":[["getMethodTypes","getVersions","getApplicationInfo","getAvailableApiList","receiveEvent","startRecMode","stopRecMode"]]}

hier mal die methoden bissl aufgelistet:

Code:
{"id":2,"results":
[
	["getVersions",[],["string*"],"1.0"],
	["getMethodTypes",["string"],["string","string*","string*"],"1.0"],
	["getApplicationInfo",[],["string","string"],"1.0"],
        ["actTakePicture",[],["string*"],"1.0"],
	["awaitTakePicture",[],["string*"],"1.0"],
	["startRecMode",[],["int"],"1.0"],["stopRecMode",[],["int"],"1.0"],
	["startLiveview",[],["int"],"1.0"],["stopLiveview",[],["int"],"1.0"],
	["getAvailableApiList",[],["string*"],"1.0"],
	["setExposureCompensation",["int"],["int"],"1.0"],
	["getExposureCompensation",[],["int"],"1.0"],
	["getSupportedExposureCompensation",[],["int*","int*","int*"],"1.0"],
	["getAvailableExposureCompensation",[],["int","int","int"],"1.0"],
        ["setSelfTimer",["int"],["int"],"1.0"],
	["getSelfTimer",[],["int"],"1.0"],
	["getSupportedSelfTimer",[],["int*"],"1.0"],
	["getAvailableSelfTimer",[],["int*"],"1.0"],
	["receiveEvent",["bool"],["string","bool","int","int","int","int","string*","string*","bool*","string*","string*"],"1.0"]
]}


jetzt müsste man anfangen mal nen client dafür zu schreiben. aber ich glaub da komm ich huet nichtmehr dazu. wenn jemand den vollen dump haben möcht.

update://
wird genutzt um auszulösen. ich muss mal gucken ob ich bei der methodenauflistung nicht etwas übersehen hab.
Code:
{"method":"actTakePicture","params":[],"id":18}
 
Zuletzt bearbeitet:
okay, ich konnte das jetzt schon händisch alles von meinem laptop nachstellen und den livestream aktivieren. leider hab ich keinen dunst, um was es sich dabei handelt. wenn also jemand ahnung von verschiedenen video containerformaten und deren erkennung hat: http://zwischenablage.net/stream_chunk

ich wäre für hilfe dankbar :)
 
Hallo,
ich habe mich auch schonmal etwas mit diesem Thema beschäftigt.
Allerdings von der anderen Seite, d.h. ich hab mir die Android App etwas näher angesehen.
Leider ist diese allerdings obfuscated, d.h. der Source code (-->smali) wurde unkenntlich gemacht. Kein Beinbruch, wird allerdings deutlich länger dauern, dies wieder halbwegs lesbar/verständlich zu machen.

Die Firmware der NEX an sich wird dir wohl kaum weiterhelfen, das dürfte deutlich zu kompliziert werden.
Hast du Erfahrung mit dem Reverse-Engineering von Android Apps?
 
nö, mit andriods nich. aber das geht ja über nen websocket und damit kenn ich mich aus.
mithilfe von nem anderen forum konnte ich den datenstream schon identifizieren. da ich mittlerweile es sogar schon geschafft hab, die entsprechenden steuerbefehle an die cam zu senden und erste bilder damit geknippst hab, bin ich guter dinge, dass das ding mit genug zeit in kürze lauffähig sein könnte! :)

ich werd mich die nächsten schritte damit auseinader setzen, wie ich den bildstream zum darstellen bringen ;)

die nex firmware ist afaik auf linux ce basierend und man kann da afaik sogar das fs von der cam extrahieren, was praktisch wäre, wenn man irgendwo die server daten für den http findet! ;)
 
hier sind die anfragen die mindestens nötig sind um nen bild per wlan aufzunehmen. die ip von der cam scheint dabei hardcoded zu sein.


Code:
POST /sony/camera HTTP/1.1
Host: 192.168.122.1:8080
Accept-Encoding: gzip
Referer: http://192.168.122.1:8080/sony/index.html
Accept-Language: de-DE, en-US
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17
Origin: http://192.168.122.1:8080
Accept: text/xml, text/html, application/xhtml+xml, image/png, text/plain, */*;q=0.8
Content-Type: application/xml
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
Content-Length: 50

{"method":"getApplicationInfo","params":[],"id":3}

===============================

POST /sony/camera HTTP/1.1
Host: 192.168.122.1:8080
Accept-Encoding: gzip
Referer: http://192.168.122.1:8080/sony/index.html
Accept-Language: de-DE, en-US
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17
Origin: http://192.168.122.1:8080
Accept: text/xml, text/html, application/xhtml+xml, image/png, text/plain, */*;q=0.8
Content-Type: application/xml
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
Content-Length: 51

{"method":"getMethodTypes","params":["1.0"],"id":2}

===============================

POST /sony/camera HTTP/1.1
Host: 192.168.122.1:8080
Accept-Encoding: gzip
Referer: http://192.168.122.1:8080/sony/index.html
Accept-Language: de-DE, en-US
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17
Origin: http://192.168.122.1:8080
Accept: text/xml, text/html, application/xhtml+xml, image/png, text/plain, */*;q=0.8
Content-Type: application/xml
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
Content-Length: 44

{"method":"startRecMode","params":[],"id":5}

===============================

POST /sony/camera HTTP/1.1
Host: 192.168.122.1:8080
Accept-Encoding: gzip
Referer: http://192.168.122.1:8080/sony/index.html
Accept-Language: de-DE, en-US
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17
Origin: http://192.168.122.1:8080
Accept: text/xml, text/html, application/xhtml+xml, image/png, text/plain, */*;q=0.8
Content-Type: application/xml
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
Content-Length: 47

{"method":"actTakePicture","params":[],"id":18}

was optional ist, ist der datenstrom für die liveansicht. der wird folgendermaßen gestartet und als antwort bekommt man die streamurl

Code:
POST /sony/camera HTTP/1.1
Host: 192.168.122.1:8080
Accept-Encoding: gzip
Referer: http://192.168.122.1:8080/sony/index.html
Accept-Language: de-DE, en-US
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17
Origin: http://192.168.122.1:8080
Accept: text/xml, text/html, application/xhtml+xml, image/png, text/plain, */*;q=0.8
Content-Type: application/xml
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
Content-Length: 45

{"method":"startLiveview","params":[],"id":8}

antwort:

Code:
GET /liveview/liveview.jpg HTTP/1.1
User-Agent: Dalvik/1.2.0 (Linux; U; Android 2.2.2; Dell Streak Build/FRG83G)
Host: 192.168.122.1:8080
Connection: Keep-Alive

leider bekomm ich den mit vlc nicht direkt zum abspielen, da stell ich mich zu blöde an.... falls nen vlc expert around ist, kann er mir ja mal nen tipp geben! ;D

soweit so gut. das ist der stand, schöne spielerrei.
 
okay um den aufwand gering zu halten, hab ich mal versucht die anfragen größtmöglich einzukürzen.

man kann die header informationen bis auf das wesentliche alles rauslassen und nur mit 2 abfragen zum bildaufnehmen kommen.

Code:
POST /sony/camera HTTP/1.1
Content-Length: 44

{"method":"startRecMode","params":[],"id":5}
Code:
POST /sony/camera HTTP/1.1
Content-Length: 47

{"method":"actTakePicture","params":[],"id":18}

das erleichtert schonmal einiges. die gemachten bilder kann man sich in kleinerer auflösung dann direkt von der cam laden! ;)
 
Sehr nett! :)
Hast du noch mehr über die verwendete API heraus gefunden? Die gelisteten Methoden sind ja leider nicht so der Knaller... Ich hatte Hoffnung, dass das Protokol vielleicht noch mehr Features unterstützt, die nur in der Remote App nicht implementiert sind.
 
dachte ich auch. ich muss noch versuchen den ablauf da ein bisschen besser zu verstehen wie man die apis genauer anfragt. aber ich denk, man wird prinzipiell das beeinflussen können, was man auch über die "app" selbst auf der kam kan.
sprich fokus ggf, belichtungsfaktor, belichtungszeit wohl und solche spielerrein.

mal sehen, wa ich da mal zeit hab, erstmal muss ich mir nen tool basteln, was die anfragen automatisch absetzt, bisher ist das mit nc alles bissl umständlich! ;)

ich bin mir auch noch nich so 100% sicher, was ich dann damit anfangen werde, aber erstmal nice to have :D falls jemand nen schönes programm dazu schreiben kann, wäre das auch super! mit desktop entwicklung hab ich nich soviel am hut :D
 
WERBUNG
Zurück
Oben Unten