Tiny Reverse Engineering GoXtreme Video Camera

Hello everyone

Tiny Reverse Engineering of video camera
GoXtreme copy super economic GoPro video camera,
remote control from openFrameworks with RTSP protocol and FTP.

implemented:

get real time streaming video
download image sd card
upload files sd card

implementation in future:

take photo
recording video

source:


amazon buy:

Good Day
Dario

3 Likes

Hi all,

addons almost ready!

missing a few steps on the PTP.
There are four examples divided by the Protocol:
FTP
PTP
RTSP
(one with all three combos)

Good Day!
Dario

Hey cool stuff !!!

Do you think it’s possible to have multiple GoExtreme live sources ?

thk, yes you can!
many clients can access a single stream RTSP.

while if if want to connect more rooms to the same computer need a wireless network interface for each video camera.

Ciao
Dario

Hi, That’s pretty cool!

Do you have a lot of delay or latency? Do you think it could work as a motion tracking cam?

Thxs.

Hi @pauafg!

Unfortunately, the latency is very high (3/4 seconds).
However, the application that provides the manufacturer for the mobile succeeds
to break down this latency.

I want to specify that we are talking about streaming RTSP that comes
at a maximum resolution of 640x360 fps:30.

with reverse java application for Android, I noticed that is used
the libvlc to solve this problem (I’m studying).

I’m still trying to figure ptp to take pictures and video in all mode.

The way to use the best video camera is the ptp to create video and high-resolution images.

not recommended for motion tracking!

Ciao
Dario

the latency in the video player most probably comes from the buffering that the internal playbin does.

since you are on linux you can avoid it by creating a custom gstreamer pipeline. something like:

// .h
ofGstVideoUtils gst;
ofTexture tex;

// setup
gst.setPipeline("rtspsrc location=" + rtsp.getCameraMediaPath(...) + " latency=0 ! videoconvert",OF_PIXELS_RGB,true,640,480);
gst.startPipeline();

// update
gst.update();
if(gst.isFrameNew()){
    tex.loadData(gst.getPixels());
}

// draw
tex.draw(0,0);

that’s syntax from current OF in master so you might need to change some things slightly if you are on 0.8.4

also the key is in the rtspsrc latency=0 which sets it up to not do any buffer at all, you can adjust it if 0 is too much and there’s also several parameters for that gstreamer element that you can change the same way, you can query them using: gst-inspect-1.0 rtspsrc

1 Like

Thank you very much Mr. @arturo.

I made a test, but the ofGstUtils me this error:

I’m sorry but I’m not expert on gstreamer, this mean anything?

The message seems to speak of a module udpsrc, RTSP protocol of the camera seems to be encapsulated in TCP that may be relevant?

saluti
Dario

mmh, yeah you probably need a depaying element after the rtspsrc and then something to decode the mpeg like:

"rtspsrc location=" + rtsp.getCameraMediaPath(...) + " latency=1 ! rtpjpegdepay ! decodebin ! videoconvert"

the exact depay element depends on the format the camera is sending, you can query all with `gst-inspect-1.0 | grep depay" and it might be that decodebin also does the rtp depaying in which case something like:

"rtspsrc location=" + rtsp.getCameraMediaPath(...) + " latency=1 ! decodebin ! videoconvert"

would work

1 Like

about the protocol by default acording to gst-inspect it seems to be using tcp and udp but you can also specify tcp adding protocols=tcp to the parameters of rtspsrc

1 Like

okkey nice! the depaying rtpjpegdepay worked properly, thank you very much.

specify the protocol does not seem necessary.

based advice arturo I’ve built: setup, update, draw in class rtsp.h
to provide an interface with fast streaming with no latency.

sample, left not latency ofGstUtils, right latency streaming ofVideoPlayer:

Ciao
Dario

Since a few days now I can’t build my project since Visual studio fails with MSB4166 Child node "2"pass4sure comptia security+ certification
exited prematurely. It’s not a virtual memory issue as mentioned in one thread I’ve found on the internet.

Hello

Im thinking in giving this a try, im looking for a low latency stream.

I saw that you say no latency in the rtsp stream, did you measure how low is?

hi @pandereto,

streaming RTSP on low resolution 320x240 there are no latency issues.

you can access videos and high resolution photos using the PTP but not real time.

Warning: PTP object actually uses a binary (gphoto2)
for this work.

Saluti
Dario

Hey thanks!!

Im using a udp stream from raspberry and get arroud 150-200 ms of latency with make it not usable for my project. I want it to use in a fpv car (you know a car a live video stream and a remote controll).

If you have the camera, its possible to do a fast test? Just open a browser with a watch like http://stopwatch.onlineclock.net point the camera to the screen and take an snapshot to see the latency. As you say it may be minimal but it will be great to have a measure!!!

Thanks!!!

Now they are at the airport, I have with me only my pc…
when I return to Milan (two days), I’ll have more precise data.

However, I point out that in the class rtsp.h
It is now used ofGstVideoUtils that allows you to have an interface with the pipeline (setPipeline) there you can set the latency playbin.

nota:
gst.setPipeline(“rtspsrc location=” + path + " latency=0 ! rtpjpegdepay ! decodebin ! videoconvert", OF_PIXELS_RGB, true, width, height);

Another solution might be raspberry pi 2 with camera module.
installing an RTSP server, for example: LIVE555.

try to take a look here:
https://www.raspberrypi.org/forums/viewtopic.php?&t=52071

Ciao

Thanks !!! Gracias!!

I saw the class and the latency parameter, in the rip i tried udp stream, rtsp stream and mjpeg stream. All in gstreamer and in the receiver part i use a custom pipeline in oF. The fastest one i tried was UDP stream.

My finds are that even settings latency=0 in the pipeline, some latency exist with i don’t know where it comes from and the worst part its that the latency its not constant. In a analog signal if the “quality of signal” degrades i get worst image but in digital i get “buffered frames from the past” and you can not drive a car with lag… without crashing :smile:

Some info related… maybe someone find this useful
l