You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 100ac9b
Browse filesBrowse the repository at this point in the historyBrowse files
fix: YL3 frames put together from each piece's own length (bytes 2-3), not the whole datagram; jieli:// turns 90° by default; raw frames outlive the session (#187)
|`FLOW-UFO-xxxxxx`, `FLOW_xxxxxx`|`192.168.169.x`| FLOW-UFO (BL60x camera; turbodrone calls it `wifi_uav`) |`flowufo://192.168.169.1` (UDP 8800 and 8801) | in testing ([#187](https://github.com/OpenIPC/decoder/issues/187)) |
46
46
|`FLY-UFO-xxxxxx` and other cooingdv toys (KY UFO, RC UFO apps) |`192.168.1.x`| KY UFO RTSP |`rtsp://192.168.1.1:7070/webcam` (with the heartbeat to UDP 7099) | in testing ([#187](https://github.com/OpenIPC/decoder/issues/187)) |
47
-
|`HF_xxxxxxxx`|`192.168.80.x`| Jieli / HF (Jieli AC79 camera, vendor app *DVRunning 2*) |`jieli://192.168.80.1` (CTP on TCP 3333, video to the phone's UDP 2224 or 6666) | test build 4: YL3 video on UDP 2224 plays, lower half broken in test build 3 ([#187](https://github.com/OpenIPC/decoder/issues/187)) |
47
+
|`HF_xxxxxxxx`|`192.168.80.x`| Jieli / HF (Jieli AC79 camera, vendor app *DVRunning 2*) |`jieli://192.168.80.1` (CTP on TCP 3333, video to the phone's UDP 2224 or 6666) | test build 5: YL3 video on UDP 2224, pieces put together by their own length ([#187](https://github.com/OpenIPC/decoder/issues/187)) |
48
48
49
49
When a `flowufo://` or `jieli://` slot points at the phone itself, or at the network of another family, its status says so (for example *192.168.1.100 is this phone; the toy is usually 192.168.1.1*, *This network looks like a KY UFO RTSP toy: try rtsp://192.168.1.1:7070/webcam* or, on a `192.168.80.x` network, *try jieli://192.168.80.1*).
50
50
@@ -109,7 +109,7 @@ What the app does, as a capture of the vendor app shows it ([#196](https://githu
109
109
- It connects to TCP port 3333 and talks **CTP**: each message is `CTP:`, the length of a topic name, the topic (e.g. `OPEN_RT_STREAM`), the length of a JSON text and the JSON.
110
110
-`APP_ACCESS` first; the toy answers with `KEEP_ALIVE_INTERVAL` (a timeout, 60 s), its battery and SD card state and `VIDEO_PARAM` (the size, e.g. 640×480 at 25 fps). Then `DATE_TIME` (the phone's time), a `CTP_KEEP_ALIVE` every 7.5 s (a quarter of a shorter timeout), and `OPEN_RT_STREAM` with the size from `VIDEO_PARAM` (640×480 at 25 if the toy sent none). When the slot stops: `CLOSE_RT_STREAM`.
111
111
- The video was **not** in the capture (PCAPdroid without root cannot see it). After turbodrone's research on the same Jieli SDK it is **RTP/JPEG** (payload type 26) or H.264 (96) to the phone's **UDP port 6666**. The app listens there and plays payload type 26 through its RTP/JPEG path and 96 through its H.264 path; a whole JPEG in a datagram without RTP is shown too.
112
-
- A YL3 sent nothing to 6666 but its own stream to the phone's **UDP port 2224**: per datagram a 20-byte header, then the JPEG (seen: byte 0 = 2, a packet counter in bytes 4–7, the JPEG's length in 8–11, an offset in 12–15, little-endian; frames of 4–8 KB in one datagram, 40–60 zero bytes after the JPEG). Its frames are portrait (240×320 when 640×480 was asked for): the camera is mounted sideways, so `jieli://` turns them 270° counter-clockwise like the K200's, `?rotate=` overrides it. The app listens on 2224 as well and shows those JPEGs; longer frames are put together by the offset. The first five datagrams go to the log with the whole header, `/stats.json` has a `stream` object (`packets`, `frames`, `dropped`, `last_drop`) and `video_port`; why a frame was dropped is in the log for the first three. The debug page serves the last frame as it came, `/jieli-frame.jpg`, and the last dropped one, `/jieli-dropped.bin`.
112
+
- A YL3 sent nothing to 6666 but its own stream to the phone's **UDP port 2224**: per datagram a 20-byte header, then a piece of a JPEG. Header, little-endian: byte 0 the type (2 for JPEG, bit 7 set on the last piece of a frame), bytes 2–3 the length of this piece, 4–7 a packet counter, 8–11 the length of the JPEG, 12–15 the offset of the piece in it. The datagram can be longer than the piece; what follows is left over from earlier frames and is ignored (test build 3 took it, which broke the lower half of the picture). Its frames are portrait (240×320 or 320×240 rotated): the camera is mounted sideways, so `jieli://` turns them 90° counter-clockwise; 270° showed them upside down; `?rotate=` overrides it. The app listens on 2224 as well as 6666; the first five datagrams go to the log with the whole header, `/stats.json` has a `stream` object (`packets`, `frames`, `dropped`, `last_drop`) and `video_port`; why a frame was dropped is in the log for the first three. The debug page serves the last frame as it came, `/jieli-frame.jpg`, and the last dropped one, `/jieli-dropped.bin`, also after the session ended (the app pauses while the phone's browser is open).
113
113
- If nothing arrives on 6666 or 2224 for 5 s after `OPEN_RT_STREAM`, the status says so and the app also listens on UDP 1234 (audio in the vendor SDK), **only to log** what arrives there, for 30 s or 20 packets, then frees the port; it asks for the stream again every 10 s without video.
114
114
-**No flight command is ever sent**: no `FLIGHT_CONTROL` over CTP, nothing to the toy's UDP port 3456 (where the vendor app sends the sticks).
115
115
- Ports 6666 and 2224 can be used by one slot at a time: one `jieli://` slot in a grid.
@@ -121,7 +121,7 @@ URL options (as with `udp://`, separated by `?` and `&`):
121
121
|`w`, `h`, `fps`| numbers | from `VIDEO_PARAM`, else 640, 480, 25 | the stream asked for in `OPEN_RT_STREAM`|
122
122
|`rtp`| a UDP port |`6666`| the local port the video is expected on |
123
123
|`format`|`0`, `1`|`0`|`0` asks for JPEG (as the vendor app does), `1` for H.264 |
124
-
|`rotate`|`0`, `90`, `180`, `270`|`270`| degrees counter-clockwise the JPEG frames are turned (the YL3's camera is mounted sideways) |
124
+
|`rotate`|`0`, `90`, `180`, `270`|`90`| degrees counter-clockwise the JPEG frames are turned (the YL3's camera is mounted sideways) |
0 commit comments