When I want to show a video chat on the big screen I tend to use a mobile device and cast the picture to the TV . It did occur to me though that it might be useful to have the capability to call directly from the home theatre PC under the TV . I don't want to buy a separate webcam for this niche use-case though, so I started thinking about ways to re-purpose other devices. My phone has two good cameras in it, could I use those?
As it turns out, yes; there are multiple apps on the Play Store that will allow an Android phone to be used as a webcam. After a bit of testing I settled on IP Webcam Pro , which was well reviewed. It also supports using the Android device's microphone.
It works quite well as a compromise solution, although I'm glad I'm not using it often. There's just a little bit of manual setup on the phone and PC side which means it's a bit more faff than simply plugging in a webcam. Still, always good to have options.
To start the webcam, open the app and click on Start Server.You will see the image from the camera and the address of the webcam on the local network. To connect to the webcam, we need to connect from our Linux client using ipwebcam-gst . This is simply a script to install and configure the necessary packages and setup the dummy video device that will relay the live video feed from the phone. Clone the repo and start the script to connect. You will need to modify the lines with the IP address and port to match your phone. I also set the stream dimensions to 720p.
...
# IP used by the phone in your wireless network
WIFI_IP=192.168.1.61
# Port on which IP Webcam is listening
PORT=8090
# To disable proxy while acessing WIFI_IP (set value 1 to disable, 0 for not)
# For cases when host m/c is connected to a Proxy-Server and WIFI_IP belongs to local network
DISABLE_PROXY=0
# Dimensions of video
WIDTH=1280
HEIGHT=720
...
I also commented out the kernel module and gstreamer package install checks as they were unnecessary on my system and failed. Lastly I added a line to cleanup any leftover adb processes at the end of a run, as these prevented subsequent runs (I don't bother with ADB any longer anyway, connection over WiFi seems to perform well).
...
# if [
# `find /lib/modules/$(uname -r)/ -name "$MODULE.ko.*" | egrep '.*' ||
# find /lib/modules/$(uname -r)/extra -name "$MODULE.ko.*" | egrep '.*'` ]; then
return 0
# else
# return 1
# fi
# fi
...
# if find "/usr/lib/gstreamer-$GST_VER/libgstpulseaudio.so" "/usr/lib/gstreamer-$GST_VER/libgstpulse.so" "/usr/lib/$(uname -m)-linux-gnu/gstreamer-$GST_VER/libgstpulse.so" 2>/dev/null | eg
rep -q '.*'; then
# # plugin installed, do nothing
# # info "Found the pulse gst plugin"
# :
# else
# if [ $DIST = "Debian" ] || [ $DIST = "Ubuntu" ]; then
# install_package "gstreamer${GST_VER}-pulseaudio"
# elif [ $DIST = "Arch" ]; then
# install_package "gst-plugins-good"
# fi
# fi
...
killall adb