How to access the A129 over Wi-Fi without the Viofo App

clicketyclack

Member
Joined
Feb 7, 2015
Messages
46
Reaction score
33
Country
United States
I've been playing with my new A129 Duo before I install it. You don't need to use the Viofo app to download saved files or to stream live video, like for camera placement.

Turn on Wi-Fi on the A129 and connect to it with a client device, which will get an automatic IP via DHCP in the 192.168.1.0 network. The camera's default IP is 192.168.1.254.

To browse files on the SD card, use a web browser and go to http://192.168.1.254. You'll get a navigable directory listing.

To see live video, use a streaming video player that supports H264 like VLC and just connect to rtsp://192.168.1.254.

There is a very basic HTTP RPC interface using the syntax http://192.168.1.254/?custom=1&cmd=&par=&str= which will return results in XML. For example, to get the firmware version, use http://192.168.1.254/?custom=1&cmd=3012. I haven't done much digging for other commands but you could probably build a command list by decompiling the app's APK to check the Java source and sniffing the app's network traffic to the camera.
 
Nice find. Are you using a laptop and if so, what transfer speeds are you seeing? Which are your connecting to, 2.4 or 5 Ghz?
 
What client device would you recommend?


Sent from my iPad using Tapatalk
 
Nice find. Are you using a laptop and if so, what transfer speeds are you seeing? Which are your connecting to, 2.4 or 5 Ghz?

I used a laptop with VLC to view the live stream when I was installing. I just plopped it on the passenger seat which was easier with a larger screen than my phone.

I connected over 5 GHz and tested in the same room with line of sight. The live stream was fine, but the file download speed was pretty bad, about 800 KBps.You couldn't even stream the file from the camera; you had to download it first. It was pretty disappointing. I haven't tried the app yet so I can't compare which is faster.
 
What client device would you recommend?

Any device that can run VLC, which is powerful, cross platform, free, and open source. You may not even need VLC because every modern platform basically has a media player that can stream H264 over RTSP.
 
I used a laptop with VLC to view the live stream when I was installing. I just plopped it on the passenger seat which was easier with a larger screen than my phone.

I connected over 5 GHz and tested in the same room with line of sight. The live stream was fine, but the file download speed was pretty bad, about 800 KBps.You couldn't even stream the file from the camera; you had to download it first. It was pretty disappointing. I haven't tried the app yet so I can't compare which is faster.

Thanks, I'll be sticking to removing the SD card and transferring files via usb reader which is not a big deal to me.
 
Great finding.
Maybe there are some more hidden features in the firmware. A129 could have very big potential
 
The HTTP RPC interface is very basic so it wouldn't be hard to reverse engineer. The Android APK can be decompiled to see the client side source which will give you a list of commands that the app knows. Presumably someone who mods the firmware could see how the camera's http service processes the commands too, and may be able to find more commands that are unused by the app. It's just a dash cam -- I'm sure there are lots of debugging stuff left in there.
 
Lets try it out...
 
Lets try it out...

I wish I had more time to dig into this but I haven't even played with parking mode yet with my 3 wire kit. I'd like to get familiar with my new cam before I start messing with it.

I don't have the app installed on my phone to do a Wireshark capture, but below are some pertinent lines from the decompiled app's code. I copied from several diferent files and methods so this is not all one code segment and I might have overlooked some. I also don't know what version of the APK I decompiled. I just grabbed the first one I found on a third party app repository. This is an easy reverse engineering project to learn how to do it. It'd be fun to explore if I had the time but I don't. :( Maybe someone else can take it from here.

private static final String SCREEN_SUFFIX = "?custom=1&cmd=4002";
private static final String THUMB_SUFFIX = "?custom=1&cmd=4001";

private static final String ADD_PARAM = "&par=";
private static final String ADD_STR = "&str=";
private static final String BASE_COMMAND_URL = "http://192.168.1.254/?custom=1&cmd=";

public class Command_A129 {
public static final String A129_FIRMWARE_FILE_NAME = "FWA129.bin";
public static final int BEEP = 9403;
public static final String FIRMWARE_A129 = "A129";
public static final int IMAGE_ROTATE = 9413;
public static final int RESTART_CAMERA = 9423;
}

public class Command {
public static final int AUTO_POWER_OFF = 3007;
public static final String BASE_URL = "http://192.168.1.254";
public static int BEEP = 9094;
public static final int BOOT_DELAY = 9424;
public static final int CAMERA_MODEL_STAMP = 9216;
public static final int CAPTURE_SIZE = 1002;
public static final int CARD_FREE_SPACE = 3017;
public static int CAR_NUMBER = 9422;
public static final int CHANGE_MODE = 3001;
public static final int CUSTOM_TEXT_STAMP = 9417;
public static final String DEFAULT_IP = "192.168.1.254";
public static final int DEFAULT_PORT = 3333;
public static final int DELETE_ALL_FILE = 4004;
public static final int DELETE_ONE_FILE = 4003;
public static final int FIRMWARE_VERSION = 3012;
public static final int FORMAT_MEMORY = 3010;
public static final int FREQUENCY = 9406;
public static final int FS_UNKNOW_FORMAT = 3025;
public static final int GET_BATTERY_LEVEL = 3019;
public static final int GET_CARD_STATUS = 3024;
public static final int GET_CAR_NO = 9426;
public static final int GET_CURRENT_STATE = 3014;
public static final int GET_CUSTOM_STAMP = 9427;
public static final int GET_FILE_LIST = 3015;
public static final int GET_UPDATE_FW_PATH = 3026;
public static final int GET_WIFI_SSID_PASSWORD = 3029;
public static final int GPS = 9410;
public static final int GPS_INFO_STAMP = 9214;
public static final int HEART_BEAT = 3016;
public static int IMAGE_ROTATE = 9093;
public static final int LANGUAGE = 3008;
public static final int LIVE_VIEW_BITRATE = 2014;
public static final int LIVE_VIEW_URL = 2019;
public static final int MOTION_DET = 2006;
public static final int MOVIE_AUDIO = 2007;
public static final int MOVIE_AUTO_RECORDING = 2012;
public static final int MOVIE_BITRATE = 9212;
public static final int MOVIE_CYCLIC_REC = 2003;
public static final int MOVIE_DATE_PRINT = 2008;
public static final int MOVIE_EV = 2005;
public static final int MOVIE_EV_REAR = 9217;
public static final int MOVIE_GSENSOR_SENS = 2011;
public static final int MOVIE_LIVE_VIEW_CONTROL = 2015;
public static final int MOVIE_MAX_RECORD_TIME = 2009;
public static final int MOVIE_RECORD = 2001;
public static final int MOVIE_RECORDING_TIME = 2016;
public static final int MOVIE_REC_BITRATE = 2013;
public static final int MOVIE_REC_SIZE = 2002;
public static final int MOVIE_WDR = 2004;
public static int PARKING_MODE = 9421;
public static final int PHOTO_AVAIL_NUM = 1003;
public static final int PHOTO_CAPTURE = 1001;
public static final int PIP_STYLE = 3028;
public static final int POWER_ON_OFF_SOUND = 8200;
public static final int REAR_CAMERA_MIRROR = 9219;
public static final int RECONNECT_WIFI = 3018;
public static final int REMOTE_CONTROL_FUNCTION = 2020;
public static final int REMOVE_LAST_USER = 3023;
public static final int RESET_SETTING = 3011;
public static int RESTART_CAMERA = 9095;
public static final int SCREEN = 4002;
public static final int SCREEN_SAVER = 9405;
public static final int SET_DATE = 3005;
public static final int SET_NETWORK_MODE = 3033;
public static final int SET_TIME = 3006;
public static final int SPEED_UNIT = 9412;
public static final String STREAM_MJPEG = "http://192.168.1.254:8192";
public static final String STREAM_VIDEO = "rtsp://192.168.1.254/xxx.mov";
public static final int THUMB = 4001;
public static final int TIME_LAPSE_RECORDING = 9201;
public static final int TIME_ZONE = 9411;
public static final int TV_FORMAT = 3009;
public static final int WIFI_NAME = 3003;
public static final int WIFI_PWD = 3004;
 
MOVIE_GSENSOR_SENS looks interesting for those that want to experiment...
 
Hello it is possible to watch live the camera over VLc Player?
 
The Wi-Fi API is simple, if someone wants to know more and use the Wi-Fi in a different way, we can share more.
 
Hi "Viofo", yes is it possible to stream both the front and back cameras over MJPEG at once? Looks like you can stream MJPEG at


but then you have to pick one camera or the other with

or

Would it be possible instead to stream both cameras, with the second one at another URL, like
for example?

Is there a software or a hardware limitation on doing that?

(I know you can do "PIP" with par=2 and par=3, but I want to get a full picture of each video feed.)

Thanks!
 
  • Like
Reactions: Mtz
Currently I saw it can only offer overlaid live view, no separate video for each camera.
 
Is there a software or a hardware limitation on doing that?
On the A129 Duo, the wifi is probably not fast enough, you would need the A129 Pro.
Then I guess it is a firmware limitation and would need some work by Novatek who make the processor and SDK.
 
Curious if there is any hack to perminately change the WiFi operation mode to station (client) instead of AP. Preferably something that will survive reboot such as a special file on the SD card similar to the action cams.
 
Back
Top