init repo
This commit is contained in:
commit
e80cd6a3dd
|
@ -0,0 +1,2 @@
|
||||||
|
# piPlayer
|
||||||
|
video player and motion detector for pi zero
|
|
@ -0,0 +1,14 @@
|
||||||
|
[Unit]
|
||||||
|
Description=run osc video player
|
||||||
|
After=multi-user.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
Restart=always
|
||||||
|
User=root
|
||||||
|
ExecStart=/usr/bin/bash /home/pi/piPlayer/runPiPlayer.sh
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
#! /usr/bin/bash
|
||||||
|
|
||||||
|
cd /home/pi/piPlayer
|
||||||
|
python3 src/piPlayer.py
|
|
@ -0,0 +1,46 @@
|
||||||
|
from pythonosc import dispatcher
|
||||||
|
from pythonosc import osc_server
|
||||||
|
from pythonosc import udp_client
|
||||||
|
from playerClass import videoPlayer
|
||||||
|
from time import sleep
|
||||||
|
import RPi.GPIO as GPIO
|
||||||
|
import threading
|
||||||
|
|
||||||
|
IP = "0.0.0.0"
|
||||||
|
PORT = 6060
|
||||||
|
OSC_ADDR = ""
|
||||||
|
REMOTE_IP = "192.168.21.232"
|
||||||
|
REMOTE_PORT = 3030
|
||||||
|
SENSOR_PIN = 4
|
||||||
|
OSC_SENSOR_ADDR = "/blumen/movement"
|
||||||
|
|
||||||
|
def readSensor():
|
||||||
|
GPIO.setmode(GPIO.BCM)
|
||||||
|
GPIO.setup(SENSOR_PIN,GPIO.IN)
|
||||||
|
client = udp_client.SimpleUDPClient(REMOTE_IP, REMOTE_PORT)
|
||||||
|
pinState = GPIO.input(SENSOR_PIN)
|
||||||
|
while True:
|
||||||
|
pinStateNew = GPIO.input(SENSOR_PIN)
|
||||||
|
if pinStateNew != pinState :
|
||||||
|
client.send_message(OSC_SENSOR_ADDR,pinStateNew)
|
||||||
|
pinState = pinStateNew
|
||||||
|
sleep(0.2)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
thread = threading.Thread(target=readSensor)
|
||||||
|
thread.daemon = True
|
||||||
|
thread.start()
|
||||||
|
player = videoPlayer()
|
||||||
|
dispatcher = dispatcher.Dispatcher()
|
||||||
|
dispatcher.map(OSC_ADDR + "/play", player.play)
|
||||||
|
dispatcher.map(OSC_ADDR + "/togglePause", player.togglePause)
|
||||||
|
dispatcher.map(OSC_ADDR + "/pause", player.setPause)
|
||||||
|
dispatcher.map(OSC_ADDR + "/stop", player.stop)
|
||||||
|
dispatcher.map(OSC_ADDR + "/loop", player.setLoop)
|
||||||
|
dispatcher.map(OSC_ADDR + "/setVolume", player.setVolume)
|
||||||
|
server = osc_server.ThreadingOSCUDPServer((IP, PORT), dispatcher)
|
||||||
|
print("Serving on {}".format(server.server_address))
|
||||||
|
server.serve_forever()
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
import os
|
||||||
|
import mplayer
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
class videoPlayer:
|
||||||
|
p = mplayer.Player()
|
||||||
|
loop = False
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
os.environ["SDL_VIDEODRIVER"] = "fbcon"
|
||||||
|
os.environ["SDL_FBDEV"] = "/dev/fb1"
|
||||||
|
|
||||||
|
self.p = mplayer.Player(args=("-vo sdl"))
|
||||||
|
self.p.framedropping = 1
|
||||||
|
|
||||||
|
def play(self, oscAddr, filePath):
|
||||||
|
source = "".join(filePath)
|
||||||
|
print("play", source)
|
||||||
|
try:
|
||||||
|
self.p.loadfile(source)
|
||||||
|
except Exception as e:
|
||||||
|
print("could not load video")
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
def togglePause(self, oscAddr=None, args=None):
|
||||||
|
self.p.pause()
|
||||||
|
print("togglePause")
|
||||||
|
|
||||||
|
def setPause(self, oscAddr, args):
|
||||||
|
print("pause", args)
|
||||||
|
if bool(args) != self.p.paused :
|
||||||
|
self.p.pause()
|
||||||
|
|
||||||
|
def stop(self, oscAddr=None, args=None):
|
||||||
|
self.p.pause()
|
||||||
|
time.sleep(0.5)
|
||||||
|
subprocess.run(["dd", "if=/dev/zero", "of=/dev/fb1"])
|
||||||
|
|
||||||
|
def setLoop(self, oscAddr, args):
|
||||||
|
print("loop", args)
|
||||||
|
self.p.loop = int(args)
|
||||||
|
|
||||||
|
def setVolume(self, oscAddr, args):
|
||||||
|
print("setVolume", args)
|
||||||
|
self.p.volume = float(args)
|
Loading…
Reference in New Issue