omxplayer-wrapper: отображение видеопоследовательности на основе сообщения OSC - PullRequest
1 голос
/ 29 июня 2019

Я совсем недавно использую Python & OMXPLAYER-WRAPPER, и некоторая помощь будет потрясающей!:))

Проект состоит в том, чтобы использовать TouchOSC для отправки различных сообщений osc на RaspberryPi, а затем он будет отображать различные видеопоследовательности на основе сообщения OSC.

Всего есть только два видео-> video1 и video2

Макет TouchOSC будет состоять всего из трех кнопок -> action, standby и loop:

  • Action -> отобразит video1, а затем циклпетли video2 -> video1 + (video2)
  • Standby -> будет отображаться петля video2 -> loop (video2)
  • Loop -> будет отображатьсяцикл video1 и video2 -> loop (video1 + video2)

Мне удается выполнять каждое взаимодействие отдельно, но у меня возникают проблемы, когда я нажимаю одну кнопку, а затем другую.Он показывает и видео, или только одно видео медленно ...

Это код, который я сделал:

from omxplayer.player import OMXPlayer
from pathlib import Path
from time import sleep
import logging
import argparse
import math
import sys
import os
from subprocess import Popen
from pythonosc import dispatcher
from pythonosc import osc_server

movie1 = ("/home/pi/Videos/action.mp4")
movie2 = ("/home/pi/Videos/standby.mp4")

###################  FUNCTIONS

####  action
def playerExit_action1(code):
  playvideo2_action()

def play_action(unused_addr, args, volume):
  if args[0] == "action" and volume == 1.0:
    print("action")
    player = OMXPlayer(movie1, args=['--no-osd', '--no-keys', '-b'])
    player.exitEvent += lambda _, exit_code: playerExit_action1(exit_code)

def playvideo2_action():
  player1 = OMXPlayer(movie2, args=['--no-osd', '--no-keys', '-b'])
  player1.exitEvent += lambda _, exit_code: playerExit_action1(exit_code)


####  standby
def play_standby(unused_addr, args, volume):
  if args[0] == "standby" and volume == 1.0:
    print("standby")
    player2 = OMXPlayer(movie2, args=['--no-osd', '--no-keys', '-b'])
    player2.exitEvent += lambda _, exit_code: playerExit_standby(exit_code)

def playvideo2_standby():
  player3 = OMXPlayer(movie2, args=['--no-osd', '--no-keys', '-b'])
  player3.exitEvent += lambda _, exit_code: playerExit_standby(exit_code)

def playerExit_standby(code):
  playvideo2_standby()


####  loop
def play_loop(unused_addr, args, volume):
  if args[0] == "loop" and volume == 1.0:
    print("loop")
    player4 = OMXPlayer(movie1, args=['--no-osd', '--no-keys', '-b'])
    player4.exitEvent += lambda _, exit_code: playerExit_loop1(exit_code)


def playvideo1_loop():
  player6= OMXPlayer(movie1, args=['--no-osd', '--no-keys', '-b'])
  player6.exitEvent += lambda _, exit_code: playerExit_loop1(exit_code)


def playvideo2_loop():
  player5 = OMXPlayer(movie2, args=['--no-osd', '--no-keys', '-b'])
  player5.exitEvent += lambda _, exit_code: playerExit_loop2(exit_code)


def playerExit_loop1(code):
  playvideo2_loop()

def playerExit_loop2(code):
  playvideo1_loop()



##  OSC
if __name__== "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--ip",
                        default="192.168.1.107")
    parser.add_argument("--port",
                        type=int, default=12000, help=12000)
    args = parser.parse_args()

    dispatcher = dispatcher.Dispatcher()
    dispatcher.map("/btn/push5", play_action, "action")
    dispatcher.map("/btn/push2", play_standby, "standby")
    dispatcher.map("/btn/push4", play_loop, "loop")

    server = osc_server.ThreadingOSCUDPServer(
        (args.ip, args.port), dispatcher)
    print("Serving on {}".format(server.server_address))
    server.serve_forever()

Спасибо !!

...