After spending several hours troubleshooting this together with ChatGPT, I finally found a solution that works on my K1C running firmware 1.3.5.22 with the new camera hardware.
I hope this saves someone else a lot of time.
Symptoms
After updating to 1.3.5.22:
-
Camera still works in Creality Print
-
AI detection still works
-
Camera disappears from Mainsail/Fluidd
-
Camera Settings Controlcannot be installed (“not compatible with the new hardware version”) -
/webcam/?action=streamno longer works -
No
mjpg_streamerservice is running
What I found
The firmware no longer streams directly from the UVC device.
Instead, Creality uses:
cam_app
which writes camera frames into shared memory:
/dev/shm/camera_main
The existing input_uvc.so method is no longer usable.
Trying to start MJPG Streamer with input_uvc.so results in:
undefined symbol: parse_resolution_opt
The correct plugin is actually:
input_memfd.so
Why this works:
Based on the behavior observed during troubleshooting, the firmware update appears to have changed the camera pipeline rather than simply blocking MJPEG access.
The camera is now managed by cam_app, which feeds WebRTC and the AI services while exposing the image through a shared memory buffer (/dev/shm/camera_main).
The legacy input_uvc.so plugin no longer works on this firmware (it fails with undefined symbol: parse_resolution_opt), but input_memfd.so is still present and successfully reads the shared-memory frames produced by cam_app.
This patch does not access the camera device directly (/dev/video*) and does not replace Creality’s camera pipeline. It simply starts mjpg_streamer using input_memfd.so, exposing the existing shared-memory stream as MJPEG for Mainsail/Fluidd.
During testing, Creality Print, WebRTC and AI-related processes (cam_app, cx_ai_middleware, webrtc, webrtc_local) all continued running normally.
First test
Before modifying anything, I tested this manually:
/usr/bin/mjpg_streamer \
-i "/usr/lib/mjpg-streamer/input_memfd.so -t 0" \
-o "/usr/lib/mjpg-streamer/output_http.so -p 8080"
Immediately afterwards:
-
port 8080 opened
-
Mainsail camera started working
-
Creality Print continued working
-
AI functions continued working
So the solution was confirmed.
Permanent fix
My firmware did not contain the /etc/init.d/S50usb_camera script mentioned by another user.
Instead, I created a new startup service:
/etc/init.d/S59mjpg_streamer
with this content:
#!/bin/sh
case "$1" in
start)
i=0
while [ ! -e /dev/shm/camera_main ] && [ $i -lt 30 ]; do
sleep 1
i=$((i+1))
done
pidof mjpg_streamer >/dev/null && exit 0
/usr/bin/mjpg_streamer \
-b \
-i "/usr/lib/mjpg-streamer/input_memfd.so -t 0" \
-o "/usr/lib/mjpg-streamer/output_http.so -p 8080"
;;
stop)
killall -q mjpg_streamer
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
Then:
chmod +x /etc/init.d/S59mjpg_streamer
Since rcS automatically executes every executable S??* script inside /etc/init.d, the service starts automatically on every boot.
Result
After reboot:
Camera works in Mainsail
Camera still works in Creality Print
AI features still appear to work
WebRTC is still running
CPU usage increased by only around 2%
No other changes were required.
Backup
Since firmware updates may overwrite /etc/init.d, I also saved a copy:
cp /etc/init.d/S59mjpg_streamer /usr/data/S59mjpg_streamer
Restoring after a firmware update is simply:
cp /usr/data/S59mjpg_streamer /etc/init.d/
chmod +x /etc/init.d/S59mjpg_streamer
Credits
This solution was developed after a long troubleshooting session with ChatGPT. The investigation combined community reports, testing on the printer itself, and analysis of the firmware behavior. The key discovery was that the new camera hardware no longer uses input_uvc.so; instead, it exposes frames through cam_app and input_memfd.so, allowing MJPG Streamer to publish the existing video stream without interfering with Creality Print or the AI pipeline.
