What do i need? I need to get a live view video stream from DJI Osmo and restream it into video server (any RTMP service, or my own low latency live video streaming service). For my service i want not only video, but also the Osmo's telemetry too.
Native DJI's software not allowed to do this, so i have to do it by myself. And i want to get stream not from mobile Android or IOS device, but from any linux-based device like Virt2real board or Raspberry Pi.
DJI Osmo has two hosts - 192.168.1.2 and 192.168.1.3 Just make a Wi-Fi connection to Osmo, and you can ping this hosts.
FPV-передатчик Vision+ построен на чипсете от Texas Instruments. Кстати, на таком же чипсете построен и русский проект платы управления с видеокодеком «Виртурилка», который уже выпускается и успешно используется для дистанционного управления много чем, в т.ч. настоящим большим автомобилем.
So... DJI Osmo allows Telnet and FTP connection by default. Try "telnet 192.168.1.3 20" (login root, pass 123456 or 12345678) and, voila
[code]Dji-Pro login: root Password: #Process /etc/profile... root@Dji-Pro:~#[/code] FTP connection allows access to /opt directory. Just do FTP connect on 192.168.1.3:21 as anonymous (or any login/pass). Directory is read/write, so we can put there some stuff.
Telnet is good, but we all want a SSH connection. SSH is disabled by default (very strange). But we can turn it on. Just run "/opt/dji/bin/sshenable" in telnet session.
Here is /opt/dji/bin/sshenable script [code]#!/bin/sh ./eth0config mkdir -p /var/run mkdir -p /var/empty/sshd chmod 755 /var/empty /usr/local/sbin/sshd [/code] Now we can connect to SSH at 192.168.1.3:22. Login "root", password "123456" or "12345678". Connection very slow, so be patient.
Hardware details
For live video streaming DJI Osmo uses a TI DaVinci DM368 processor and native TI Linux kernel (2.6.32.17). We can see this
[code]root@Dji-Pro:~# uname -a Linux Dji-Pro 2.6.32.17-davinci1 #6 PREEMPT Mon Nov 2 15:28:34 CST 2015 armv5tejl GNU/Linux[/code] [code]root@Dji-Pro:~# cat /proc/cpuinfo Processor : ARM926EJ-S rev 5 (v5l) BogoMIPS : 215.44 Features : swp half thumb fastmult edsp java CPU implementer : 0x41 CPU architecture: 5TEJ CPU variant : 0x0 CPU part : 0x926 CPU revision : 5
UPD> yeah, Ambarella (Phantom has the same camera module) (found here)
“
Deeper digging by Disassembling the DJI Phantom 3 Camera reveals that the P3Pro camera uses the Ambarella A9 SOC which has some really impressive capabilites for a 2 year old 1st gen 4K/UHD image processor. The A9 provides a direct SDIO SDXC connection, so as long as DJI is using that connection there should be no bottleneck between the chip and the SDXC card.
”
Local ports
Now we want to see any used local ports in Osmo's linux. [code]root@Dji-Pro:~# netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 (null):2001 (null):* LISTEN tcp 0 0 (null):20 (null):* LISTEN tcp 0 0 (null):21 (null):* LISTEN tcp 0 0 (null):22 (null):* LISTEN tcp 0 2 (null):20 (null):51924 ESTABLISHED netstat: /proc/net/tcp6: No such file or directory udp 0 0 (null):9000 (null):* netstat: /proc/net/udp6: No such file or directory netstat: /proc/net/raw6: No such file or directory Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path[/code]
TCP: Port 20 - my current Telnet connection Port 21 - FTP server Port 22 - SSH server Port 2001 - maybe telemetry
UDP: Port 9000 - live video via UDT protocol
UPD> Wow! I found topic with some DJI Phantom hacks. System a very similar to Osmo, with a few differences. Here it is - http://www.phantompilots.com They says that 2001 port used for telemetry. Ура, товарищи, телеметрия найдена!
Encoding software
For my interest i tryed to copy encode_wifi into my Virt2real board (based on DM365).
Try to run [code][root@virt2real /]# ./encode_wifi ./encode_wifi: error while loading shared libraries: libudt.so: cannot open shared object file: No such file or directory [/code] Ooops, UDT library needed. But now we know that video streame uses UDT. Not a problem. Take this library from Osmo. Try to start again
[code][root@virt2real /]# ./encode_wifi ./encode_wifi: error while loading shared libraries: libcommon.so: cannot open shared object file: No such file or directory[/code] Ok, libudt now good, take other libraries from Osmo.
Try to start again. And... Yeah, baby!!! DJI Osmo's streaming software runned on Virt2real board! But i have no dm365-gpio device module. Hmmm... But this is not needed for my tasks, so i don't care. [code][root@virt2real /]# ./encode_wifi encode_usb V00.02.02.00(Dec 18 2015 11:09:36). open /dev/dm365-gpio fail! Usage: encode [options]
Options: -v | --videofile Video file to record to -y | --display_standard Video standard to use for display (see below). Same video standard is used at input. -r | --resolution Video resolution ('width'x'height') [video standard default] -b | --videobitrate Bit rate to encode video at [variable] -g | --gop_interal GOP interval[30] -w | --watchdog_disable Disable watchDog [watchDog Disabled] -f | --write_disable Disable recording of encoded file [enabled] -I | --video_input Video input source [video standard default] -n | --nooutput don't output the stream [off] -m | --mode libusb async send mode [off] -a | --autodetect autodetect the video input port and standard [off] -s | --serialdata receive data from uart1 and append to h264 stream trail[off]-h | --help Print this message
Video standards available 1 D1 @ 30 fps (NTSC) 2 D1 @ 25 fps (PAL) 3 720P @ 30 fps [Default] 4 720P @ 50 fps - for DM368 5 720P @ 60 fps - for DM368 6 1080I @ 25 fps - for DM368 7 1080I @ 30 fps - for DM368 8 1080P @ 25 fps - for DM368 9 1080P @ 30 fps - for DM368 10 1080P @ 50 fps - for DM368 11 1080P @ 60 fps - for DM368 Video inputs available: 1 Composite 2 HDMI[/code]
Video stream
Now try to get video stream. It is not so easy how i think.
At first, look packets from mobile appication. Tcmpdump needed, but it absent in Osmo's Linux. But i have filesystem from Virt2real board. Get tcmpdump from there and copy into /opt/tmp. Then run it.
[code]root@Dji-Pro:/opt/tmp# ./tcpdump [J tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on usb0, link-type EN10MB (Ethernet), capture size 65535 bytes 00:09:20.004016 IP 192.168.1.20.49189 > 192.168.1.3.20: Flags [.], ack 2210972111, win 63568, length 0 00:09:20.026723 IP 192.168.1.3.20 > 192.168.1.20.49189: Flags [P.], seq 1:151, ack 0, win 5840, length 150 00:09:20.205874 IP 192.168.1.20.49189 > 192.168.1.3.20: Flags [.], ack 151, win 63418, length 0[/code] This is just telnet session from Putty. Nothing interesting.
Now connect Android smartphone without DJI Go application. Nothing new, no packets from/to port 9000. Go to Play Market and install DJI Go application, then start it. Look tcpdump again. Andoid smartphone has ip 192.168.1.21
[code]00:09:29.797368 ARP, Request who-has 192.168.1.3 tell 192.168.1.21, length 28 00:09:29.797596 ARP, Reply 192.168.1.3 is-at 60:60:1f:10:00:0a (oui Unknown), length 28 00:09:29.800764 IP 192.168.1.21.59108 > 192.168.1.3.9000: UDP, length 64 00:09:29.801938 IP 192.168.1.21.45451 > 192.168.1.3.9001: UDP, length 64 00:09:29.802212 IP 192.168.1.3 > 192.168.1.21: ICMP 192.168.1.3 udp port 9001 unreachable, length 100 00:09:29.802786 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 64 00:09:29.805631 IP 192.168.1.21.59108 > 192.168.1.3.9000: UDP, length 64 00:09:29.809562 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 64 00:09:29.931408 IP 192.168.1.21.59108 > 192.168.1.3.9000: UDP, length 20 00:09:29.941207 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 1472 00:09:29.941654 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 1472 00:09:29.942136 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 1472 00:09:29.942561 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 1472 00:09:29.942998 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 1472 00:09:29.943274 IP 192.168.1.21.59108 > 192.168.1.3.9000: UDP, length 40 00:09:29.943682 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 1472 00:09:29.944111 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 805 00:09:29.944715 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 20 00:09:29.945728 IP 192.168.1.21.59108 > 192.168.1.3.9000: UDP, length 32 00:09:29.974711 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 1472 00:09:29.975223 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 1472 00:09:29.975675 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 1472 00:09:29.976110 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 1472 00:09:29.976533 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 1472 00:09:29.976960 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 1472 00:09:29.977426 IP 192.168.1.3.9000 > 192.168.1.21.59108: UDP, length 830[/code] Here it is! Video streaming via UDT with MTU 1500 (1500 - UDP header = 1472). But not known how to view it from my own code. Unknown yet...
Now try to start encode_wifi in Osmo's linux manualy
[code]root@Dji-Pro:/opt/dji/lib# /opt/dji/bin/encode_wifi -a -s -p 6000 -b 3000000
encode_usb V00.02.02.00(Dec 18 2015 11:09:36). Auto to detect video input type: Default video input selected:Hdmi_yuv Setting video standard to: 0x4000000000000 Capture input set to Hdmi_yuv:9 Capture videoStdOld=00000009 videoFrameRate=30000, width=1280, height=720 GOP interval:0, outBufSize:1382400, enAdpBW:0, airRate=0, slice=6, VUI=4,timeScale=60000 osdThrFxn: process ID is 664 *********** tcp server ready on port:2001 server is ready at port: 9000 init udt server ok watchdog timeout:4 Watchdog_Init ctrlThrFxn: process ID is 659 *********** cmd proc: Illegal connection request!! Authen mac is 90:00:db:89:61:0a
hdmi status is 1 disableStream 0 ARM Load: 6% Video fps: !!!! 27 fps Video bit rate: lowframe 1 2049 kbps PHY Bandwidth: 0 kbps Time: 00:00:02 Resolution: 1280x720
serv 29b6f905(0) accept one new clnt 29b6f903 hdmi status is 1 disableStream 0 ARM Load: 76% Video fps: 30 fps Video bit rate: lowframe 1 2330 kbps PHY Bandwidth: 0 kbps Time: 00:00:03 Resolution: 1280x720
hdmi status is 1 disableStream 0 ARM Load: 52% Video fps: 30 fps Video bit rate: lowframe 1 2277 kbps PHY Bandwidth: 0 kbps Time: 00:00:04 Resolution: 1280x720
hdmi status is 1 disableStream 0 ARM Load: 54% Video fps: 30 fps Video bit rate: lowframe 1 2313 kbps PHY Bandwidth: 0 kbps Time: 00:00:05 Resolution: 1280x720
...
^Creceive sigint!process quit,let kernel feed watchdog!!! ERROR: assertion violation: Thread_posix.c, line 258 ERROR: assertion violation: alg_malloc.c, line 116 Segmentation fault[/code]
UPD> So.. I did it!!! I see a realtime live view video from the DJI Osmo on Windows notebook at the same time with DJI Go application on Android smartphone!!!
Proof:
Now i can restream it to any video server!!! Ура, товарисчи!!!
UPD> New video. Live video translation from DJI Osmo via inet.
Привет, G0l. Это мой пост на pixaero. И всё-таки, как смотреть видео с DJI на винде? Я разобрался только до того, что DJI используют протокол UDT, внутри UDP-пакетов. Но до получения живой картинки так и не дошло, подскажи куда копать дальше. С уважением, sea_owl.
2 Гость: Привет! В двух словах рассказать не получится, так что погодь немного, готовлю огромный топик в продолжение этого, как раз на тему приёма и показа видео.
On the latest firmware pass 12345678 for ssh, but dm368 not available now. See another parts links in head of topic. Only in russian, so use google translate
Привет друг, я tendando смотреть видео на ПК с Windows, встроенное программное обеспечение 1.6.2.10 может получить доступ только протокол SSH. У меня есть доступ к папкам и файлам. Можете ли вы дать мне какие-либо советы любой программы, которая может работать на ПК с Windows, который захватывает сеть Wi-Fi? Любой игрок, который запускает поток сети RTMP будет работать? Вы могли бы показать мне параметры конфигурации? Было бы достаточно, чтобы ввести 192.168.1.3:9000~~dobj в потоке? Спасибо, мой друг.
On my video demo windows application shows video stream from my streaming box, which just takes video from Osmo. Directly taking video from Osmo for Windows I have not done, and not sure what somebody need it. But i can do it too, в принципе :-)
i'm sure i can find a need for that don't worry, maybe just an universal way to direct stream on internet from the osmo? to show to friends, family, clients, telling them: just go on www.blabla.com and it will directly show the stream, do you think that's possible?
Цитата: ...maybe just an universal way to direct stream on internet from the osmo...
On second demo video i streamed via Internet. No windows needed for this. Just a little streaming box (Raspberry Pi based). Can stream any protocols. Can stream directly on Youtube or Twitch. So i already works. No Windows PC needed :-)
"i streamed via Internet" - i mean that a first box (streamer) send to server in Germany. Second box (receaver, second RaspberryPi) receives it and shows on TV.
ah ok great! but can "automatise" that, in sort that you don't need boxes or what? because i don't have any knowledge in setting up servers and stuffs :/
Hi Friend. I have followed his work on OSMO, and I confess I have tried to succeed but I can not. I'm trying to see the live video on a PC running Windows, with OSMO firmware 1.6.2.10, but I can only access on SSH the files and folders. Can you give me any tips or any program that can run on a Windows PC that captures streaming of OSMO through the Wi-Fi network? I could access any player RTMP? Could you show me the configuration settings? It would be enough I go through the IP 192.168.1.3:9000? Thank you my friend.
Здравствуйте а у вас случайно нет идеи почему dji lightbridge не транслирует картинку на андроид девайсы пишет connection broken. На одни он транслирует самсунг галакси. а на более раннюю версию нет. Подскажите что в коде подкрутить если знаете. flinn@rambler.ru Спасибо
Was there any update for something similar to this for any of the DJI Phantom 4 Pro? Looking to send the stream through to an existing app where people can have access to the stream. Was thinking of setting up an RTMP and using a Rasberry Pi.
Цитата: Was there any update for something similar to this for any of the DJI Phantom 4 Pro? Looking to send the stream through to an existing app where people can have access to the stream. Was thinking of setting up an RTMP and using a Rasberry Pi.
Гость Суббота, 12 Марта, 2016 00:28 цитировать ссылка на коммент
Gol Суббота, 12 Марта, 2016 10:08 цитировать ссылка на коммент
Привет! В двух словах рассказать не получится, так что погодь немного, готовлю огромный топик в продолжение этого, как раз на тему приёма и показа видео.
Гость Четверг, 31 Марта, 2016 04:14 цитировать ссылка на коммент
Gol Четверг, 31 Марта, 2016 04:33 цитировать ссылка на коммент
ага, видел
Гость Понедельник, 4 Апреля, 2016 20:09 цитировать ссылка на коммент
Гость Понедельник, 4 Апреля, 2016 20:25 цитировать ссылка на коммент
Gol Понедельник, 4 Апреля, 2016 20:39 цитировать ссылка на коммент
Hi, i used GStreamer on PC and Raspberry PI.
Гость Воскресенье, 10 Апреля, 2016 19:36 цитировать ссылка на коммент
Гость Воскресенье, 10 Апреля, 2016 19:37 цитировать ссылка на коммент
Gol Воскресенье, 10 Апреля, 2016 22:18 цитировать ссылка на коммент
Гость Понедельник, 11 Апреля, 2016 00:27 цитировать ссылка на коммент
Гость Среда, 27 Апреля, 2016 18:01 цитировать ссылка на коммент
Привет друг, я tendando смотреть видео на ПК с Windows, встроенное программное обеспечение 1.6.2.10 может получить доступ только протокол SSH. У меня есть доступ к папкам и файлам. Можете ли вы дать мне какие-либо советы любой программы, которая может работать на ПК с Windows, который захватывает сеть Wi-Fi? Любой игрок, который запускает поток сети RTMP будет работать? Вы могли бы показать мне параметры конфигурации? Было бы достаточно, чтобы ввести 192.168.1.3:9000~~dobj в потоке? Спасибо, мой друг.
Гость Четверг, 25 Августа, 2016 13:17 цитировать ссылка на коммент
thx
Gol Четверг, 25 Августа, 2016 13:32 цитировать ссылка на коммент
Гость Четверг, 25 Августа, 2016 13:47 цитировать ссылка на коммент
concerning the osmo, have you done a windows .exe? if so, could you please provide a link, would be awesome
Gol Четверг, 25 Августа, 2016 14:01 цитировать ссылка на коммент
Гость Четверг, 25 Августа, 2016 15:23 цитировать ссылка на коммент
Gol Четверг, 25 Августа, 2016 19:04 цитировать ссылка на коммент
On second demo video i streamed via Internet. No windows needed for this. Just a little streaming box (Raspberry Pi based). Can stream any protocols. Can stream directly on Youtube or Twitch. So i already works. No Windows PC needed :-)
Gol Четверг, 25 Августа, 2016 19:30 цитировать ссылка на коммент
Гость Четверг, 25 Августа, 2016 20:14 цитировать ссылка на коммент
Гость Воскресенье, 28 Августа, 2016 17:52 цитировать ссылка на коммент
ttwrs Вторник, 30 Августа, 2016 00:21 цитировать ссылка на коммент
Гость Пятница, 2 Сентября, 2016 23:59 цитировать ссылка на коммент
Гость Среда, 23 Августа, 2017 20:32 цитировать ссылка на коммент
Gol Четверг, 24 Августа, 2017 16:06 цитировать ссылка на коммент
Email sent
Гость Понедельник, 22 Января, 2018 19:14 цитировать ссылка на коммент
hardkore79@hotmail.com
tnx!
Гость Суббота, 3 Февраля, 2018 12:56 цитировать ссылка на коммент
Gol Понедельник, 5 Февраля, 2018 00:33 цитировать ссылка на коммент
А какая версия Андроида на котором не работает?
Гость Понедельник, 23 Июля, 2018 13:58 цитировать ссылка на коммент
Very nice work. I was wondering if it is possible to this in a drone and not in OSMO. Thanks.
Gol Понедельник, 23 Июля, 2018 14:02 цитировать ссылка на коммент
http://cosmostreamer.com/wired/
http://cosmostreamer.com/wired/howtomake
Гость Четверг, 12 Сентября, 2019 21:36 цитировать ссылка на коммент
Gol Пятница, 13 Сентября, 2019 15:14 цитировать ссылка на коммент
I not tried Phantom yet. Maybe later.