Skip to content

Instantly share code, notes, and snippets.

@natcl
Last active January 15, 2020 11:37
Show Gist options
  • Save natcl/005dc4c6434ed7b5a59a to your computer and use it in GitHub Desktop.
Save natcl/005dc4c6434ed7b5a59a to your computer and use it in GitHub Desktop.
import kivy
import os
import subprocess
kivy.require('1.0.7')
from kivy.animation import Animation
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.scatter import ScatterPlane
from kivy.uix.slider import Slider
from kivy.uix.boxlayout import BoxLayout
import kivy.core.window
from random import randint
from functools import partial
class VideoPlayer(App):
def __init__(self):
self.playing = False
self.youtube_list = ["https://r3---sn-4pcgxovpgx-t0ae.googlevideo.com/videoplayback?key=yt5&lmt=1409964697861358&itag=22&signature=64C7F15E721AB8FCD2081B378C06E09F6001FCB0.CE0B619A3DB3F5F31B03E7620C11CF9FC6E31A53&upn=RHdjwzDweQE&ratebypass=yes&mt=1442600103&mv=m&ms=au&ip=68.67.49.66&requiressl=yes&ipbits=0&mm=31&mn=sn-4pcgxovpgx-t0ae&id=o-AP81GyYCSYIKqspx9DC_ezohJ5536ViveqdPG498_RkH&mime=video%2Fmp4&pl=19&sver=3&expire=1442621757&initcwndbps=7392500&fexp=9408352%2C9408710%2C9409069%2C9412843%2C9415365%2C9415435%2C9415485%2C9416023%2C9416126%2C9416179%2C9417269%2C9417707%2C9418008%2C9418153%2C9418448%2C9418804%2C9418900%2C9419426%2C9419789%2C9420348%2C9420934%2C9421013&dur=117.051&source=youtube&sparams=dur%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire", "https://r3---sn-4pcgxovpgx-t0ae.googlevideo.com/videoplayback?upn=Ci3n3iUGmFg&requiressl=yes&dur=30.255&id=o-ACnsXYSoOqffhbUrZKiFMoGvuAUh9hzoZof3MHtjmpqd&mn=sn-4pcgxovpgx-t0ae&pl=19&mm=31&source=youtube&ip=68.67.49.66&fexp=9408498%2C9408710%2C9409069%2C9409171%2C9412774%2C9414764%2C9415365%2C9415485%2C9416023%2C9416126%2C9417634%2C9417707%2C9418153%2C9418448%2C9419758%2C9419785%2C9419838%2C9420348%2C9420717%2C9420985%2C9421013&itag=22&ratebypass=yes&mv=m&mt=1442600103&sver=3&lmt=1384439903862373&initcwndbps=7392500&sparams=dur%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&ms=au&expire=1442621817&ipbits=0&signature=3B79E4F932588C177FE6475C68A96CC8674DBA9F.0A75962EA2F00C592A4FB43F438A4E16BF580947&key=yt5&mime=video%2Fmp4", "https://r2---sn-4pcgxovpgx-t0ae.googlevideo.com/videoplayback?mm=31&source=youtube&pl=19&mn=sn-4pcgxovpgx-t0ae&mime=video%2Fmp4&ip=68.67.49.66&requiressl=yes&expire=1442621841&mt=1442600103&mv=m&id=o-AAGTGDqgUm5ZWgnVTu9x_JWhcRYtyh9dCIScUednugnR&ms=au&ratebypass=yes&ipbits=0&key=yt5&upn=TCrypz0TznM&fexp=9407662%2C9408710%2C9409069%2C9410706%2C9412773%2C9412834%2C9413209%2C9415365%2C9415485%2C9416023%2C9416075%2C9416126%2C9417205%2C9417707%2C9418153%2C9418448%2C9418612%2C9418999%2C9419292%2C9419341%2C9419788%2C9419993%2C9420348%2C9421013%2C9421166&itag=18&signature=384C21670379A35A5C89B5734D3F0576E2E2AD81.380EDAE656C48DC01A9B19DECA1E790A6C287AF7&dur=85.379&initcwndbps=7392500&sver=3&sparams=dur%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&lmt=1429078151896232", "https://r1---sn-4pcgxovpgx-t0ae.googlevideo.com/videoplayback?lmt=1391946832968952&fexp=9408498%2C9408710%2C9409069%2C9413122%2C9415365%2C9415485%2C9415821%2C9416023%2C9416126%2C9417707%2C9417843%2C9418153%2C9418339%2C9418391%2C9418448%2C9418703%2C9419243%2C9419266%2C9420333%2C9420348%2C9421013%2C9421252&ipbits=0&upn=GbLob4sdwi8&ratebypass=yes&signature=F89A8368F531A9B0DBD226C5C007594EF6A8B450.D9B52743FFF8BE041F9DF97EC1C554B213A2C2AE&source=youtube&key=yt5&sver=3&expire=1442621878&initcwndbps=6685000&mime=video%2Fmp4&dur=24.171&id=o-AC6f9gvXiqQnsfaTyAm_l4Nr_0A_xYBlMTe0Wii-vhmH&itag=18&pl=19&mt=1442600223&requiressl=yes&ms=au&mn=sn-4pcgxovpgx-t0ae&mv=m&ip=68.67.49.66&mm=31&sparams=dur%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire", "https://r3---sn-4pcgxovpgx-t0ae.googlevideo.com/videoplayback?signature=10FB5AF9E749B37292B9250DBC50B1ECE740EB57.23C0C11E89E1E226A39569F5B7AE1675323169D9&lmt=1388579636094697&sver=3&itag=18&mime=video%2Fmp4&ipbits=0&dur=163.422&mv=m&mt=1442600223&ms=au&fexp=9406004%2C9407117%2C9408013%2C9408500%2C9408710%2C9409069%2C9414703%2C9415365%2C9415485%2C9416023%2C9416126%2C9416326%2C9416729%2C9417298%2C9417707%2C9418008%2C9418153%2C9418393%2C9418448%2C9419838%2C9420078%2C9420256%2C9420261%2C9420333%2C9420348%2C9420982%2C9421013&mn=sn-4pcgxovpgx-t0ae&mm=31&source=youtube&ratebypass=yes&sparams=dur%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&id=o-AJJaO6IgxEC-N5GPvvi_x4Q9RoPFUTs-A5vVFwRt9Zd9&initcwndbps=6685000&ip=68.67.49.66&upn=wYtegobryH4&pl=19&key=yt5&requiressl=yes&expire=1442621907", "https://r2---sn-4pcgxovpgx-t0ae.googlevideo.com/videoplayback?mime=video%2Fmp4&requiressl=yes&ipbits=0&ratebypass=yes&expire=1442620167&pl=19&initcwndbps=7242500&sparams=dur%2Cgcr%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&ip=68.67.49.66&key=yt5&mm=31&mn=sn-4pcgxovpgx-t0ae&gcr=ca&mv=m&id=o-AJ7MxRt0r2dR7DeRQJci--Ra0GFpGkViGlykQFStgs_r&ms=au&source=youtube&lmt=1394290148818301&dur=267.099&sver=3&mt=1442598454&fexp=9408710%2C9409069%2C9413208%2C9414764%2C9414875%2C9415365%2C9415485%2C9416023%2C9416126%2C9416676%2C9416729%2C9417707%2C9418153%2C9418204%2C9418448%2C9418513%2C9419444%2C9419801%2C9419838%2C9419973%2C9420327%2C9420348%2C9421013%2C9421253&itag=18&upn=5_mr0wD78ug&signature=1AC50CD1BC5312CEDBFAE792D75CEA4C62AF949B.A5CF14D60F94BEEEEAE2D5E067D92B20BF47C6FC"]
super(VideoPlayer, self).__init__()
def play(self, instance, **kwargs):
print kwargs['filepath']
self._stop(instance)
if not self.playing:
self.process = subprocess.Popen('/usr/bin/omxplayer --no-osd --loop --display=5 "{0}"'.format(kwargs['filepath']), shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
self.playing = True
def _stop(self, instance):
if self.playing:
self.process.stdin.write('q')
self.playing = False
self.pause_button.text = 'Pause'
os.system('killall dbus-daemon')
def _pause(self, instance):
if self.playing:
self.process.stdin.write('p')
if instance.text == 'Play':
instance.text = 'Pause'
else:
instance.text = 'Play'
def slider_callback(self, instance, value):
self.pause_button.background_color = [1,1,1, value/100.]
self.pause_button.pos = [self.pause_button.pos[0], int(value) * 2]
def build(self):
SCREEN_WIDTH = kivy.core.window.Window.size[0]
SCREEN_HEIGHT = kivy.core.window.Window.size[1]
scatter = ScatterPlane()
layout = BoxLayout()
layout.size = [700, 100]
layout.pos = [SCREEN_WIDTH / 2 - layout.width / 2, SCREEN_HEIGHT / 2 - layout.height / 2]
play1_button = Button(size_hint=(None, None), text='play1', on_press=partial(self.play, filepath = "/home/pi/bbb_sunflower_1080p_60fps_normal.mp4"))
play2_button = Button(size_hint=(None, None), text='playC30', on_press=partial(self.play, filepath = "/home/pi/1_Drift_1920x1080_30fps_CBR20_h264.mp4"))
play3_button = Button(size_hint=(None, None), text='playV30', on_press=partial(self.play, filepath = "/home/pi/1_Drift_1920x1080_30fps_VBR20_h264.mp4"))
play4_button = Button(size_hint=(None, None), text='playV60', on_press=partial(self.play, filepath = "/home/pi/1_Drift_1920x1080_60fps_VBR20_h264.mp4"))
play5_button = Button(size_hint=(None, None), text='youtube', on_press=partial(self.play, filepath = "https://r2---sn-4pcgxovpgx-t0ae.googlevideo.com/videoplayback?signature=5BCBE579EB39CC4ED73482BDBFF363311B032956.E8D9892E97A882609B4EEC344DE5B06F35588EDB&sver=3&requiressl=yes&mt=1442933742&pl=19&dur=76.834&lmt=1389268739487200&ip=68.67.49.66&ms=au&mv=m&source=youtube&id=o-AMKFSKtNxRO0Mhewpnw9TViPcVD0zRUz4-MOPmWSDcYM&mn=sn-4pcgxovpgx-t0ae&mm=31&key=yt5&expire=1442955394&sparams=dur%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&upn=NoXU5yWQ0kU&itag=18&ratebypass=yes&fexp=9405825%2C9408710%2C9409069%2C9409207%2C9412842%2C9415365%2C9415485%2C9416023%2C9416126%2C9416729%2C9417014%2C9417707%2C9417717%2C9418153%2C9418203%2C9418391%2C9418448%2C9419801%2C9420288%2C9420348%2C9420931%2C9421013%2C9421250%2C9421254&ipbits=0&mime=video%2Fmp4&initcwndbps=8143750"))
self.pause_button = Button(size_hint=(None, None), text='Pause', on_press=self._pause)
stop_button = Button(size_hint=(None, None), text='Stop', on_press=self._stop)
slider = Slider(value = 100.)
slider.bind(value = self.slider_callback)
slider.width = 500
slider.pos = (SCREEN_WIDTH / 2 - slider.width / 2, 0)
layout.add_widget(play1_button)
layout.add_widget(play2_button)
layout.add_widget(play3_button)
layout.add_widget(play4_button)
layout.add_widget(play5_button)
layout.add_widget(self.pause_button)
layout.add_widget(stop_button)
scatter.add_widget(slider)
scatter.add_widget(layout)
return scatter
def on_stop(self):
print 'Exiting...'
self._stop(self)
if __name__ == '__main__':
videoPlayer = VideoPlayer()
try:
videoPlayer.run()
except KeyboardInterrupt:
videoPlayer.stop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment