Є багатоплатформовий відео плеєр з відкрити кодом - MPV.
Все що він може і як цим керувати описано в офіційній документації.
Є задача - керувати цим плеєром коли він запушений на віддаленому екрані.
Один з варіантів керування це використати JSON-based IPC протокол.
У документації є приклади, тому на їх основі запускаю плеєр в ОС Ubuntu.
Інший варіант це запустити з статичним зображенням, наприклад логотипом, з нескінченим часом показу .
Для передачі команди плеєра:
Важлива примітка. У пердачі параметрів фільтра "vf-set=\"fade=t=in:d=1\"" передавати у екранованно .
і таким чином реагувати на стан плеєра і робити власні команди.
Все що він може і як цим керувати описано в офіційній документації.
Є задача - керувати цим плеєром коли він запушений на віддаленому екрані.
Один з варіантів керування це використати JSON-based IPC протокол.
У документації є приклади, тому на їх основі запускаю плеєр в ОС Ubuntu.
Початковий запуск плеера
mpv --idle --loop-playlist --fullscreen --geometry=800x600 --input-ipc-server=/tmp/mpvsocketВ такому режимі плеєр загущений у режимі очкування команд, без активації інтерфейсу.
Інший варіант це запустити з статичним зображенням, наприклад логотипом, з нескінченим часом показу .
mpv LOGO.PNG --loop-playlist --image-display-duration=inf --alpha=no --fullscreen --geometry=800x600 --input-ipc-server=/tmp/mpvsocket
Плеєр MPV в режимі очікування |
Керування плеєром
Для керування плеєром буду використовувати простий скрипт сценарію BASH, для з'єднання через SOCKET використовую програму socat.sudo apt install socatПростий варіант послати команду до плеєра це:
echo ${COMMAND} | socat - /tmp/mpvsocket
COMMAND='{ "command": ["get_property", "playback-time"] }' echo ${COMMAND} | socat - /tmp/mpvsocketРезультат буде в JSON форматі:
{"data":190.482000,"error":"success"}Тому для обробки відповіді в форматі JSON встановлюю програму jq.
sudo apt install jqВаріант з функцією багаторазового використання з обробкою результату:
function cmd() { res=$(echo ${1} | socat - /tmp/mpvsocket) error=$(echo "${res}" | jq -r '.error') if [ "${error}" == "success" ] ;then data=$(echo "${res}" | jq -r '.data') echo "${data}" fi }Тпер запит буде виглядати так:
cmd '{ "command": ["get_property", "playback-time"] }'Відповідь буде:
190.482000
Встановлення playlist для початку програвання
Перелік файлів котрі потрібно програвати зазвичай формується у файл "playlist.m3u".Для передачі команди плеєра:
PLAYLISTFILE=playlist.m3u cmd "{ \"command\": [\"loadlist\", \"${PLAYLISTFILE}\",\"replace\"] }"
Додавання файлу до списку програвання
URLMEDIA=somemedia.mp4 cmd '{ "command": ["loadfile","'${URLMEDIA}'","append-play"] }'
Додавання файлу до списку програвання з власними параметрами відеофільтрів
Наприклад, відео "somemedia.mp4" має довжину 40 сек. Додаю фільтр fade, де є параметр початку - IN, та на завершенні - OUT. Так на початку відео ефект FADE-IN в позиції 0 сек, довжина 1 сек. Завершується відео ефект FADE-OUT в позиції 39 сек, довжина 1 сек.cmd '{ "command": ["loadfile","'${URLMEDIA}'","append-play", "vf-set=\"fade=t=in:d=1\",vf-add=\"fade=out:st=39:d=1\""] }'
Важлива примітка. У пердачі параметрів фільтра "vf-set=\"fade=t=in:d=1\"" передавати у екранованно .
Також можна прослуховувати значення стану плеєра
while IFS= read -r line do event=$(echo "$line" | jq -r '.event') case "${event}" in 'end-file') echo "${event}" echo playlist-playing-pos $(cmd '{ "command": ["get_property","playlist-playing-pos"] }') ;; 'file-loaded') echo "${event}" echo "FN:" $(cmd '{ "command": ["get_property", "filename"] }') ;; *) echo "${event}" ;; esac done < <(( socat - /tmp/mpvsocket ))
і таким чином реагувати на стан плеєра і робити власні команди.
Немає коментарів:
Дописати коментар