logo elektroda
logo elektroda
X
logo elektroda

How to access cheap 1$ A9 camera video stream from LAN page (NodeJS)?

p.kaczmarek2 7770 10

TL;DR

  • A NodeJS cam-reverse setup accesses video and audio streams from cheap Chinese X5/A9 cameras using the iLnk/iLnkP2P/PPPP protocol.
  • It runs cam-reverse as an HTTP server, with a config.yml that sets the local adapter IP and discovery_ips for network-interface and VLAN discovery.
  • The demonstration uses a camera bought for as low as $1 and tested on an XF16 chip model powered over USB.
  • The stream was detected successfully in AP mode and after Wi‑Fi pairing, but multiple-camera support, Home Assistant integration, and XF16 heating remain unresolved.
Generated by the language model.
ADVERTISEMENT
📢 Listen (AI):
  • A small, round WiFi camera held between fingers, with icons showing HD, wide lens, and multi-platform viewing features.
    Here's a step by step guide for accessing video and audio stream data of cheap Chinese X5/A9/etc cameras using the iLnk/iLnkP2P/PPPP protocol. Those cameras can be bought for as low as 1$ and are sometimes battery powered, but they still come in various models.
    This demonstration will use a cam-reverse project by David Ventura, which is written in NodeJS. Here's the repository with full readme:
    https://github.com/DavidVentura/cam-reverse

    First, you need a camera. I bought one here:
    Miniature wireless spy camera with a display showing its use in a living room.
    The box arrived slightly dent, but camera is still in one piece:
    Back side of A9 Mini IP camera packaging with barcode and product information. A box of A9 model HD IP camera with a camera illustration and function icons. Mini Wi-Fi camera set with accessories: USB cable, mounting bracket, Chinese manual, and box.
    By the way, my camera is using XF16 chip, you can see details here: https://www.elektroda.com/rtvforum/topic4074636.html
    Still, we don't need to open the case now. Just power it via USB.
    Then, you need to run cam-reverse with NodeJS. You can build it from source, but I'd recommend to get precompiled CJS file:
    A section of a webpage showing downloadable assets, with the bin.cjs file highlighted.
    Of course, also install NodeJS if you don't have it yet.
    The default command to run the server is very simple:
    
    node dist/bin.cjs http_server
    

    However, this will NOT work in many cases. This is because you may have multiple network interfaces (like VMware adapters), and they will not be checked unless specified. That's why I recommend creating config.yml:
    
    http_server:
      port: 5000
    
    logging:
      level: debug
      use_color: true
    
    
    # If you are crossing broadcast domains (VLANs) then
    # you need to specify all IPs as unicast targets
    discovery_ips:
      - 192.168.238.1
    
    

    Enter your network adapter IP that is in the same network as camera.
    For the start, we will just put camera in AP mode and connect to its WiFi:
    Wi-Fi network window showing no Internet connection and network name BATA825001CKETR.
    Run the app with config specified:
    
    node bin.cjs http_server --config_file <your_config.yml>
    

    This should detect the cam:
    HTTP server and IP camera connection logs displayed in a Windows console.
    Now you can access the stream:
    Close-up of a QR code on a white label with a partially visible border.
    A blurry photo of a manual page with visible English text and an unclear image of an electronic device.

    Excerpt from a user manual showing Wi-Fi connection instructions in English.
    Label reading “DC FAN MOTOR” and “CR Electronics” on a white background.
    You can also pair camera with your WiFi:
    
    node dist/bin.cjs pair --ssid <SSID> --password <PASSWORD>
    

    This way you should be able to have multiple cameras in NodeJS page, but I haven't tested that yet.

    I've did some initial tests with this project, and it seems to work, however XF16 chip gets warm and I'm not yet sure how to connect it to Home Assistant. I will try to investigate it futher and provide more information in another topic. Let me know if you have any A9 cameras, did you try to access the video stream? Is your camera also getting warm? Stay tuned!

    Cool? Ranking DIY
    Helpful post? Buy me a coffee.
    About Author
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    p.kaczmarek2 wrote 14408 posts with rating 12345, helped 650 times. Been with us since 2014 year.
  • ADVERTISEMENT
  • #2 21522742
    ferbulous
    Level 18  
    Posts: 419
    Help: 8
    Rate: 56
    Hi, what’s the resolution on these cameras?
    As for the battery powered ones, can you still get the live feed or does it only send images/video when motion is triggered?
    Also, how do you export the stream? Is it via onvif or rtsp
  • #3 21522799
    gulson
    System Administrator
    Posts: 29234
    Help: 148
    Rate: 5984
    Interesting. I have such a camcorder, but had to use the Chinese cloud. I didn't know it was possible to capture the video stream. Thanks.
  • ADVERTISEMENT
  • #4 21522825
    eDZio
    Level 16  
    Posts: 228
    Help: 6
    Rate: 30
    After applying this, the camera does not need to have an internet connection?
  • #5 21523556
    operator5wp
    Level 16  
    Posts: 340
    Help: 1
    Rate: 133
    I have such a camcorder A9 and I have such a strange issue , when the camcorder is powered from usb the recorded image is good when recording is from the battery itself the video contains some transitions and stripes as if part of the image was in a different place, even with another battery it is the same. What could it be?
  • #6 21523575
    gulson
    System Administrator
    Posts: 29234
    Help: 148
    Rate: 5984
    I had this when I plugged in the battery power - UPS under USB as a powerbank, as if something was introducing interference.
    It gets excited very easily. Possibly an inverter of some kind.

    Exactly, does the camera need to have external internet access after the change?
  • #7 21523729
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14408
    Help: 650
    Rate: 12345
    Of course, these solutions do not require a connection to the cloud, as can be seen from the example with the camera in AP mode - after all, it does not have access to the internet then. The application from the manufacturer works in an analogous way. There, too, there is no need to log in, just connect to the webcam's AP and then you can view the image.

    According to information from Github, this webcam connects, among others, to the following servers:
    
    139.155.68.77 - Shenzhen Tencent Computer Systems Company Limited 
    119.45.114.92 - Shenzhen Tencent Computer Systems Company Limited
    162.62.63.154 - Tencent Building, Kejizhongyi Avenue
    3.132.215.40 - ec2-3-132-215-40.us-east-2.compute.amazonaws.com
    
    .
    but these addresses (and all other output packets) can be blocked on the router, this will not affect the local video stream. Additionally, this may change in future copies.

    And if that's still not enough - I managed to upload my own firmware to this camcorder today, but for now I've only got the basics up and running, WiFi, flash, no video support yet:
    Web interface of OpenXR872 firmware with configuration, restart, web application launch, and about buttons, plus device status info. .
    I also added the possibility to compile firmware for it online, here: https://github.com/openshwprojects/OpenBK7231T_App/pull/1609
    Thus, the XR872 platform joined the other platforms supported by my project , namely BK7231T, BK7231N, BK7238, XR809, BL602, W800, W600, LN882H, BK7231M, TR6260, RTL87X0C, RTL8710A, RTL8710B, RTL8720D, ECR6600, ESP32, ESP32 S2, ESP32 S3, ESP32 C2, ESP32 C3, ESP32 C6, Windows (simulator).
    Details coming soon, but I'll already hint that this camcorder has.... derived RX/TX on D+ and D- from the USB port. A bit unnecessarily I soldered out its flash bone earlier.

    Programmer connected to a Wi-Fi camera PCB using a test clip and wires, placed on a wooden table. Close-up of a webcam's PCB with visible electronic components and a soldering clamp. CH341A programmer with SOP16 adapter and capacitors on a wooden surface. Close-up of a USB programmer with a DIP8 adapter and flash memory chip, placed on a wooden surface. Close-up of an electronic setup with a USB port and connected wires with goldpin connectors. .

    Added after 11 [hours] 31 [minutes]: .

    I also tried changing the Flash bone from 1MB to 2MB, the flash is read correctly, worse is that the bootloader (from ROM) doesn't want an image other than the 880K size:
    
    [img E] image_get_raw_cfg():774, fdcm read failed
    use default flash chip mJedec 0x0
    [FD I]: mode: 0x4, freq: 96000000Hz, drv: 0
    [img E] image_init():157, the image max size is invalid
    [fwk ERR] no xip section
    
    .
    Details: https://www.elektroda.com/rtvforum/topic4074636-30.html#21523067
    Helpful post? Buy me a coffee.
  • ADVERTISEMENT
  • #8 21763419
    simw
    Level 27  
    Posts: 754
    Help: 94
    Rate: 286
    p.kaczmarek2 wrote:
    Then run the cam-reverse using NodeJS. You can build it from source, but I recommend downloading the pre-compiled CJS file

    What does this mean? Somehow, as simple as "cow on a ditch" :)
  • ADVERTISEMENT
  • #9 21763506
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14408
    Help: 650
    Rate: 12345
    Which stage exactly are you asking about? About compiling from 0, or about running the finished CJS? Running the finished one is better.
    p.kaczmarek2 wrote:
    You can build it from source, but I recommend downloading the pre-compiled CJS file:
    A section of a webpage showing downloadable assets, with the bin.cjs file highlighted. .
    Of course, also install NodeJS if you don't already have it.
    The default command to start the server is very simple:
    
    node dist/bin.cjs http_server
    

    You simply download the finished CJS from GitHub and then make sure you have NodeJS installed. If not, you need to install it. You need to have the node command running in the cmd. You then use this to run the downloaded CJS file. If the console doesn't see this command, then make sure that the path to NodeJS is added to path.
    Helpful post? Buy me a coffee.
  • #10 21763510
    simw
    Level 27  
    Posts: 754
    Help: 94
    Rate: 286
    p.kaczmarek2 wrote:
    Which stage exactly are you asking about

    About each, I think :)
    In what "environment" does it run? In linux?
    What is "node js". The Github link you provided, but that "screen" of bin.cjs was a mystery I've already solved https://github.com/DavidVentura/cam-reverse/releases/
    Generally writing, I don't have much to do with it, the only thing I understood in the first phase was that you have to have a camera. I have such a camera, while the way it works itself is unknown to me.
  • #11 21800147
    GAAD
    Level 17  
    Posts: 289
    Help: 3
    Rate: 19
    I'm trying it too - I have a version of it:

    Camera PCB module labeled HQT6 V3 with lens and connectors visible IP camera PCB board marked HQT6 v3.1 with microSD slot and micro USB port
    and a second one with newer software but with the same hardware.

    My camcorder is in AP mode - I switch on appears network: DGON-HCAM..... with which I can connect.
    The camcorder gives IP: 192.168.1.100 itself has the address 192.168.1.1
    I am connected to it I start node.js:

    
    **** node dist/bin.cjs http_server --config_file dist/config.yml
    2026-01-05T23:10:08.089Z [info] Starting HTTP server on port 5000
    2026-01-05T23:10:08.124Z [info] Searching for devices on 192.168.1.1
    


    relatively without config:
    
    node dist/bin.cjs http_server
    2026-01-05T23:47:34.467Z [info] Starting HTTP server on port 5000
    2026-01-05T23:47:34.503Z [info] Searching for devices on 192.168.1.255
    


    and unfortunately nothing happens.
    i tried pairing with my WiFi with the command:
    node dist/bin.cjs pair --ssid <SSID> --password <PASSWORD>
    and also zero effect.

    Maybe a different port is necessary?
    The TXW817 heats up a lot but is "touchable" i.e. about 60-70 degrees.
📢 Listen (AI):

Topic summary

✨ The discussion focuses on accessing video and audio streams from inexpensive Chinese cameras such as the X5 and A9 models using the iLnk/iLnkP2P/PPPP protocols. These cameras, sometimes battery powered and based on chips like the XF16, can be interfaced locally without requiring internet connectivity by utilizing projects like David Ventura's NodeJS cam-reverse repository. The cameras support local streaming via their own access point (AP) mode, bypassing cloud services. Users inquire about resolution, live feed availability on battery power, and streaming protocols (ONVIF, RTSP). Issues with video quality when powered by battery versus USB are noted, possibly due to power interference. Blocking outbound connections to Tencent servers on the router does not affect local streaming. Firmware modification is also mentioned as a possibility for advanced customization.
Generated by the language model.

FAQ

TL;DR: For users who want cheap $1 A9/X5 cameras on a LAN page, the fastest path is to run cam-reverse in NodeJS and set the correct adapter IP; as the author notes, "these solutions do not require a connection to the cloud." The demo used an HTTP server on port 5000 and worked directly in AP mode without internet. [#21523729]

Why it matters: This lets you view ultra-cheap A9/X5 camera video locally, avoid vendor cloud dependence, and debug common discovery failures faster.

Option Network path Internet required Key setup detail
Camera AP mode PC connects to camera Wi‑Fi No Camera can be viewed locally after joining its AP
Home Wi‑Fi pairing Camera joins your router Wi‑Fi No for local stream Pair with pair --ssid <SSID> --password <PASSWORD>
USB power Local viewing/recording No Reported as stable image
Battery power Local viewing/recording No One user reported stripes and shifted image sections

Key insight: Most failures came from network discovery, not from the video protocol itself. If cam-reverse scans the wrong interface or broadcast domain, the camera stays invisible even when it is powered and reachable.

Quick Facts

  • The demonstrated http_server setup used port 5000, and the sample config.yml set logging.level: debug for easier discovery troubleshooting. [#21522687]
  • One working example used discovery_ips: 192.168.238.1; another AP-mode case used camera IP 192.168.1.1 and client IP 192.168.1.100. [#21800147]
  • The author reported cloud endpoints including 139.155.68.77, 119.45.114.92, 162.62.63.154, and 3.132.215.40, and said blocking outbound packets did not break the local stream. [#21523729]
  • Thermal reports were high but still touchable: one TXW817-based unit was estimated at about 60–70°C, while an XF16-based unit also became noticeably warm during tests. [#21800147]

How do I access the video stream from a cheap A9/X5 camera on my LAN using the NodeJS cam-reverse project?

Run cam-reverse in NodeJS, connect your PC to the camera network, and start the HTTP server. 1. Power the camera by USB. 2. Connect to the camera AP first, or place both devices on the same Wi‑Fi. 3. Run node dist/bin.cjs http_server or add a config file and open the stream page on port 5000. The thread shows this working with an A9/X5-class camera and a browser-accessible local page. [#21522687]

What is the iLnk/iLnkP2P/PPPP protocol used by A9 cameras, and how does it help with local streaming?

"iLnk/iLnkP2P/PPPP" is a camera transport protocol family that carries video and audio between the cheap A9/X5 device and viewing software, using vendor-specific discovery rather than ONVIF. In this thread, that protocol let cam-reverse detect the camera on the LAN and expose its stream locally, even when the camera was only in AP mode and had no internet access. [#21522687]

Why does cam-reverse fail to detect my A9 camera when I run node dist/bin.cjs http_server, and how do I set discovery_ips correctly?

cam-reverse usually misses the camera because it scans the wrong network interface. If your PC has VMware, VLAN, or extra adapters, set discovery_ips to the IP of the adapter on the same subnet as the camera, such as 192.168.238.1. The author states the default command often fails for this reason, even though the HTTP server itself starts correctly on port 5000. [#21522687]

How should I create the config.yml file for cam-reverse when my PC has multiple network adapters like VMware or VLAN interfaces?

Create a minimal YAML file that pins discovery to the correct adapter. Use http_server: port: 5000, enable logging: level: debug, and add discovery_ips with the local adapter IP that can reach the camera. The sample config in the thread uses 192.168.238.1 and explicitly notes VLAN crossing as a case where you must specify unicast targets instead of relying on automatic discovery. [#21522687]

What's the difference between building cam-reverse from source and downloading the precompiled bin.cjs release from GitHub?

The practical difference is setup time. Building from source means compiling the project yourself, while the precompiled bin.cjs lets you run the finished file directly with NodeJS. The author recommends the precompiled release, and later clarifies that you simply download the CJS file, make sure the node command works in your terminal, and run it from there. [#21763506]

What is NodeJS and what does a .cjs file like dist/bin.cjs actually do in this A9 camera setup?

"NodeJS is a JavaScript runtime that executes server-side scripts from the command line, and a .cjs file is a CommonJS module that Node can run directly as an application or tool." In this setup, dist/bin.cjs starts the local HTTP server or runs pairing commands, provided the node command is installed and available in your system path. [#21763506]

How can I pair an A9 camera with my home Wi‑Fi using cam-reverse instead of connecting to the camera's AP mode?

Use the built-in pairing command and supply your network credentials. Run node dist/bin.cjs pair --ssid <SSID> --password <PASSWORD>. The author says this should let the camera join your home Wi‑Fi instead of staying in AP mode, and may allow multiple cameras on the same NodeJS page, although that multi-camera case was not yet tested in the thread. [#21522687]

Why does an A9 camera still work for local viewing without internet access, and which cloud server connections can be blocked safely on the router?

Local viewing still works because the stream can stay entirely on the local network. The author demonstrated viewing in AP mode, where the camera had no internet at all, and said blocking outbound traffic to listed cloud IPs did not affect the local video stream. The cited endpoints include 139.155.68.77, 119.45.114.92, 162.62.63.154, and 3.132.215.40, with the warning that future units may use different addresses. [#21523729]

What resolution do these cheap A9 cameras actually stream or record at?

The thread does not provide a verified resolution value. A reader asked about resolution, but no post in the discussion answered with numbers such as 720p, 1080p, or frame rate. The safest conclusion from this thread alone is that local streaming works, but the exact stream or recording resolution remains unspecified for the shown A9/X5 variants. [#21522742]

How does live viewing work on the battery-powered A9 versions, and do they stream continuously or only on motion trigger?

The thread does not confirm a motion-only limit for battery-powered models. The discussion asks whether battery versions provide live feed or only motion-triggered images, but no reply gives a tested answer. What is confirmed is that at least one battery-powered style unit can be viewed locally in the same general setup, while power source may affect image quality and heat. [#21522742]

In what format does cam-reverse expose the A9 camera stream, and how can I export it to ONVIF, RTSP, or Home Assistant?

In this thread, cam-reverse exposes the camera through its local HTTP page, not through a confirmed ONVIF or RTSP output. A reader asked whether export was ONVIF or RTSP, and the author later said Home Assistant integration was still under investigation. So the verified answer here is limited: local browser viewing worked, but ONVIF, RTSP, and Home Assistant export were not confirmed. [#21522687]

Why does my A9 camera video show stripes, tearing, or shifted image sections when running from battery but look fine on USB power?

The thread points to power-related interference. One user reported good video on USB but stripes and shifted image sections on battery, and another reported similar artifacts when powering through a USB UPS or powerbank, suggesting electrical noise from an inverter or unstable supply path. The concrete edge case is clear: the same camera can look normal on USB and visibly corrupted on battery or noisy external power. [#21523575]

What could cause an XF16 or TXW817 based A9 camera to get noticeably warm during streaming, and what temperature range is normal?

These cameras can run warm during operation, but the thread only gives approximate field observations, not an official thermal spec. One TXW817 unit was estimated at about 60–70°C and remained touchable, while an XF16-based unit also became warm enough for the author to flag it for further investigation. Treat that as a rough observed range for active streaming or Wi‑Fi use, not as a guaranteed normal limit. [#21800147]

How can I troubleshoot an A9 camera in AP mode at 192.168.1.1 when cam-reverse keeps searching but never finds the device?

Check subnet matching first, then force the correct discovery target. 1. Confirm your PC got an address from the camera AP, such as 192.168.1.100, and that the camera is 192.168.1.1. 2. Start http_server with a config file and set discovery to the active interface or AP subnet. 3. If pairing also does nothing, treat it as a compatibility issue rather than a port issue; the thread shows searches on 192.168.1.1 and 192.168.1.255 with zero detection. [#21800147]

Which A9 camera chipsets and boards are compatible with cam-reverse or custom firmware, such as XF16, XR872, and TXW817?

The thread confirms tested or discussed hardware, not a full compatibility matrix. The original camera used an XF16 chip, another post showed a TXW817-based unit that heated to about 60–70°C, and the author said they uploaded their own firmware to an XR872-based camera, bringing basic Wi‑Fi and flash up but not video support yet. That means local streaming was demonstrated on the A9/X5 family, while custom firmware support was only partially working on XR872. [#21523729]
Generated by the language model.
ADVERTISEMENT