As crazy/stupid as it sounds, I did it.
Managed to show the local RTSP stream from a Tapo surveillance camera on a rooted / jailbroken Kindle Paperwhite, without servers, just ffmpeg and eips
–
The idea
eips is a custom e-ink support program for kindles
Find more info here
Fortunately on a Kindle (rooted) there is also a build of the ffmpeg lib, which will come in very handy.
The idea of the script that is running on the Kindle (no servers! “serverless” in the real sense) is the following:
I want to use the RTSP stream of my Tapo camera and grab a snapshot (1 frame of the stream)
Since I don’t have ImageMagick installed (and can’t compile it from source) on my Kindle, I’ll need to do everything with one ffmpeg command.
eips will come into play to render the image every few seconds.
This is going to be great-scale (alright, sorry for the pun)
–
Proof of Kindle

The script
#/bin/sh
while true; do
ffmpeg -y -rtsp_transport tcp \
-i "rtsp://<username>:<password>@<tapocamip>:554/stream1" \
-f image2 \
-pix_fmt gray \
-vf "scale=1920:-1,transpose=1" \
-vframes 1 \
output.png
eips -cfg output.png
sleep 5
doneFFmpeg
To break down the ffmpeg command:
-yto overwrite theoutput.pngfile at every run-rtsp_transport tcpbecause I was getting dropped chunks during the transport with UDP on my spotty network-i "rtsp://..."well that’s the source where I am getting the rstp stream duh-f image2tells ffmpeg to store a sequence of individual image frames as separate files (in conjuction with-vframes 1)-pix_fmt graybecause Kindles work best with 8-bit grayscale PNGs-vf "scale=1920:-1,transpose=1"to scale the image maintaining the aspect ratio and rotate it 90deg clockwise, so it fills the whole screen of the Kindle
eips
The eips -cfg does the following:
-cclears the screen before updating it-fperform a full screen update-gto tell it it’s a PNG file
Prevent Kindle going to sleep
Borrowed from this repo
Prepend this to the script:
lipc-set-prop -i com.lab126.powerd preventScreenSaver 1
stop powerdMore info about lipc-set-prop
or use the KUAL Helper extension to prevent the screensaver manually.
Installation
You could spin this up in a cron, or through init.d
Or by using a generic cron that runs every minute an make a different script without the while loop, e.g.
* * * * * /mnt/us/cam-once.shTo do that, first make your filesystem writable
mntroot rwThen edit the crontab
vi /etc/crontab/root
Chris