59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
'''
|
|
A quick example showing how pyvidplayer2 can be used in more complicated applications
|
|
This is a Picture-in-Picture app
|
|
'''
|
|
|
|
|
|
import pygame
|
|
from win32gui import SetWindowPos, GetCursorPos, GetWindowRect, GetForegroundWindow, SetForegroundWindow
|
|
from win32api import GetSystemMetrics
|
|
from win32con import SWP_NOSIZE, HWND_TOPMOST
|
|
from win32com.client import Dispatch
|
|
from pyvidplayer2 import VideoPlayer, Video
|
|
from cv2 import INTER_AREA
|
|
|
|
|
|
SIZE = (426, 240)
|
|
FILE = r"resources\billiejean.mp4"
|
|
|
|
win = pygame.display.set_mode(SIZE, pygame.NOFRAME)
|
|
|
|
# creates the video player
|
|
|
|
vid = VideoPlayer(Video(FILE, interp=INTER_AREA), (0, 0, *SIZE))
|
|
|
|
# moves the window to the bottom right corner and pins it above other windows
|
|
|
|
hwnd = pygame.display.get_wm_info()["window"]
|
|
SetWindowPos(hwnd, HWND_TOPMOST, GetSystemMetrics(0) - SIZE[0], GetSystemMetrics(1) - SIZE[1] - 48, 0, 0, SWP_NOSIZE)
|
|
|
|
clock = pygame.time.Clock()
|
|
|
|
shell = Dispatch("WScript.Shell")
|
|
|
|
while True:
|
|
events = pygame.event.get()
|
|
for event in events:
|
|
if event.type == pygame.QUIT:
|
|
vid.close()
|
|
pygame.quit()
|
|
quit()
|
|
|
|
clock.tick(60)
|
|
|
|
# allows the ui to be seamlessly interacted with
|
|
|
|
touching = pygame.Rect(GetWindowRect(hwnd)).collidepoint(GetCursorPos())
|
|
if touching and GetForegroundWindow() != hwnd:
|
|
|
|
# weird behaviour with SetForegroundWindow that requires the alt key to be pressed before it's called
|
|
|
|
shell.SendKeys("%")
|
|
SetForegroundWindow(hwnd)
|
|
|
|
# handles video playback
|
|
|
|
vid.update(events, show_ui=touching)
|
|
vid.draw(win)
|
|
|
|
pygame.display.update() |