popcornmix / omxplayer

omxplayer
GNU General Public License v2.0
1.01k stars 334 forks source link

DBUS Name Control problem #826

Closed rijotech closed 1 year ago

rijotech commented 1 year ago

I'm having problems trying to control a omxplayer second instance using the DBUS script. I have two and I can control one but for some reason I cannot control the second one. My command sudo -u pi omxplayer --dbus_name org.mpris.MediaPlayer2.omxplayer1 --adev alsa:hw:1,0 --display=7 --loop video.mp4 My DBUS Script

#!/bin/bash

#set -x

OMXPLAYER_DBUS_ADDR="/tmp/omxplayerdbus.${USER:-root}"
OMXPLAYER_DBUS_PID="/tmp/omxplayerdbus.${USER:-root}.pid"
export DBUS_SESSION_BUS_ADDRESS=`cat $OMXPLAYER_DBUS_ADDR`
export DBUS_SESSION_BUS_PID=`cat $OMXPLAYER_DBUS_PID`

[ -z "$DBUS_SESSION_BUS_ADDRESS" ] && { echo "Must have DBUS_SESSION_BUS_ADDRESS" >&2; exit 1; }

case $1 in
status)
    duration=`dbus-send --print-reply=literal --session --reply-timeout=500 --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:"org.mpris.MediaPlayer2.Player" string:"Duration"`
    [ $? -ne 0 ] && exit 1
    duration="$(awk '{print $2}' <<< "$duration")"

    position=`dbus-send --print-reply=literal --session --reply-timeout=500 --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:"org.mpris.MediaPlayer2.Player" string:"Position"`
    [ $? -ne 0 ] && exit 1
    position="$(awk '{print $2}' <<< "$position")"

    playstatus=`dbus-send --print-reply=literal --session --reply-timeout=500 --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:"org.mpris.MediaPlayer2.Player" string:"PlaybackStatus"`
    [ $? -ne 0 ] && exit 1
    playstatus="$(sed 's/^ *//;s/ *$//;' <<< "$playstatus")"

    paused="true"
    [ "$playstatus" == "Playing" ] && paused="false"
    echo "Duration: $duration"
    echo "Position: $position"
    echo "Paused: $paused"
    ;;

openuri)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.OpenUri string:"$2" >/dev/null
    ;;

volume)
    volume=`dbus-send --print-reply=double --session --reply-timeout=500 --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Set string:"org.mpris.MediaPlayer2.Player" string:"Volume" ${2:+double:}$2`
    [ $? -ne 0 ] && exit 1
    volume="$(awk '{print $2}' <<< "$volume")"
    echo "Volume: $volume"
    ;;

pause)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Action int32:16 >/dev/null
    ;;

stop)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Action int32:15 >/dev/null
    ;;

seek)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Seek int64:$2 >/dev/null
    ;;

setposition)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.SetPosition objpath:/not/used int64:$2 >/dev/null
    ;;

setalpha)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.SetAlpha objpath:/not/used int64:$2 >/dev/null
    ;;

setlayer)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.SetLayer int64:$2 >/dev/null
    ;;

setvideopos)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.VideoPos objpath:/not/used string:"$2 $3 $4 $5" >/dev/null
    ;;

setvideocroppos)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.SetVideoCropPos objpath:/not/used string:"$2 $3 $4 $5" >/dev/null
    ;;

setaspectmode)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.SetAspectMode objpath:/not/used string:"$2" >/dev/null
    ;;

hidevideo)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Action int32:28 >/dev/null
    ;;

unhidevideo)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Action int32:29 >/dev/null
    ;;

volumeup)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Action int32:18 >/dev/null
    ;;

volumedown)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Action int32:17 >/dev/null
    ;;

togglesubtitles)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Action int32:12 >/dev/null
    ;;

hidesubtitles)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Action int32:30 >/dev/null
    ;;

showsubtitles)
    dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Action int32:31 >/dev/null
    ;;
getsource)
    source=$(dbus-send --print-reply=literal --session --reply-timeout=500 --dest=org.mpris.MediaPlayer2.omxplayer1  /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.GetSource)
    [ $? -ne 0 ] && exit 1
    echo "$source" | sed 's/^ *//'
    ;;
*)
    echo "usage: $0 status|openuri|pause|stop|seek|volumeup|volumedown|setposition [position in microseconds]|hidevideo|unhidevideo|togglesubtitles|hidesubtitles|showsubtitles|setvideopos [x1 y1 x2 y2]|setvideocroppos [x1 y1 x2 y2]|setaspectmode [letterbox,fill,stretch,default]|setalpha [alpha (0..255)]|setlayer [layer]|getsource" >&2
    exit 1
    ;;
esac

My results tv2 tv3

I can't seen to figure out what is wrong. I have another one and is working just fine but this one doesn't work.

rijotech commented 1 year ago

Never mind I found the problem!