Spyke
linux·Linuxbytetris11

What are the limitations of accessing /dev/video0 on an android device?

Conceptually I can understand that Termux cant take a photo or video from a camera device because it doesnt have access to the camera drivers that Android has....

...except that the Termux API does allow you to take a photo. So why is video off limits?

View original on lemmy.ml

Yeah, I mean it's not like they're calling native Android functions there (in proceedWithOpenCamera), it looks like the CameraDevice object might offer a lot more capture modes that just aren't being tapped into. Is it just a programming issue, or does Android only offer Photo contexts but not Video ones, or...?

3
Zak
lemmy.world
# ls -l /dev/video0
crw-rw---- 1 system camera 81,   0 1974-07-26 10:09 /dev/video0

Android doesn't handle users and groups like standard Linux, but the user account assigned to Termux is not a member of the camera group.

5
tetris11reply
lemmy.ml

Is it just a permissions issue? On a rooted phone, could I not simply add termux user to the camera group

7

Yeah I have a bash script that does similar, using the notification API for interactivity

FOLD_CAMERA=CameraShots
TEMP_PID=~/.record_pid
APP_ID=record

mkdir -p $FOLD_CAMERA

function main {
    termux-notification \
        --id $APP_ID --group RECORD \
	    --priority max \
	    --button1 "Front" \
	    --button1-action "termux-notification-remove $APP_ID;bash $0 record 1" \
	    --button2 "Back"  \
	    --button2-action "termux-notification-remove $APP_ID;bash $0 record 0" \
	    --button3 "Quit" \
	    --button3-action "termux-notification-remove $APP_ID;exit" \
	    --title "Record"
	
}

function record {
    local cam=${1:-0}

    termux-notification \
        --id $APP_ID --group RECORD \
	    --priority max \
	    --button1 "Stop" \
	    --button1-action "termux-notification-remove $APP_ID; bash $0 killproc" \
	    --title "Rec. $cam"
    
    (while :; do
	     termux-camera-photo \
	         -c $cam \
	         $FOLD_CAMERA/$(date "+%Y%m%d-%H%M_${cam}_record.jpg")
     done) &

    local pid=$!
    echo -n $pid > $TEMP_PID
} 

function killproc {
    local last_pid=$(cat $TEMP_PID)
    if [ "$last_pid" == "" ]; then
	    termux-toast "Could not kill process. Restart the phone."
    else
	    kill $last_pid &&
	        bash $0 main
    fi
}


[ "$*" = "" ] && main || eval "$*"

It just needs ffmpeg tied to the exit function

3

You reached the end

What are the limitations of accessing /dev/video0 on an android device? | Spyke