Browse Source

Configure supervisord to run video_looper on boot.

pull/2/head
Tony DiCola 10 years ago
parent
commit
7f1a14e636
5 changed files with 73 additions and 7 deletions
  1. +1
    -0
      .gitignore
  2. +3
    -3
      Adafruit_Video_Looper/omxplayer.py
  3. +16
    -4
      Adafruit_Video_Looper/video_looper.py
  4. +45
    -0
      install.sh
  5. +8
    -0
      video_looper.conf

+ 1
- 0
.gitignore View File

@@ -1,3 +1,4 @@
omxplayer-dist.tgz*
# Byte-compiled / optimized / DLL files # Byte-compiled / optimized / DLL files
__pycache__/ __pycache__/
*.py[cod] *.py[cod]


+ 3
- 3
Adafruit_Video_Looper/omxplayer.py View File

@@ -55,9 +55,9 @@ class OMXPlayer(object):
""" """
# Stop the player if it's running. # Stop the player if it's running.
if self._process is not None and self._process.returncode is None: if self._process is not None and self._process.returncode is None:
# process.kill() doesn't seem to work reliably if USB drive is
# removed, instead just run a kill -9 on it.
subprocess.call(['kill', '-9', str(self._process.pid)])
# There are a couple processes used by omxplayer, so kill both
# with a pkill command.
subprocess.call(['pkill', '-9', 'omxplayer'])
# If a blocking timeout was specified, wait up to that amount of time # If a blocking timeout was specified, wait up to that amount of time
# for the process to stop. # for the process to stop.
start = time.time() start = time.time()


+ 16
- 4
Adafruit_Video_Looper/video_looper.py View File

@@ -1,12 +1,12 @@
# Copyright 2015 Adafruit Industries. # Copyright 2015 Adafruit Industries.
# Author: Tony DiCola # Author: Tony DiCola
# License: GNU GPLv2, see LICENSE.txt # License: GNU GPLv2, see LICENSE.txt
import atexit
import ConfigParser import ConfigParser
import importlib import importlib
import os import os
import re import re
import sys import sys
import signal
import time import time


import pygame import pygame
@@ -50,7 +50,6 @@ class VideoLooper(object):
self._console_output = self._config.getboolean('video_looper', 'console_output') self._console_output = self._config.getboolean('video_looper', 'console_output')
# Load configured video player and file reader modules. # Load configured video player and file reader modules.
self._player = self._load_player() self._player = self._load_player()
atexit.register(self._player.stop) # Make sure to stop player on exit.
self._reader = self._load_file_reader() self._reader = self._load_file_reader()
# Load other configuration values. # Load other configuration values.
self._osd = self._config.getboolean('video_looper', 'osd') self._osd = self._config.getboolean('video_looper', 'osd')
@@ -73,6 +72,7 @@ class VideoLooper(object):
self._extensions = self._player.supported_extensions() self._extensions = self._player.supported_extensions()
self._small_font = pygame.font.Font(None, 50) self._small_font = pygame.font.Font(None, 50)
self._big_font = pygame.font.Font(None, 250) self._big_font = pygame.font.Font(None, 250)
self._running = True


def _print(self, message): def _print(self, message):
"""Print message to standard output if console output is enabled.""" """Print message to standard output if console output is enabled."""
@@ -186,7 +186,7 @@ class VideoLooper(object):
playlist = self._build_playlist() playlist = self._build_playlist()
self._prepare_to_run_playlist(playlist) self._prepare_to_run_playlist(playlist)
# Main loop to play videos in the playlist and listen for file changes. # Main loop to play videos in the playlist and listen for file changes.
while True:
while self._running:
# Load and play a new movie if nothing is playing. # Load and play a new movie if nothing is playing.
if not self._player.is_playing(): if not self._player.is_playing():
movie = playlist.get_next() movie = playlist.get_next()
@@ -205,14 +205,26 @@ class VideoLooper(object):
# Give the CPU some time to do other tasks. # Give the CPU some time to do other tasks.
time.sleep(0) time.sleep(0)


def signal_quit(self, signal, frame):
"""Shut down the program, meant to by called by signal handler."""
self._running = False
if self._player is not None:
self._player.stop()
pygame.quit()



# Main entry point. # Main entry point.
def main(): def main():
print('Starting Adafruit Video Looper.')
# Default config path to /boot. # Default config path to /boot.
config_path = '/boot/video_looper.ini' config_path = '/boot/video_looper.ini'
# Override config path if provided as parameter. # Override config path if provided as parameter.
if len(sys.argv) == 2: if len(sys.argv) == 2:
config_path = sys.argv[1] config_path = sys.argv[1]
# Create video looper and run it.
# Create video looper.
videolooper = VideoLooper(config_path) videolooper = VideoLooper(config_path)
# Configure signal handlers to quit on TERM or INT signal.
signal.signal(signal.SIGTERM, videolooper.signal_quit)
signal.signal(signal.SIGINT, videolooper.signal_quit)
# Run the main loop.
videolooper.run() videolooper.run()

+ 45
- 0
install.sh View File

@@ -0,0 +1,45 @@
#!/bin/sh

# Error out if anything fails.
set -e

# Make sure script is run as root.
if [ "$(id -u)" != "0" ]; then
echo "Must be run as root with sudo! Try: sudo ./install.sh"
exit 1
fi

echo "Installing dependencies..."
echo "=========================="
#apt-get update
#apt-get -y install build-essential python-dev python-pip python-pygame supervisor git

echo "Installing omxplayer..."
echo "======================="
if [ -f "omxplayer-dist.tgz" ]; then
rm omxplayer-dist.tgz
fi
wget https://github.com/adafruit/omxplayer/releases/download/2%2F10%2F2015/omxplayer-dist.tgz
tar xvfz omxplayer-dist.tgz -C /

echo "Installing hello_video..."
echo "========================="
git clone https://github.com/adafruit/pi_hello_video.git
cd pi_hello_video
./rebuild.sh
cd hello_video
make install
cd ../..
rm -rf pi_hello_video

echo "Installing video_looper program..."
echo "=================================="
python setup.py install --force
cp video_looper.ini /boot/video_looper.ini

echo "Configuring video_looper to run on start..."
echo "==========================================="
cp video_looper.conf /etc/supervisor/conf.d/
service supervisor restart

echo "Finished!"

+ 8
- 0
video_looper.conf View File

@@ -0,0 +1,8 @@
# Supervisord configuration to run video looper at boot and
# ensure it runs continuously.
[program:video_looper]
command=video_looper
autostart=true
autorestart=unexpected
startsecs=5
stopasgroup=true

Loading…
Cancel
Save