Ovládanie kamery SJCAM cez PC
Od júna minulého roku vlastním kameru SJCAM SJ5000X Elite. Na stránke českého SJCAM fóra som našiel tému s názvom Připojení kamery k telefonu, na stránke som zistil že je možné kameru ovládať pomocou Wi-Fi pripojenia. Stačí sa pripojiť na Wi-Fi sieť kamery na počítači, ďalej spustiť webový prehliadač a zadávať URL adresy, pod ktorými sa srývajú príkazy pre vykonanie daného úkonu. Zadávanie príkazov je pomocou menenia čísel príkazov a parametrov v URL adrese.
Ak sa pripojíte na Wi-Fi sieť kamery tak na stránke 192.168.1.254 sa objaví obsah kamery.
Ak chcete aby kamera začala nahrávať video zadajte do prehliadača URL adresu:
http://192.168.1.254/?custom=1&cmd=2001&par=1
Ak chcete aby kamera vypla nahrávanie videa:
http://192.168.1.254/?custom=1&cmd=2001&par=0
2001 v url adrese je príkaz pre kamerovanie, parameter 1 je spustenie a parameter 2 vypnutie nahrávania.
Ďalšie príkazy:
<Cmd>2002</Cmd> Resolution <Cmd>2003</Cmd> Cyclic Record <Cmd>2004</Cmd> WDR <Cmd>2006</Cmd> Motion Detection <Cmd>2007</Cmd> Audio <Cmd>2008</Cmd> Date Stamp <Cmd>2010</Cmd> Live View Size <Cmd>1004</Cmd> Capture Mode <Cmd>1002</Cmd> Image Size <Cmd>1005</Cmd> Quality <Cmd>1006</Cmd> Sharpness <Cmd>1007</Cmd> White Balance <Cmd>1008</Cmd> Color <Cmd>1009</Cmd> ISO <Cmd>2005</Cmd> Exposure <Cmd>1011</Cmd> Anti Shake <Cmd>3025</Cmd> Frequency <Cmd>3026</Cmd> Rotate <Cmd>3011</Cmd> Reset to Defaults <Cmd>3010</Cmd> Format <Cmd>3007</Cmd> Auto Power Off <Cmd>3003</Cmd> WiFiName <Cmd>3004</Cmd> Password <Cmd>3008</Cmd> DV Language
Zistil som že príkaz 9001 je Gyro senzor (parameter 0 – vypnutý, 1 – zapnutý ale trocha priblížený obraz, 2 – zapnutý a v poriadku)
Skúsil som vyhľadať časť textu z fóra a zistil som zdroje:
- SJ4000 PC Control (rcgroups.com)
- SJ4000 WIFI Protocol (gist.hithub.com/peel)
- Reverse engineering SJCAM4000 WiFi… well… kind of… (http://how-i-did-that.blogspot.sk)
- A Programmer’s Guide to SJCAM SJ4000 WiFi (sj4000programming.sourceforge.net) ★★★
HTML stránka na ovládanie kamery SJCAM
Vytvoril som HTML stránku kde som vytvoril zoznam nastavení a k ním som pridal odkazy pomocou základného HTML príkazu <a href. Napríklad:
<a href="http://192.168.1.254" target="_blank">Zobraziť všetko</a>
Animácia v originál rozlíšení
Takto vyzerá stránka, pre používanie ju odporúčam stiahnuť kliknutím na tlačidlo nižšie
Pozrieť SK verziu
Animácia v originál rozlíšení
Pozrieť EN verziu
Stiahnuť stránku (100 kB) #ulož.to
Najprv som mal predstavu základného menu kde boli položky: Live stream & nahrávanie a Nastavenia kamery. Potom som použil tag <details> pre rozbalenie menu po kliknutí naň. Potom ma napadlo použiť namiesto klasických odkazov tlačidlá tak som použil tag <button>. Neskôr som pridal do menu aj položku Obsah na kamere. Potom pribudol nadpis stránky a obrázky.
Najprv bol live stream riešený len ako nefunkčné tlačidlo na IP adresu live streamu rtsp://192.168.1.254/sjcam.mov s textom v prehrávači VLC stlačte CTRL + N a zadajte URL adresu: rtsp://192.168.1.254/sjcam.mov. Neskôr som dostal nápad vložiť túto URL adresu cez iframe do stránky ale zistil som že prehliadač nepodporuje vloženie rtsp. Potom ma napadlo po kliknutí na tlačidlo vynútené prehrávanie v programe VLC, no ani taký príkaz som nenašiel. Nakoniec ma napadlo vytvoriť playlist s IP adresou v programe VLC a dať ho na stiahnutie po kliknutí na tlačidlo Spustiť live stream.
Potom som našiel aj riešenie ako vložiť live stream aj na stránku, pomocou náhľadu fotografovania, teda je potrebné mať nastavený režim fotografovania na kamere a je to riešené cez .jpg. Adresa http://192.168.1.254:8192/ sa v iframe zobrazila bez problémov 🙂
Neskôr som sa zaoberal nastaveniami Wi-Fi názvu a hesla a času. Čo bolo trochu ťažšie.
Wi-Fi názov a heslo
Názov Wi-Fi siete nastavíte nasledovne:
http://192.168.1.254/?custom=1&cmd=3003&par=NazovWifiSiete
Najjednoduchšie riešenie by bolo aby používateľ musel manuálne vložiť názov do url adresy, ale chcel som pohodlnejšie riešenie a tak som spravil nasledovný formulár so zadávaním textu a odoslaním:
<form action="http://192.168.1.254/?" method="get" target="_blank"> Názov Wi-Fi siete: <input type="text" name="custom=1&cmd=3003&str" maxlength="27" required="required" placeholder="SJCAM-SJ5000X-ELITE"><br> <input type="submit" value="Nastaviť"> </form>
Maximálna dĺžka názvu Wi-Fi siete je 27 znakov, preto som obmedzil maxlength na 27, zadal som required aby bolo vyplnenie potrebné pre odoslanie formulára a vložil som placeholder, kde je ako príklad uvedený názov kamery SJCAM-SJ5000X-ELITE.
Wi-Fi heslo nastavíte nasledovne:
http://192.168.1.254/?custom=1&cmd=3004&str=WifiHeslo
Znova som spravil formulár so zadávaním textu a odoslaním:
<form action="http://192.168.1.254/?" method="get" target="_blank"> Heslo Wi-Fi siete: <input type="text" name="custom=1&cmd=3004&str" maxlength="25" pattern=".{8,}" required title="Zadajte aspoň 8 znakov" placeholder="heslo123"><br> <input type="submit" value="Nastaviť"> </form>
Skúsil som nastaviť 30 znakové heslo ale nastavilo sa len 26 znakov a po vypnutí a zapnutí kamery malo heslo len 25 znakov. Maximálna dĺžka hesla Wi-Fi siete je teda 25 znakov, preto som obmedzil maxlength na 25, zadal som required aby bolo vyplnenie potrebné pre odoslanie formulára a vložil som placeholder, kde je ako príklad uvedené heslo123.
Dátum a čas
Dátum nastavíte nasledovne:
http://192.168.1.254/?custom=1&cmd=3005&str=YYYY-MM-DD
Spravil som nasledovný formulár so zadávaním textu a odoslaním:
<form action="http://192.168.1.254/?" method="get" target="_blank"> Dátum: <input type="date" name="custom=1&cmd=3005&str" required="required"><br> <input type="submit" value="Nastaviť"> </form>
Čas nastavíte nasledovne:
http://192.168.1.254/?custom=1&cmd=3006&str=HH:MM:SS
Kamera potrebuje aby bol v URL adrese presne vložený čas v tvare hodiny:minúty:sekundy
#1 Spravil som formulár pre zadávanie času:
<form action="http://192.168.1.254/?" method="get" target="_blank"> Čas: <input type="time" name="custom=1&cmd=3006&str" required="required"><br> <input type="submit" value="Nastaviť"> </form>
tento formulár však zobrazuje len hodiny a minúty bez sekúnd a výstupná hodnota je HH:MM a tak sa čas na kamere nenastaví.
#2 Spravil som nasledovný formulár kde je možné zadať aj sekundy:
<form action="http://192.168.1.254/?" method="get" target="_blank"> Čas: <input type="time" step="1" name="custom=1&cmd=3006&str" required="required"><br> <input type="submit" value="Nastaviť"> </form>
ale ak by používateľ vynechal sekundy alebo ich zadal na 00 znova by výstupná hodnota bola bez sekúnd a tak sa čas na kamere nenastaví.
#3 Spravil som nasledovný formulár kde sú aj sekundy:
<form action="http://192.168.1.254/?" method="get" target="_blank"> Čas: <input type="time" name="custom=1&cmd=3006&str" value="00:00:01" required=" required"><br> <input type="submit" value="Nastaviť"> </form>
Tento formulár zobrazuje hodiny, minúty a sekundy. Avšak je možné nastaviť len hodiny a minúty, hodnota sekúnd je prednastavená na 01 a nie je ju možné meniť. Teda výstupná hodnota je HH:MM:SS, vlastne HH:MM:01 a tak sa čas na kamere nastaví 🙂
Automatické zatvorenie karty po nastavení
Po nastavení niečoho sa na novej karte zobrazí stránka s výpisom aktuálneho stavu. Pomocou skriptu je možné docieliť automatické zavrenie karty po určitom čase, respektíve po prebehnutí nastavenia. Ale do stránky som tento skript nezahrnul pretože by bolo potrebné spraviť ho pre každú položku a ponechal som to na manuálnom zatváraní.
Napríklad tlačidlo pre nastavenie rozlíšenia vyzerá takto:
<a href="http://192.168.1.254/?custom=1&cmd=2002&par=0" target="_blank"><button>1080p 60 fps</button></a>
V kombinácií so skriptom by vyzeralo takto:
<button onclick="r1080p60fps()">1080p 60fps</button>
Už by teda nebola potrebná adresa v html súbore ale vo funkcii v skripte, pretože funkcia nemôže zatvoriť stránku, ktorú sama neotvorila
a funkcia v súbore script.js:
function r1080p60fps() { myWindow = window.open("http://192.168.1.254/?custom=1&cmd=2002&par=0", "_blank"); setTimeout(function(){ myWindow.close();; }, 2000); } var myWindow;
Ako zistili príkazy
Ľudia spomenutý vyššie v zdrojoch zistili príkazy z aplikácie SJCAM pre Android. Zrejme ju nejako rozbalili cez PC alebo odsledovali prenos v sieti.
Stiahol som si aplikáciu tPacket capture, čo je aplikácia na sledovanie siete (funguje aj bez rootu), spustil som sledovanie siete, pripojil som sa na Wi-Fi sieť kamery a spustil aplikáciu SJCAM v ktorej som sa pripojil na kameru. Vytvoril sa súbor s koncovkou .pcap (napríklad 2016_12_24_1520.pcap) Následne som v počítači otvoril súbor .pcap (použil som Notepad++ ale odporúča sa Wireshark) kde je zoznam príkazov, ktoré vyslala kamera, bol tam podobný zoznam, aký je v úvode článku.
<?xml version="1.0" encoding="UTF-8" ?> <Function> <Cmd>2002</Cmd> <Status>0</Status> ... </Function>
Čítajte aj:
Čítajte inde:
- https://sjcam.com/community/threads/remote-sjcam-from-pc.2326 – Moja téma na oficiálnom SJCAM fóre