A RTSPServer for RTS3903N based IP Cameras (Yi Camera Inspired)

RTSPServer for RTS3903N based YI Cameras

While this repo is focused on Yi based cameras, it should compile and run on any RTS3903N based camera!

Background

It took many hours of research to put this together. The SDK was very hard to find, and I luckily stumbled across it by finding similar cameras (TP Link) that had shared the source due to GPL requirements.

Important: This method doesn't overwrite the existing flash, simply remove the SD card, and the 'hack' will be disabled.

Getting Started

  • Download the latest zip from the releases page
  • Extract the contents to the root of a MicroSD card (minimum 2GB) that is FAT32 partitioned
  • (Optional) If you're using WiFi, edit Factory/wpa_supplicant.conf and add your WiFi credentials
  • Connect to RTSP via rtsp://[YOUR_CAMERA_IP]/ch0_0.h264
  • Does the picture look normal? No, see troubleshooting below

What's Working

  • H264 encoded stream via rtsp://[YOUR_CAMERA_IP]/ch0_0.h264
  • Telnet server open by default (root, no password)
  • WiFi connection without having to go through the initial vendor pairing process
  • Yi Camera
    • Tested with 7.1.00.25A_202002271051 and

TODO:

  • Add audio to the feed
  • Control PTZ (pan/tilt) based cameras
  • ONVIF
  • Better documentation
  • Create a flash version / permanent solution

Developers / Compiling

  • Install Docker
  • Run ./compile.sh
  • This chipset is very capable and there are many features / options available for the encoder see stream.c where there are calls to manage_modes
    • To find out what options are available see rtsvideo.h where enum_rts_video_ctrl_id is defined.
  • If you create / discover better settings to improve the picture quality, please push to this repo :)

Video Quality

  • See the Developers/Compiling section and tweak the settings in stream.c inside the start_stream() function - if you find an improved configuration, please push it to this repo, so we can all benefit.
  • Significant settings:
    • h264_attr.bps
    • RTS_VIDEO_CTRL_ID_NOISE_REDUCTION
    • RTS_VIDEO_CTRL_ID_LDC
    • RTS_VIDEO_CTRL_ID_DETAIL_ENHANCEMENT
    • RTS_VIDEO_CTRL_ID_3DNR (Offers significant improvement but can't find the 'sweet' spot)
    • RTS_VIDEO_CTRL_ID_IR_MODE (If you're having issues with nightmode)

Troubleshooting

The RTS3903N has a dedicated ADC that's used for sensing the light, I've discovered that some cameras had their logic inverted and to get around this, do the following

  • Create an empty file on the root of the sd card named invert_adc (exact path /sdcard/invert_adc)

If this doesn't solve the issue, take a look at the stream.c where sensor_sensitivity is declared.

Credit

  • The RTSPServer part of this repo was taken from another repo, full credit to be given to:
    • roleo I believe is the original author[?]
    • alienatedsec I copied the modified version that repo
Comments
  • Resetting the Yi IoT Camera?

    Resetting the Yi IoT Camera?

    Not sure how appropriate this is but this is the only place on the entire internet where anyone discusses this device.

    My camera is on 7.1.00.19A_201910181012 fw and it appears to be soft bricked - doesn't react to reset key, when it boots there's no audio cue and never shows up in Yi IoT app.

    It does connect to the wifi (can ping it no problem), it toggles IR light and it does print to the log file as well.

    Click to see log file
    10-24 10:24:08.077 dispatch.c:4480|main() sysversion:7.1.00.19A_201910181012
    10-24 10:24:08.329 dispatch.c:727|get_productinfo() 
    10-24 10:24:08.329 dispatch.c:731|get_productinfo() product info partition exist!
    10-24 10:24:08.329 dispatch.c:755|get_productinfo() product info partition is empty, check if backup exist!
    10-24 10:24:08.329 dispatch.c:780|get_productinfo() backup not exist, read tmp files!
    10-24 10:24:08.329 dispatch.c:383|get_tmp_did() did not exist, read tmp files
    10-24 10:24:08.329 cloud.c:5399|sys_init() open share mem ok
    10-24 10:24:08.650 dispatch.c:1209|get_config() got sn(UloZ8hO2..._REDACTED_)
    10-24 10:24:08.650 dispatch.c:1210|get_config() got pwd(_REDACTED_)
    10-24 10:24:08.650 dispatch.c:1211|get_config() got ssid(_REDACTED_)
    10-24 10:24:08.650 dispatch.c:1212|get_config() got tnp_init_string(MMFBJPLJICFGKJHFOJFFPMELHPCFFAGCHEEJKPIDINBKDABIPMIIAONIPBCLBBKNPLKPDKPENIDOAJCP)
    10-24 10:24:08.731 dispatch.c:4574|main() hw_type(2)
    10-24 10:24:08.731 dispatch.c:4583|main() open_cpld fail
    10-24 10:24:08.731 dispatch.c:4608|main() ioctl(536899605) error(25),Inappropriate ioctl for device
    10-24 10:24:08.731 dispatch.c:4609|main() ioctl(536899606) error(25),Inappropriate ioctl for device
    10-24 10:24:08.731 dispatch.c:4610|main() ioctl(536899603) error(25),Inappropriate ioctl for device
    10-24 10:24:08.731 dispatch.c:4637|main() open_ptz fail
    10-24 10:24:08.733 dispatch.c:501|choose_server() in choose_server, region_id = 1, api_server = https://plt-api.xiaoyi.com, sname = RealPJ, dlproto = micn
    10-24 10:24:08.733 dispatch.c:501|choose_server() in choose_server, region_id = 16, api_server = https://plt-api-de.xiaoyi.com, sname = RealPJ, dlproto = mieu
    10-24 10:24:08.733 dispatch.c:4683|main() ioctl(536899612) error(25),Inappropriate ioctl for device
    10-24 10:24:08.734 dispatch.c:4731|main() init ok, cost time(656 ms)
    10-24 10:24:08.779 mp4record.c:1293|main() recordevent_init finish
    10-24 10:24:09.018 p2p_tnp.c:6741|main() fshare_open ok
    10-24 10:24:09.324 dispatch.c:2532|do_mq_process() dispatch got (0x7f)
    10-24 10:24:09.324 dispatch.c:4368|do_mq_process() Process (0x7f) end
    10-24 10:24:09.324 p2p_tnp.c:2055|p2p_set_tnp_init_status() p2p_set_tnp_init_status 1 send_msg ok!
    10-24 10:24:09.505 watch_process.c:116|get_watch_info() check_interval=10
    12-12 09:35:46.213 watch_process.c:134|get_watch_info() process=dispatch;cmd=cd /home/app;./dispatch &;
    12-12 09:35:46.213 watch_process.c:134|get_watch_info() process=cloud;cmd=cd /home/app;./cloud &;
    12-12 09:35:46.214 watch_process.c:134|get_watch_info() process=rmm;cmd=reboot;
    12-12 09:35:46.214 watch_process.c:134|get_watch_info() process=p2p_tnp;cmd=cd /home/app;./p2p_tnp &;
    12-12 09:35:46.214 watch_process.c:134|get_watch_info() process=mp4record;cmd=cd /home/app;./mp4record &;
    12-12 09:35:46.214 watch_process.c:134|get_watch_info() process=arp_test;cmd=cd /home/app;./arp_test &;
    12-12 09:35:46.214 watch_process.c:134|get_watch_info() process=oss;cmd=cd /home/app;./oss &;
    12-12 09:35:46.551 dispatch.c:2316|p_worker() DISPATCH_SET_DEFAULT_TIME 1639301746
    12-12 09:35:46.551 mp4record.c:1304|main() init_finish(1), start_with_reset(0)
    12-12 09:35:46.551 mp4record.c:1312|main() fshare_open ok
    12-12 09:35:46.551 dispatch.c:1715|do_monitor_wifi() ioctl(536899588) error(25),Inappropriate ioctl for device
    12-12 09:35:46.551 dispatch.c:1716|do_monitor_wifi() ioctl(536899594) error(25),Inappropriate ioctl for device
    12-12 09:35:46.551 dispatch.c:1718|do_monitor_wifi() wifi disconnected, now reconnect wifi
    12-12 09:35:46.551 dispatch.c:1630|reset_wifi_module() now reset wifi module 
    12-12 09:35:53.987 rmm.c:1401|msg_proc() pid[820]
    12-12 09:35:54.903 dispatch.c:1730|do_monitor_wifi() wpa connected , now dhcp
    12-12 09:35:55.250 dispatch.c:1732|do_monitor_wifi() wpa connected , now dhcp finish
    12-12 09:35:55.869 watch_process.c:171|check_watch_info() cloud crashed!
    12-12 09:35:55.869 watch_process.c:171|check_watch_info() p2p_tnp crashed!
    12-12 09:35:55.869 watch_process.c:171|check_watch_info() arp_test crashed!
    12-12 09:35:56.277 dispatch.c:1478|check_wifi_connect() bssid(70:4f:57:d9:ee:a1)
    12-12 09:35:56.277 dispatch.c:1500|check_wifi_connect() ip(192.168.0.150)
    12-12 09:35:56.289 dispatch.c:1511|check_wifi_connect() gw(192.168.0.1)
    12-12 09:35:57.345 dispatch.c:1520|check_wifi_connect() gwmac(24:4B:_REDACTED_)
    12-12 09:35:57.361 dispatch.c:1530|check_wifi_connect() mask(255.255.255.0)
    12-12 09:35:57.392 dispatch.c:1540|check_wifi_connect() mac(44:EF:_REDACTED_)
    12-12 09:35:57.535 dispatch.c:1561|check_wifi_connect() signal_quality(81)
    12-12 09:35:57.535 dispatch.c:1755|do_monitor_wifi() ioctl(536899585) error(25),Inappropriate ioctl for device
    12-12 09:35:57.536 dispatch.c:1756|do_monitor_wifi() ioctl(536899594) error(25),Inappropriate ioctl for device
    12-12 09:35:58.593 dispatch.c:1586|check_wifi_connect() signal_quality(88)
    12-12 09:36:05.878 watch_process.c:171|check_watch_info() cloud crashed!
    12-12 09:36:05.885 watch_process.c:171|check_watch_info() p2p_tnp crashed!
    12-12 09:36:06.010 cloud.c:5399|sys_init() open share mem ok
    12-12 09:36:06.288 cloud.c:2113|need_update() cmd = /backup/cloudAPI -c 145 -url "https://plt-api-de.xiaoyi.com/vmanager/ipc/firmware/upgrade/silent" -did  -sname RealPJ -version 7.1.00.19A_201910181012 
    12-12 09:36:06.288 cloud.c:5288|yi_sync_time() cmd=/backup/cloudAPI -c 136 -url http://plt-api-de.xiaoyi.com/v2/ipc/sync_time 
    12-12 09:36:06.289 p2p_tnp.c:6741|main() fshare_open ok
    12-12 09:36:06.407 dispatch.c:2532|do_mq_process() dispatch got (0x7f)
    12-12 09:36:06.407 dispatch.c:4368|do_mq_process() Process (0x7f) end
    12-12 09:36:06.407 p2p_tnp.c:2055|p2p_set_tnp_init_status() p2p_set_tnp_init_status 1 send_msg ok!
    12-12 09:36:06.407 dispatch.c:2532|do_mq_process() dispatch got (0x7f)
    12-12 09:36:06.408 dispatch.c:4368|do_mq_process() Process (0x7f) end
    12-12 09:36:06.408 p2p_tnp.c:2055|p2p_set_tnp_init_status() p2p_set_tnp_init_status 2 send_msg ok!
    12-12 09:36:06.408 cloud.c:2121|need_update() ret = 
    12-12 09:36:06.597 cloud.c:5295|yi_sync_time() {"code":"20000","time":1640553676100}
    12-12 09:36:06.597 cloud.c:520|cloud_set_time() msg snd success
    12-12 09:36:06.598 cloud.c:5307|yi_sync_time() yi_sync_time ok!
    12-12 09:36:06.598 cloud.c:5383|sync_time() sync_time ok!
    12-12 09:36:06.598 dispatch.c:2532|do_mq_process() dispatch got (0x71)
    12-12 09:36:06.603 cloud.c:4435|yi_proc() yi_proc ok, update time[100]
    12-12 09:36:06.609 cloud.c:2426|webapi_do_login() now do login 
    12-12 09:36:06.610 cloud.c:2453|webapi_do_login() cmd = /backup/cloudAPI -c 138 -url "https://plt-api-de.xiaoyi.com/v4/ipc/on_line" -key 0Jt0i7MbMMV2M0e -keySec  -uid  -version 7.1.00.19A_201910181012 -ssid "_REDACTED_" -mac 44:EF:BF:_REDACTED_ -ip 192.168.0.150 -signal_quality 88 -packetloss 0 -p2pconnect 0 -p2pconnect_success 0 -apmode false -tfstat 10000 
    12-26 21:21:16.100 dispatch.c:2608|do_mq_process() DISPATCH_SET_TIME 1640553676 
    12-26 21:21:16.100 dispatch.c:4368|do_mq_process() Process (0x71) end
    12-26 21:21:16.101 dispatch.c:2532|do_mq_process() dispatch got (0x92)
    12-26 21:21:16.101 dispatch.c:3078|do_mq_process() set DISPATCH_SET_PANORAMA_CAPTURE_STATE [0x0]
    12-26 21:21:16.101 dispatch.c:4368|do_mq_process() Process (0x92) end
    12-26 21:21:16.110 cloud.c:2465|webapi_do_login() 
    12-26 21:21:17.383 rmm.c:705|motion_proc() pid[952]
    12-26 21:21:17.453 motion_detect.c:84|modet_init() modet_init img wid-hei:320-192, thresh:2
    12-26 21:21:17.466 mp4record.c:729|record_init() got video main vps=0 sps=34 pps=10, ts=4171137679, framerate=0 width=0 height=0
    12-26 21:21:17.534 mp4record.c:751|record_init() got video sub sps=33 pps=9, ts=4171137754, framerate=20 width=640 height=360
    12-26 21:21:17.534 mp4record.c:782|record_init() got audio aac config, ts=4171136400
    12-26 21:21:17.534 mp4record.c:1330|main() mp4 mode got sd exist
    12-26 21:21:17.550 mp4record.c:995|record_file() record_init finish
    12-26 21:21:17.550 mp4record.c:729|record_init() got video main vps=0 sps=34 pps=10, ts=4171137679, framerate=0 width=0 height=0
    12-26 21:21:17.552 mp4record.c:751|record_init() got video sub sps=33 pps=9, ts=4171137754, framerate=20 width=640 height=360
    12-26 21:21:17.553 mp4record.c:782|record_init() got audio aac config, ts=4171136400
    12-26 21:21:20.786 cloud.c:2121|need_update() ret = 
    12-26 21:21:25.811 cloud.c:2121|need_update() ret = 
    12-26 21:21:27.147 cloud.c:2465|webapi_do_login() 
    12-26 21:21:30.839 cloud.c:2121|need_update() ret = 
    12-26 21:21:35.866 cloud.c:2121|need_update() ret = 
    12-26 21:21:39.292 dispatch.c:2532|do_mq_process() dispatch got (0x400e)
    12-26 21:21:39.292 dispatch.c:4368|do_mq_process() Process (0x400e) end
    12-26 21:21:45.175 cloud.c:2465|webapi_do_login() 
    12-26 21:21:58.805 mp4record.c:938|send_mp4rcd_heartbeat_msg() msg snd success
    12-26 21:21:58.805 dispatch.c:2532|do_mq_process() dispatch got (0xe7)
    12-26 21:21:58.805 dispatch.c:4104|do_mq_process() got rcd heartbeat
    12-26 21:21:58.805 dispatch.c:4368|do_mq_process() Process (0xe7) end
    12-26 21:21:59.176 cloud.c:4538|yi_proc() webapi_do_login fail
    12-26 21:22:12.199 dispatch.c:2532|do_mq_process() dispatch got (0x400e)
    12-26 21:22:12.199 dispatch.c:4368|do_mq_process() Process (0x400e) end
    12-26 21:22:15.387 watch_process.c:171|check_watch_info() cloud crashed!
    12-26 21:22:15.428 cloud.c:5399|sys_init() open share mem ok
    12-26 21:22:15.679 cloud.c:5288|yi_sync_time() cmd=/backup/cloudAPI -c 136 -url http://plt-api-de.xiaoyi.com/v2/ipc/sync_time 
    12-26 21:22:15.679 cloud.c:2113|need_update() cmd = /backup/cloudAPI -c 145 -url "https://plt-api-de.xiaoyi.com/vmanager/ipc/firmware/upgrade/silent" -did  -sname RealPJ -version 7.1.00.19A_201910181012 
    12-26 21:22:15.679 cloud.c:2121|need_update() ret = 
    12-26 21:22:15.903 cloud.c:5295|yi_sync_time() {"code":"20000","time":1640553735869}
    12-26 21:22:15.903 cloud.c:520|cloud_set_time() msg snd success
    12-26 21:22:15.904 cloud.c:5307|yi_sync_time() yi_sync_time ok!
    12-26 21:22:15.904 cloud.c:5383|sync_time() sync_time ok!
    12-26 21:22:15.100 dispatch.c:2532|do_mq_process() dispatch got (0x71)
    12-26 21:22:15.100 dispatch.c:2608|do_mq_process() DISPATCH_SET_TIME 1640553735 
    12-26 21:22:15.100 dispatch.c:4368|do_mq_process() Process (0x71) end
    12-26 21:22:15.103 cloud.c:4435|yi_proc() yi_proc ok, update time[119]
    12-26 21:22:15.106 cloud.c:2426|webapi_do_login() now do login 
    12-26 21:22:15.106 cloud.c:2453|webapi_do_login() cmd = /backup/cloudAPI -c 138 -url "https://plt-api-de.xiaoyi.com/v4/ipc/on_line" -key 0Jt0i7MbMMV2M0e -keySec  -uid  -version 7.1.00.19A_201910181012 -ssid "_REDACTED_" -mac 44:EF:BF:_REDACTED_ -ip 192.168.0.150 -signal_quality 88 -packetloss 0 -p2pconnect 0 -p2pconnect_success 0 -apmode false -tfstat 10000 
    12-26 21:22:15.108 dispatch.c:2532|do_mq_process() dispatch got (0x92)
    12-26 21:22:15.109 dispatch.c:3078|do_mq_process() set DISPATCH_SET_PANORAMA_CAPTURE_STATE [0x0]
    12-26 21:22:15.109 dispatch.c:4368|do_mq_process() Process (0x92) end
    12-26 21:22:15.129 cloud.c:2465|webapi_do_login() 
    12-26 21:22:19.796 cloud.c:2121|need_update() ret = 
    12-26 21:22:24.845 cloud.c:2121|need_update() ret = 
    12-26 21:22:29.883 cloud.c:2121|need_update() ret = 
    12-26 21:22:30.164 cloud.c:2465|webapi_do_login() 
    12-26 21:22:34.900 cloud.c:2121|need_update() ret = 
    12-26 21:22:39.193 mp4record.c:938|send_mp4rcd_heartbeat_msg() msg snd success
    12-26 21:22:39.193 dispatch.c:2532|do_mq_process() dispatch got (0xe7)
    12-26 21:22:39.193 dispatch.c:4104|do_mq_process() got rcd heartbeat
    12-26 21:22:39.193 dispatch.c:4368|do_mq_process() Process (0xe7) end
    12-26 21:22:44.300 dispatch.c:2532|do_mq_process() dispatch got (0x400e)
    12-26 21:22:44.300 dispatch.c:4368|do_mq_process() Process (0x400e) end
    12-26 21:22:48.196 cloud.c:2465|webapi_do_login() 
    12-26 21:23:04.197 cloud.c:4538|yi_proc() webapi_do_login fail
    12-26 21:23:14.608 watch_process.c:171|check_watch_info() cloud crashed!
    12-26 21:23:14.625 cloud.c:5399|sys_init() open share mem ok
    12-26 21:23:14.822 cloud.c:5288|yi_sync_time() cmd=/backup/cloudAPI -c 136 -url http://plt-api-de.xiaoyi.com/v2/ipc/sync_time 
    12-26 21:23:14.822 cloud.c:2113|need_update() cmd = /backup/cloudAPI -c 145 -url "https://plt-api-de.xiaoyi.com/vmanager/ipc/firmware/upgrade/silent" -did  -sname RealPJ -version 7.1.00.19A_201910181012 
    12-26 21:23:14.822 cloud.c:2121|need_update() ret = 
    12-26 21:23:14.963 cloud.c:5295|yi_sync_time() {"code":"20000","time":1640553795835}
    12-26 21:23:14.963 cloud.c:520|cloud_set_time() msg snd success
    12-26 21:23:14.963 cloud.c:5307|yi_sync_time() yi_sync_time ok!
    12-26 21:23:14.963 cloud.c:5383|sync_time() sync_time ok!
    12-26 21:23:15.100 dispatch.c:2532|do_mq_process() dispatch got (0x71)
    12-26 21:23:15.100 dispatch.c:2608|do_mq_process() DISPATCH_SET_TIME 1640553795 
    12-26 21:23:15.100 dispatch.c:4368|do_mq_process() Process (0x71) end
    12-26 21:23:15.102 cloud.c:4435|yi_proc() yi_proc ok, update time[20]
    12-26 21:23:15.103 dispatch.c:2532|do_mq_process() dispatch got (0x92)
    12-26 21:23:15.103 dispatch.c:3078|do_mq_process() set DISPATCH_SET_PANORAMA_CAPTURE_STATE [0x0]
    12-26 21:23:15.103 dispatch.c:4368|do_mq_process() Process (0x92) end
    12-26 21:23:15.105 cloud.c:2426|webapi_do_login() now do login 
    12-26 21:23:15.105 cloud.c:2453|webapi_do_login() cmd = /backup/cloudAPI -c 138 -url "https://plt-api-de.xiaoyi.com/v4/ipc/on_line" -key 0Jt0i7MbMMV2M0e -keySec  -uid  -version 7.1.00.19A_201910181012 -ssid "_REDACTED_" -mac 44:EF:BF_REDACTED_ -ip 192.168.0.150 -signal_quality 88 -packetloss 0 -p2pconnect 0 -p2pconnect_success 0 -apmode false -tfstat 10000 
    12-26 21:23:15.152 cloud.c:2465|webapi_do_login() 
    12-26 21:23:16.843 dispatch.c:2532|do_mq_process() dispatch got (0x400e)
    12-26 21:23:16.844 dispatch.c:4368|do_mq_process() Process (0x400e) end
    12-26 21:23:17.154 motion_detect.c:454|modet_process() small action[0/1605] (small:1)!  msarr[24][40]: 94, cnt:2/3, thresh:65, time:1640553797 sec
    12-26 21:23:19.930 cloud.c:2121|need_update() ret = 
    12-26 21:23:20.469 mp4record.c:938|send_mp4rcd_heartbeat_msg() msg snd success
    12-26 21:23:20.471 dispatch.c:2532|do_mq_process() dispatch got (0xe7)
    12-26 21:23:20.471 dispatch.c:4104|do_mq_process() got rcd heartbeat
    12-26 21:23:20.471 dispatch.c:4368|do_mq_process() Process (0xe7) end
    12-26 21:23:24.951 cloud.c:2121|need_update() ret = 
    12-26 21:23:25.183 cloud.c:2465|webapi_do_login() 
    12-26 21:23:25.671 motion_detect.c:418|modet_process() IsMotion(1/1719)(small:3)------ y-x[20][8]: ms-cnt(thresh):131(ave:86)-13/48(65-6), msSta(60-0):56-21-27-42-85-90-248 time:1497(1640553805-671524). . discd:1, nt:0
    12-26 21:23:25.763 motion_detect.c:284|modet_isBiggerMove() Bigger move. old:0, new:28, thresh:20. ms:0-179 oldtick:0 now:1498
    12-26 21:23:25.764 rmm.c:865|motion_proc() ###fmy: got a new motion start pause_motion =0 motion =1 unlock_motion=2098 
    12-26 21:23:25.766 rmm.c:876|motion_proc() send_motion_start_msg. old:28, new:28
    12-26 21:23:25.768 dispatch.c:2532|do_mq_process() dispatch got (0x7c)
    12-26 21:23:25.768 dispatch.c:2687|do_mq_process() g_dispatch_info.mmap_info->motion_type  =0, motion_time =[1640553805]
    12-26 21:23:25.769 dispatch.c:4368|do_mq_process() Process (0x7c) end
    12-26 21:23:25.772 rmm.c:615|send_motion_start_msg() msg snd success
    

    What's most relevant is I was able to run this script to extract the firmware backup AND run RTSPServer without problems.

    Is there anyway to force it (through telnet or by reuploading firmware) back to factory settings so it's possible to pair it with IoT app again?

  • 7.0.00.90A_201904301632 - rtsp not working

    7.0.00.90A_201904301632 - rtsp not working

    Backup file form SD card: https://drive.google.com/file/d/1QMcQgWdoe_tfIsbjtLnOAStnUjc5l3bE/view?usp=sharing

    Camera looks like this: https://za.pinterest.com/pin/598275131735774642/ http://www.goldenvisionchina.com/Yi-IOT/r-198.html

    No model number. Just labelled "Smart Camera".

    Port scan:

    $ nmap 192.168.86.200
    Starting Nmap 7.80 ( https://nmap.org ) at 2021-10-13 17:25 SAST
    Nmap scan report for 192.168.86.200
    Host is up (0.023s latency).
    Not shown: 998 closed ports
    PORT    STATE SERVICE
    23/tcp  open  telnet
    554/tcp open  rtsp
    
    Nmap done: 1 IP address (1 host up) scanned in 0.69 seconds
    

    Telnet with root works:

    $ telnet 192.168.86.200
    Trying 192.168.86.200...
    Connected to 192.168.86.200.
    Escape character is '^]'.
    
    (none) login: root
     _           _         _            
    | |         | |       | |           
    | |     ___ | |__  ___| |_ ___ _ __ 
    | |    / _ \| '_ \/ __| __/ _ \ '__|
    | |___| (_) | |_) \__ \ ||  __/ |   
    |______\___/|_.__/|___/\__\___|_|   
                                        
                                        
    ~ # ps
      PID USER       VSZ STAT COMMAND
        1 root      1428 S    init
        2 root         0 SW   [kthreadd]
        3 root         0 SW   [ksoftirqd/0]
        4 root         0 SW   [kworker/0:0]
        5 root         0 SW<  [kworker/0:0H]
        6 root         0 SW   [kworker/u2:0]
        7 root         0 SW   [rcu_preempt]
        8 root         0 SW   [rcu_bh]
        9 root         0 SW   [rcu_sched]
       10 root         0 SW<  [khelper]
       11 root         0 SW<  [writeback]
       12 root         0 SW<  [bioset]
       13 root         0 SW<  [kblockd]
       14 root         0 SW   [khubd]
       15 root         0 SW   [kworker/0:1]
       16 root         0 SW<  [cfg80211]
       17 root         0 SW   [kswapd0]
       18 root         0 SW   [fsnotify_mark]
       19 root         0 SW<  [crypto]
       28 root         0 DW   [enable_swp_task]
       47 root         0 SW<  [deferwq]
       48 root         0 SW   [kworker/u2:1]
       49 root         0 SW<  [kworker/0:1H]
      302 root         0 SW   [kworker/u2:2]
      307 root         0 SWN  [jffs2_gcd_mtd5]
      383 root         0 SW   [kworker/0:2]
      387 root      1428 S    syslogd
      389 root      1420 S    klogd
      393 root      1428 S    telnetd
      398 root      1428 S    init
      404 root         0 SW   [mmcqd/0]
      447 root         0 SW   [RTW_CMD_THREAD]
      666 root      1292 S    wpa_supplicant -c/tmp/wpa_supplicant.conf -g/tmp/wpa
      692 root      1436 S    {exe} ash /var/tmp/sd/wifi/fork_process.sh
      716 root      1428 S    udhcpc -i wlan0 -b -s /home/app/script/default.scrip
      720 root      2680 S    ./rRTSPServer -d
      730 root      1436 S    -sh
      733 root      1428 R    ps
    ~ # dmesg
    usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    usb 1-1: Product: 802.11n
    usb 1-1: Manufacturer: Realtek
    usb 1-1: SerialNumber: 00e04c000001
    rlx snd internal codec init
    soc-audio soc-audio.0.auto: ASoC: machine RLX_INTERN_CARD should use snd_soc_register_card()
    soc-audio soc-audio.0.auto:  rlx-codec-digital <-> pcm-platform mapping ok
    soc-audio soc-audio.0.auto:  rlx-codec-analog <-> pcm-platform mapping ok
    usbcore: registered new interface driver rtl8188fu
    jffs2: notice: (304) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found.
    >mount_root: switching to overlay
    rtscam:isp resvd mem addr : 0x00520000, size : 0x1900000
    rtscam:rtscam_mem_init v:0xa0520000 p:0x00520000 s:0x00001900
    rtscam:rtscam_lock_init
    rtscam:rtscam_soc_probe
    rtscam:rtscam_hx280_probe
    rtscam:hx280enc:HW at base <0x18060000> with ID <0x48317011>
    rtscam:rtscam_jpgenc_probe
    rtscam:rtscam_osd2_probe
    rtscam:rtstream_init
    mmc0: new ultra high speed SDR50 SDHC card at address aaaa
    mmcblk0: mmc0:aaaa SS08G 7.40 GiB 
     mmcblk0: p1
    FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
    rtscam:begin to load fw from isp.fw
    rtscam:Load firmware size : 131072.
    rtscam:Found ISP 1.011 device
    rtscam:video device <rts3903-isp> registered
    rtscam:rts3903-isp initialized
    rtscam:begin to load fw from isp.fw
    rtscam:Load firmware size : 131072.
    rtscam:begin to load fw from /home/lib/sc1245/isp.fw
    rtscam:Load firmware size : 131072.
    rtscam:Found ISP 1.011 device
    rtscam:video device <rts3903-isp> registered
    rtscam:rts3903-isp initialized
    Started watchdog timer
    Started watchdog timer
    
    [PID_LIST] pid_list_init ok, [ ver=Apr 19 2018, 13:52:44 ] 
    ========== did = A0001000G923S1180711 product id = 2 ===========
    [CPLD_PERIPH] CPLD_PERIPH module inited 
    moto, stepmotor_function_init() 
    successful init
    moto, exchange xy = 0 
    MS_MHal_GPIO_Pad_Oen: setting gpio_direction_output 19
    MS_MHal_GPIO_Pad_Oen: setting gpio_direction_output 17
    MS_MHal_GPIO_Pad_Oen: setting gpio_direction_output 16
    MS_MHal_GPIO_Pad_Oen: setting gpio_direction_output 15
    MS_MHal_GPIO_Pad_Oen: setting gpio_direction_output 11
    MS_MHal_GPIO_Pad_Oen: setting gpio_direction_output 14
    MS_MHal_GPIO_Pad_Oen: setting gpio_direction_output 22
    MS_MHal_GPIO_Pad_Oen: setting gpio_direction_output 18
    hue, cpld_ioctl() cmd(28) invalid !!! 
    n_motor 0
    hue, cpld_ioctl() cmd(10) invalid !!! 
    n_motor 1
    Stopped watchdog timer
    n_motor 0
    n_motor 0
    n_motor 1
    ~ # 
    
    
    ~ # cat /var/log/media.log
    Oct 24 10:24:08 (none) local5.info rtstream[441]: audio resample chn : 100
    Oct 24 10:24:08 (none) local5.info rtstream[441]: audio mixer chn : 101
    Oct 24 10:24:08 (none) local5.info rtstream[441]: rts av run
    Oct 24 10:24:08 (none) local5.info rtstream[441]: audio playback chn : 102
    Oct 24 10:24:08 (none) local5.info rtstream[441]: audio resample chn : 103
    Oct 24 10:24:08 (none) local5.info rtstream[441]: audio capture chn : 104
    Oct 24 10:24:08 (none) local5.info rtstream[441]: audio aec chn : 105
    Oct 24 10:24:08 (none) local5.info rtstream[441]: audio resample chn : 106
    Oct 24 10:24:08 (none) local5.info rtstream[441]: encode chn : 107
    Oct 24 10:24:08 (none) local5.info rtstream[441]: amix check:0,run:0,do run:0,keep active:0,send:0,trig:0,poll:0;4
    Oct 24 10:24:08 (none) local5.info rtstream[441]: aupl check:1,run:1,do run:1,keep active:0,send:0,trig:0,poll:1;4
    Oct 24 10:24:08 (none) local5.info rtstream[441]: arsm check:0,run:0,do run:0,keep active:0,send:0,trig:0,poll:0;5
    Oct 24 10:24:08 (none) local5.info rtstream[441]: aec check:0,run:0,do run:0,keep active:0,send:0,trig:0,poll:0;3
    Oct 24 10:24:08 (none) local5.info rtstream[441]: arsm check:0,run:0,do run:0,keep active:0,send:0,trig:0,poll:0;3
    Oct 24 10:24:08 (none) local5.info rtstream[441]: aenc check:0,run:0,do run:0,keep active:0,send:0,trig:0,poll:0;2
    Oct 24 10:24:09 (none) local5.warn rtstream[441]: <__do_run_task, 654>unit(aec) run spend 108 ms, ret = 0
    Oct 24 10:24:09 (none) local5.warn rtstream[441]: <__do_run_task, 654>unit(aec) run spend 49 ms, ret = 0
    Oct 24 10:24:09 (none) local5.warn rtstream[441]: <__do_run_task, 654>unit(aec) run spend 48 ms, ret = 0
    Oct 24 10:24:09 (none) local5.warn rtstream[441]: <__do_run_task, 654>unit(aec) run spend 50 ms, ret = 0
    Oct 24 10:24:09 (none) local5.warn rtstream[441]: <__do_run_task, 654>unit(arsm) run spend 0 ms, ret = -23
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__do_run_task, 654>unit(aec) run spend 84 ms, ret = 0
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 92ms
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 68ms
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 247ms
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__do_run_task, 654>unit(aec) run spend 352 ms, ret = 0
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 121ms
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 143ms
    Oct 24 10:24:10 (none) local5.info rtstream[441]: arsm check:41,run:31,do run:31,keep active:89,send:30,trig:30,poll:0;1638
    Oct 24 10:24:10 (none) local5.info rtstream[441]: wait amix finish
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 256ms
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 279ms
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 220ms
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 296ms
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__do_run_task, 654>unit(aec) run spend 373 ms, ret = 0
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 336ms
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 265ms
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 341ms
    Oct 24 10:24:10 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 320ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 257ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 281ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 157ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 18446744073709ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 217ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 181ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__do_run_task, 654>unit(aec) run spend 401 ms, ret = 0
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 144ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 134ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 103ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 83ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 90ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 72ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 74ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 77ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 94ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 60ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__do_run_task, 654>unit(aec) run spend 150 ms, ret = 0
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 77ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 69ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 67ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 70ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__recycle_audio_buffer, 60>Audio buffer use 68ms
    Oct 24 10:24:11 (none) local5.warn rtstream[441]: <__do_run_task, 654>unit(aec) run spend 92 ms, ret = 0
    Oct 13 14:39:05 (none) local5.warn rtstream[441]: <__do_run_task, 654>unit(auca) run spend 174 ms, ret = 0
    Oct 13 14:39:05 (none) local5.warn rtstream[441]: <__do_run_task, 654>unit(aec) run spend 62 ms, ret = 0
    Oct 13 14:39:08 (none) local5.info rtstream[441]: arsm check:31,run:31,do run:31,keep active:584,send:30,trig:30,poll:0;8234
    Oct 13 14:39:08 (none) local5.info rtstream[441]: amix check:643,run:533,do run:533,keep active:584,send:59,trig:31,poll:0;8236
    Oct 13 14:39:08 (none) local5.info rtstream[441]: aupl check:62,run:62,do run:62,keep active:584,send:30,trig:30,poll:31;8236
    Oct 13 14:39:08 (none) local5.info rtstream[441]: wait auca finish
    Oct 13 14:39:08 (none) local5.info rtstream[441]: auca check:649,run:261,do run:261,keep active:585,send:0,trig:0,poll:65;8263
    Oct 13 14:39:08 (none) local5.info rtstream[441]: wait aec finish
    Oct 13 14:39:08 (none) local5.info rtstream[441]: aec check:585,run:506,do run:506,keep active:586,send:0,trig:0,poll:0;8268
    Oct 13 14:39:08 (none) local5.info rtstream[441]: arsm check:32,run:32,do run:32,keep active:586,send:30,trig:30,poll:0;8268
    Oct 13 14:39:08 (none) local5.info rtstream[441]: aenc check:584,run:25,do run:20,keep active:586,send:31,trig:25,poll:0;8268
    Oct 13 14:39:08 (none) local5.info rtstream[441]: delete unit : arsm, 0x5cc698
    Oct 13 14:39:08 (none) local5.info rtstream[441]: delete unit : arsm, 0x5ca838
    Oct 13 14:39:08 (none) local5.info rtstream[441]: delete unit : aupl, 0x5cbdf8
    Oct 13 14:39:08 (none) local5.info rtstream[441]: delete unit : amix, 0x5cb618
    Oct 13 14:39:08 (none) local5.info rtstream[441]: delete unit : auca, 0x5ccdf8
    Oct 13 14:39:08 (none) local5.info rtstream[441]: delete unit : aec, 0x5d6998
    Oct 13 14:39:08 (none) local5.info rtstream[441]: delete unit : arsm, 0x5d6f68
    Oct 13 14:39:08 (none) local5.info rtstream[441]: delete unit : aenc, 0x5d7638
    Oct 13 14:39:08 (none) local5.info rtstream[441]: rts av done
    Oct 13 14:39:09 (none) local5.info rtstream[506]: audio resample chn : 100
    Oct 13 14:39:09 (none) local5.info rtstream[506]: audio mixer chn : 101
    Oct 13 14:39:09 (none) local5.info rtstream[506]: rts av run
    Oct 13 14:39:10 (none) local5.info rtstream[506]: audio playback chn : 102
    Oct 13 14:39:10 (none) local5.info rtstream[506]: audio resample chn : 103
    Oct 13 14:39:10 (none) local5.info rtstream[506]: audio capture chn : 104
    Oct 13 14:39:10 (none) local5.info rtstream[506]: audio aec chn : 105
    Oct 13 14:39:10 (none) local5.info rtstream[506]: audio resample chn : 106
    Oct 13 14:39:10 (none) local5.info rtstream[506]: encode chn : 107
    Oct 13 14:39:10 (none) local5.info rtstream[506]: isp chn : 0
    Oct 13 14:39:10 (none) local5.info rtstream[506]: isp check:5,run:0,do run:0,keep active:5,send:0,trig:0,poll:0;127
    Oct 13 14:39:11 (none) local5.warn rtstream[506]: <__recycle_audio_buffer, 60>Audio buffer use 113ms
    Oct 13 14:39:11 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(auca) run spend 116 ms, ret = 0
    Oct 13 14:39:11 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aenc) run spend 261 ms, ret = 0
    Oct 13 14:39:11 (none) local5.warn rtstream[506]: <__recycle_audio_buffer, 60>Audio buffer use 119ms
    Oct 13 14:39:11 (none) local5.info rtstream[506]: delete unit : isp, 0x62d678
    Oct 13 14:39:11 (none) local5.info rtstream[506]: isp chn : 2
    Oct 13 14:39:11 (none) local5.warn rtstream[506]: <__recycle_audio_buffer, 60>Audio buffer use 241ms
    Oct 13 14:39:11 (none) local5.warn rtstream[506]: <__recycle_audio_buffer, 60>Audio buffer use 246ms
    Oct 13 14:39:11 (none) local5.warn rtstream[506]: <__recycle_audio_buffer, 60>Audio buffer use 250ms
    Oct 13 14:39:11 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aec) run spend 524 ms, ret = 0
    Oct 13 14:39:11 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aec) run spend 47 ms, ret = 0
    Oct 13 14:39:11 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aec) run spend 41 ms, ret = 0
    Oct 13 14:39:11 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aenc) run spend 52 ms, ret = 0
    Oct 13 14:39:11 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aec) run spend 54 ms, ret = 0
    Oct 13 14:39:12 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aenc) run spend 41 ms, ret = 0
    Oct 13 14:39:12 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aenc) run spend 40 ms, ret = 0
    Oct 13 14:39:12 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aec) run spend 40 ms, ret = 0
    Oct 13 14:39:13 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aenc) run spend 42 ms, ret = 0
    Oct 13 14:39:13 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aec) run spend 61 ms, ret = 0
    Oct 13 14:39:13 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aec) run spend 45 ms, ret = 0
    Oct 13 14:39:13 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aec) run spend 84 ms, ret = 0
    Oct 13 14:39:13 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aec) run spend 71 ms, ret = 0
    Oct 13 14:39:15 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aec) run spend 50 ms, ret = 0
    Oct 13 14:39:15 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aenc) run spend 55 ms, ret = 0
    Oct 13 14:39:15 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aenc) run spend 48 ms, ret = 0
    Oct 13 14:39:15 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aec) run spend 43 ms, ret = 0
    Oct 13 14:39:15 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aec) run spend 43 ms, ret = 0
    Oct 13 14:39:16 (none) local5.warn rtstream[506]: <__do_run_task, 654>unit(aec) run spend 40 ms, ret = 0
    Oct 13 14:39:17 (none) local5.info rtstream[719]: isp chn : 0
    Oct 13 14:39:17 (none) local5.err rtstream[719]: <start_stream, 226>set isp profile fail, ret = -29
    Oct 13 14:39:17 (none) local5.info rtstream[719]: delete unit : isp, 0x413850
    Oct 13 14:39:17 (none) local5.info rtstream[719]: rts av run
    Oct 13 14:39:17 (none) local5.info rtstream[719]: rts av done
    

    mdev.log

    VLC does not want to play stream:

    $ vlc rtsp://192.168.86.200/ch0_0.h264
    VLC media player 3.0.9.2 Vetinari (revision 3.0.9.2-0-gd4c1aefe4d)
    [0000557eeeec35b0] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
    Created new TCP socket 36 for connection
    [00007f7614001130] live555 demux error: Failed to connect with rtsp://192.168.86.200:554/ch0_0.h264
    [00007f7614004a30] satip stream error: Failed to play RTSP session
    [00007f7614004a30] satip stream error: Failed to teardown RTSP session
    

    ffplay does not want to play stream:

    $ ffplay rtsp://192.168.86.200/ch0_0.h264
    ffplay version 4.2.4-1ubuntu0.1 Copyright (c) 2003-2020 the FFmpeg developers
      built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
      configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
      WARNING: library configuration mismatch
      avcodec     configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared --enable-version3 --disable-doc --disable-programs --enable-libaribb24 --enable-liblensfun --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc
      libavutil      56. 31.100 / 56. 31.100
      libavcodec     58. 54.100 / 58. 54.100
      libavformat    58. 29.100 / 58. 29.100
      libavdevice    58.  8.100 / 58.  8.100
      libavfilter     7. 57.100 /  7. 57.100
      libavresample   4.  0.  0 /  4.  0.  0
      libswscale      5.  5.100 /  5.  5.100
      libswresample   3.  5.100 /  3.  5.100
      libpostproc    55.  5.100 / 55.  5.100
    [rtsp @ 0x7ff8ac000bc0] method DESCRIBE failed: 404 File Not Found, Or In Incorrect Format
    rtsp://192.168.86.200/ch0_0.h264: Server returned 404 Not Found
    

    And also Yi IoT app does not work anymore WhatsApp Image 2021-10-13 at 17 38 45

  • Telnet ok but no rtsp

    Telnet ok but no rtsp

    Hello,

    Thanks for the hack, I had lost hope of his availability :)

    My model is XY-R9520-V3

    I'm able to connect to the camera using telnet

    But when I'm trying to conect to the rstp video stream with VLC : Error messages :

    live555 error: Failed to connect with rtsp://192.168.1.151:554/ch0_0.h264
    main error: connection failed: Connection refused by peer
    satip error: Failed to connect to RTSP server 192.168.1.151:554
    main error: connection failed: Connection refused by peer
    access_realrtsp error: cannot connect to 192.168.1.151:554
    

    any idea ?

    Regards

  • Help for Tuya Camera

    Help for Tuya Camera

    Hi! I've a Tuya Camera(mode:SC-WA002) .The soc is RTS3903N.I try to extract the V3 files to the root of a MicroSD,but not works and it seems boot from the flash(Not found the ttl port so I guess).I dump the flash by spiflash debuger. A lot of Thanks! REMOVED

    0 1 2 3 4 6 Soc:RTS3903N Flash:cFeon QH128A-104HIP Wifi:RTL8188

  • Firmware and success report for Goowls Outdoor Dome camera

    Firmware and success report for Goowls Outdoor Dome camera

    firmware is as backed up with only change being an in place binary edit of wifi SSID and key to equal length strings.

    ssid: WIFISSIDABCDE key: AABBCCDDEEFFGG

    https://drive.google.com/file/d/1VcaTG3aUzQCIeBgyfahWlx3CzM-N2yG8/view?usp=sharing

    This is firmware 7.1.00.19A_201910181012

    Couldn't find listing on amazon any more, but an equivalent link for picture: https://www.ebay.com/itm/333980231353

  • Goowls 1080P IP Camera supported!

    Goowls 1080P IP Camera supported!

    Just pointing out that this camera https://www.newegg.com/p/2P0-02K4-00008 has exactly the same firmware as the Cacagoo XY-R9420-X2 (7.1.00.25A_202002271051) and thus the archive works out of the box. Firmware backup is here: https://imil.net/stuff/goowls_dump.tgz

  • Yi IoT Camera - XY-R9520-V3 not running config.sh

    Yi IoT Camera - XY-R9520-V3 not running config.sh

    I own the device XY-R9520-V3 with firmware 7.1.00.19A_201910181012 The camera is currently unpaired and SD card is formatted properly.

    # mkfs.vfat -F 32 /dev/sdb1

    But /wifi/config.sh is not executed. Any suggestions are welcome.

  • V03: Live picture via rtps to my Lilliput-001 go, comma is working :)

    V03: Live picture via rtps to my Lilliput-001 go, comma is working :)

    Hello cjj25,

    many thanks, it works. Great.

    I have access via rtsp and an app on my Android on the live picture. Camera looks similar to Dome 1080P

    Lilliput-001 go, comma (bought in China via gear....) Firmware: 7.0.00.73A_201812031453

    1. Do you think that "Control PTZ (pan/tilt)" will be available ? Does an schedule exist ?

    2. Does this hack blocks home calls to china ?

    Many thanks, Patrick

  • XY-R9820-F4 Support

    XY-R9820-F4 Support

    I've tried V2 and V3 releases on my XY-R9820-F4 camera. Both give me Telnet and seem to launch the RTSP server (see it running via top ) but there's no stream. Port 554 is open

    Original firmware was 7.1.00.17A_201909271014

    Board states MVT9632-SC2230.V1.0-20190215 Images attached

    Any ideas? cam1 cam2

  • RTSP does not work (YI IoT Outdoor)

    RTSP does not work (YI IoT Outdoor)

    I tried your instructions on an YI IoT Outdoor camera but the RTSP does not seem to work. Access via telnet is possible.

    VLC says: VLC is unable to open the MRL 'rtsp://192.168.178.42/ch-1_0.h264'.

    This is what the log.txt says (I just removed my wifi passcode):

    10-24 10:24:07.949 dispatch.c:4480|main() sysversion:7.1.00.19A_201910181012 10-24 10:24:08.216 dispatch.c:727|get_productinfo() 10-24 10:24:08.216 dispatch.c:731|get_productinfo() product info partition exist! 10-24 10:24:08.216 dispatch.c:735|get_productinfo() product info partition is not empty, read it! 10-24 10:24:08.216 dispatch.c:787|get_productinfo() hardware version is not empty, read it! 10-24 10:24:08.216 dispatch.c:789|get_productinfo() ptz_en[2] ptz_dir hor[1] ver[1] cds[3] mirror[1] resolution[1] def_x[00] def_y[0] isp[0] 10-24 10:24:08.217 cloud.c:5399|sys_init() open share mem ok 10-24 10:24:08.555 dispatch.c:1209|get_config() got sn(TeMQbVPzeQ1KBQZs6x2ZkAvoxgceDPrX) 10-24 10:24:08.555 dispatch.c:1210|get_config() got pwd() 10-24 10:24:08.555 dispatch.c:1211|get_config() got ssid() 10-24 10:24:08.555 dispatch.c:1212|get_config() got tnp_init_string(MMFBJPLJICFGKJHFOJFFPMELHPCFFAGCHEEJKPIDINBKDABIPMIIAONIPBCLBBKNPLKPDKPENIDOAJCP) 10-24 10:24:08.555 dispatch.c:4574|main() hw_type(2) 10-24 10:24:08.666 p2p_tnp.c:6741|main() fshare_open ok 10-24 10:24:09.060 p2p_tnp.c:2055|p2p_set_tnp_init_status() p2p_set_tnp_init_status 1 send_msg ok! 10-24 10:24:09.061 dispatch.c:501|choose_server() in choose_server, region_id = 1, api_server = https://plt-api.xiaoyi.com, sname = RealPJ, dlproto = micn 10-24 10:24:09.061 dispatch.c:501|choose_server() in choose_server, region_id = 17, api_server = https://plt-api-us.xiaoyi.com, sname = RealPJ, dlproto = mius 10-24 10:24:09.061 dispatch.c:4731|main() init ok, cost time(972 ms) 10-24 10:24:09.061 mp4record.c:1293|main() recordevent_init finish 10-24 10:24:09.247 dispatch.c:2532|do_mq_process() dispatch got (0x7f) 10-24 10:24:09.247 dispatch.c:4368|do_mq_process() Process (0x7f) end 10-24 10:24:09.566 watch_process.c:116|get_watch_info() check_interval=10 10-24 10:24:09.758 watch_process.c:134|get_watch_info() process=dispatch;cmd=cd /home/app;./dispatch &; 10-24 10:24:09.758 watch_process.c:134|get_watch_info() process=cloud;cmd=cd /home/app;./cloud &; 10-24 10:24:09.758 watch_process.c:134|get_watch_info() process=rmm;cmd=reboot; 10-24 10:24:09.758 watch_process.c:134|get_watch_info() process=p2p_tnp;cmd=cd /home/app;./p2p_tnp &; 10-24 10:24:09.758 watch_process.c:134|get_watch_info() process=mp4record;cmd=cd /home/app;./mp4record &; 10-24 10:24:09.758 watch_process.c:134|get_watch_info() process=arp_test;cmd=cd /home/app;./arp_test &; 10-24 10:24:09.758 watch_process.c:134|get_watch_info() process=oss;cmd=cd /home/app;./oss &; 10-15 12:23:14.100 dispatch.c:2316|p_worker() DISPATCH_SET_DEFAULT_TIME 1602764594 10-15 12:23:14.163 dispatch.c:1718|do_monitor_wifi() wifi disconnected, now reconnect wifi 10-15 12:23:14.163 dispatch.c:1630|reset_wifi_module() now reset wifi module 10-15 12:23:14.212 mp4record.c:1304|main() init_finish(1), start_with_reset(0) 10-15 12:23:14.212 mp4record.c:1306|main() mp4 mode start init_finish 10-15 12:23:14.225 mp4record.c:1312|main() fshare_open ok 10-15 12:23:21.405 rmm.c:1401|msg_proc() pid[852] 10-15 12:23:22.483 dispatch.c:1730|do_monitor_wifi() wpa connected , now dhcp 10-24 10:24:08.082 dispatch.c:4480|main() sysversion:7.1.00.19A_201910181012 10-24 10:24:08.362 dispatch.c:727|get_productinfo() 10-24 10:24:08.363 dispatch.c:731|get_productinfo() product info partition exist! 10-24 10:24:08.363 dispatch.c:735|get_productinfo() product info partition is not empty, read it! 10-24 10:24:08.363 dispatch.c:787|get_productinfo() hardware version is not empty, read it! 10-24 10:24:08.363 dispatch.c:789|get_productinfo() ptz_en[2] ptz_dir hor[1] ver[1] cds[3] mirror[1] resolution[1] def_x[00] def_y[0] isp[0] 10-24 10:24:08.363 dispatch.c:1209|get_config() got sn(TeMQbVPzeQ1KBQZs6x2ZkAvoxgceDPrX) 10-24 10:24:08.363 dispatch.c:1210|get_config() got pwd() 10-24 10:24:08.363 dispatch.c:1211|get_config() got ssid() 10-24 10:24:08.363 dispatch.c:1212|get_config() got tnp_init_string(MMFBJPLJICFGKJHFOJFFPMELHPCFFAGCHEEJKPIDINBKDABIPMIIAONIPBCLBBKNPLKPDKPENIDOAJCP) 10-24 10:24:08.363 cloud.c:5399|sys_init() open share mem ok 10-24 10:24:08.584 dispatch.c:4574|main() hw_type(2) 10-24 10:24:08.584 p2p_tnp.c:6741|main() fshare_open ok 10-24 10:24:08.779 p2p_tnp.c:2055|p2p_set_tnp_init_status() p2p_set_tnp_init_status 1 send_msg ok! 10-24 10:24:08.969 dispatch.c:501|choose_server() in choose_server, region_id = 1, api_server = https://plt-api.xiaoyi.com, sname = RealPJ, dlproto = micn 10-24 10:24:08.969 dispatch.c:501|choose_server() in choose_server, region_id = 17, api_server = https://plt-api-us.xiaoyi.com, sname = RealPJ, dlproto = mius 10-24 10:24:08.970 dispatch.c:4731|main() init ok, cost time(887 ms) 10-24 10:24:09.015 mp4record.c:1293|main() recordevent_init finish 10-24 10:24:09.311 dispatch.c:2532|do_mq_process() dispatch got (0x7f) 10-24 10:24:09.312 dispatch.c:4368|do_mq_process() Process (0x7f) end 10-24 10:24:09.421 watch_process.c:116|get_watch_info() check_interval=10 10-24 10:24:09.607 watch_process.c:134|get_watch_info() process=dispatch;cmd=cd /home/app;./dispatch &; 10-24 10:24:09.607 watch_process.c:134|get_watch_info() process=cloud;cmd=cd /home/app;./cloud &; 10-24 10:24:09.608 watch_process.c:134|get_watch_info() process=rmm;cmd=reboot; 10-24 10:24:09.608 watch_process.c:134|get_watch_info() process=p2p_tnp;cmd=cd /home/app;./p2p_tnp &; 10-24 10:24:09.608 watch_process.c:134|get_watch_info() process=mp4record;cmd=cd /home/app;./mp4record &; 10-24 10:24:09.608 watch_process.c:134|get_watch_info() process=arp_test;cmd=cd /home/app;./arp_test &; 10-24 10:24:09.608 watch_process.c:134|get_watch_info() process=oss;cmd=cd /home/app;./oss &; 10-15 12:23:14.100 dispatch.c:2316|p_worker() DISPATCH_SET_DEFAULT_TIME 1602764594 10-15 12:23:14.116 mp4record.c:1304|main() init_finish(1), start_with_reset(0) 10-15 12:23:14.116 mp4record.c:1306|main() mp4 mode start init_finish 10-15 12:23:14.117 mp4record.c:1312|main() fshare_open ok 10-15 12:23:14.165 dispatch.c:1718|do_monitor_wifi() wifi disconnected, now reconnect wifi 10-15 12:23:14.165 dispatch.c:1630|reset_wifi_module() now reset wifi module 10-15 12:23:21.006 rmm.c:1401|msg_proc() pid[834] 10-15 12:23:23.540 watch_process.c:171|check_watch_info() cloud crashed! 10-15 12:23:23.540 watch_process.c:171|check_watch_info() p2p_tnp crashed! 10-15 12:23:23.540 watch_process.c:171|check_watch_info() arp_test crashed! 10-15 12:23:24.545 dispatch.c:1730|do_monitor_wifi() wpa connected , now dhcp

  • Works with Apeman IH74

    Works with Apeman IH74

    I can confirm that this works with the Apeman IH74 (which I believe is also sold as Voger VP230 and possibly others). image

    Firmware: 7.1.00.19A_201910181012

    The only issue I encountered was that the RTSP stream by default was flipped upside down. But that was easily fixed by setting RTS_VIDEO_CTRL_ID_FLIP accordingly:

    diff --git a/build/src/stream.c b/build/src/stream.c
    index 3991826..1375e2c 100644
    --- a/build/src/stream.c
    +++ b/build/src/stream.c
    @@ -249,6 +249,7 @@ int start_stream() {
         rts_av_enable_chn(h264);
         manage_modes(RTS_VIDEO_CTRL_ID_NOISE_REDUCTION, 100);
         manage_modes(RTS_VIDEO_CTRL_ID_LDC, 1);
    +    manage_modes(RTS_VIDEO_CTRL_ID_FLIP, 1);
     //    manage_modes(RTS_VIDEO_CTRL_ID_FOCUS, 100);
         manage_modes(RTS_VIDEO_CTRL_ID_DETAIL_ENHANCEMENT, 100);
         manage_modes(RTS_VIDEO_CTRL_ID_3DNR, -1);
    
  • Firmware rtsp3903n+45 camera from NL

    Firmware rtsp3903n+45 camera from NL

    I found you got a similar board as I (https://user-images.githubusercontent.com/31572463/136786404-db857b44-ab6a-4585-aebe-1f5aa3b5d77f.jpg) could you please let me know which pins you used for uart? I'd gladly share the firmware, if it will be possible to access uart. IMG_20221025_172613

  • feat: make /etc writable in order to set a root password... and more

    feat: make /etc writable in order to set a root password... and more

    In the camera, /etc is read only and telnet access leaves the root user passwordless, which is a massive security risk. This patch uses the mount --bind capability available in busybox in order to overlay a /etc directory from the sdcard to the root filesystem.

Hack to allow live streaming from wyze cameras to vlc or mpv on your desktop.
Hack to allow live streaming from wyze cameras to vlc or mpv on your desktop.

Wyze Cam Live Streaming This is a hack to allow live streaming from a wyze cam on your local network. Installation - New! The simplest fix for wyze ev

Oct 25, 2022
ScanNet is an RGB-D video dataset containing 2.5 million views in more than 1500 scans, annotated with 3D camera poses, surface reconstructions, and instance-level semantic segmentations.

ScanNet is an RGB-D video dataset containing 2.5 million views in more than 1500 scans, annotated with 3D camera poses, surface reconstructions, and instance-level semantic segmentations.

Nov 26, 2022
Sentry-Picam is a simple wildlife / security camera solution for the Raspberry Pi Zero W, providing 1080p/30fps motion activated H.264 video capture.
Sentry-Picam is a simple wildlife / security camera solution for the Raspberry Pi Zero W, providing 1080p/30fps motion activated H.264 video capture.

Sentry-Picam is a simple wildlife / security camera solution for the Raspberry Pi Zero W, providing 1080p/30fps motion activated H.264 video capture.

Oct 9, 2022
Jellyfin Desktop Client based on Plex Media Player
Jellyfin Desktop Client based on Plex Media Player

Desktop client using jellyfin-web with embedded MPV player. Supports Windows, Mac OS, and Linux. Media plays within the same window using the jellyfin-web interface unlike Jellyfin Desktop. Supports audio passthrough. Based on Plex Media Player.

Nov 30, 2022
Video stabilization is a software-based approach in real-time to eliminating environmental effects (wind, heavy vehicle etc.) and enhance the visual performance that degrade video streaming quality.
Video stabilization is a software-based approach in real-time to eliminating environmental effects (wind, heavy vehicle etc.) and enhance the visual performance that degrade video streaming quality.

Video Stabilization Contents General Info Installation To Do General Info Video stabilization is a software-based approach in real-time to eliminating

Nov 23, 2022
simple mp4 player based on rockchip rv1109 platform

mp4player RV1109平台上实现一个简单的 mp4 播放器,主要是本人使用的开发板QT无法播放mp4,应该是没有编译qst所致,因而想利用rockchip平台自有的 功能实现一个简单的播放器。 base目录包含一些基础框架实现,包含信号,线程,时间等,线程和消息泵的实现非常非常简单,因而不

Jul 17, 2022
theora-player is an embeddable theora video player C++ library based on the libtheora sample. It has no audio support at this moment.

theora-player Description theora-player is an embeddable theora video player C++ library based on the libtheora sample. It has no audio support at thi

Jun 18, 2022
Implement a universal video player based on FFmpeg

qiaopcmusic 实现一个万能视频播放器 添加依赖方式: To get a Git project into your build: Step 1. Add the JitPack repository to your build file Add it in your root build.

Oct 15, 2021
media server based on c++11, support webrtc/rtmp/httpflv/websocket flv

cpp_media_server A media server is writen by C++11, and the network io is writen by Boost.Asio. It support rtmp/httpflv/websocket(flv)/webrtc. preinst

Jun 30, 2022
PowerVS is a standalone broadcast video server based on ffmpeg
PowerVS is a standalone broadcast video server based on ffmpeg

PowerVS PowerVS is a standalone broadcast video server based on ffmpeg ?? Table of Contents About Getting Started Running the tests Usage Development

Mar 17, 2022
Free plugin-based video converter
Free plugin-based video converter

SEZE II Смотреть на русском SEZE is a plugin-based video converter for Windows/Linux. You can write your video filter in C++ (see section "How to make

Nov 21, 2022
Based on @saki4510t uvccamera

this project is base on @saki([email protected])'s UVCCamera project https://github.com/saki4510t/UVCCamera with the following changes: Delete so

Apr 26, 2022
Console based Streaming Music Player [W.I.P]

?? quanta It's a command line music player that can streams same music to multiple devices, hence creating a surround sound system. Or just use it as

Jan 27, 2022
Motion Cam is a camera application for Android that replaces the entire camera pipeline.
Motion Cam is a camera application for Android that replaces the entire camera pipeline.

About Motion Cam is a camera application for Android that replaces the entire camera pipeline. It consumes RAW images and uses computational photograp

Oct 11, 2022
This Project Implement an interactive camera for 3D model using Quaternion. It have some advantages over eulerian camera like no gimbal lock and faster to compute.
This Project Implement an interactive camera for 3D model using Quaternion. It have some advantages over eulerian camera like no gimbal lock and faster to compute.

Quaternion-Camera This Project Implement an interactive camera for 3D model using Quaternion. It have some advantages over eulerian camera like no gim

Nov 10, 2022
3D-Lidar Camera Calibration using planar Point to to camera Plane Constraint
3D-Lidar Camera Calibration using planar Point to to camera Plane Constraint

3D-Lidar Camera Calibration using planar Point to to camera Plane Constraint

Nov 11, 2022
Even newer Custom Firmware for Xiaomi Cameras based on Hi3518ev200 Chipset. It includes free RTSP, ONVIF and other improvements based on the work by roleoroleo
Even newer Custom Firmware for Xiaomi Cameras based on Hi3518ev200 Chipset. It includes free RTSP, ONVIF and other improvements based on the work by roleoroleo

Why this Yi-Hack-V5 firmware? The answer is simple: missing updates, RTSP and not based on the latest stock firmware (which features improvements and

Dec 2, 2022
Alternative firmware for IP cameras based on the HiSilicon (and other) SoC's
Alternative firmware for IP cameras based on the HiSilicon (and other) SoC's

OpenIPC v2.1 (experimental, buildroot based..) Alternative firmware for IP cameras based on the HiSilicon (and other) SoC's More information about the

Nov 27, 2022
This repo contains source code of our paper presented in IROS2021 "Single-Shot is Enough: Panoramic Infrastructure Based Calibration of Multiple Cameras and 3D LiDARs"
This repo contains source code of our paper presented in IROS2021

Single-Shot is Enough: Panoramic Infrastructure Based Calibration of Multiple Cameras and 3D LiDARs Updates [2021/09/01] first commit, source code of

Nov 25, 2022
image_projection is a ROS package to create various projections from multiple calibrated cameras.
image_projection is a ROS package to create various projections from multiple calibrated cameras.

image_projection Overview image_projection is a ROS package to create various projections from multiple calibrated cameras. Use cases involve: Rectify

Nov 13, 2022