from urllib2 import Request, URLError, urlopen as urlopen2
from httplib import HTTPConnection, CannotSendRequest, BadStatusLine, HTTPException
+from Screens.Screen import Screen
+from Screens.ChoiceBox import ChoiceBox
+from Screens.MessageBox import MessageBox
+from Screens.DefaultWizard import DefaultWizard
+from Screens.InfoBarGenerics import InfoBarNotifications
+
from Components.Button import Button
from Components.Label import Label
-from Components.Pixmap import Pixmap
+from Components.Pixmap import Pixmap, MovingPixmap
from Components.Language import language
from Components.Sources.List import List
from Components.ConfigList import ConfigListScreen
from Components.ServiceEventTracker import ServiceEventTracker
from Components.config import config, ConfigSelection, getConfigListEntry, ConfigSlider
-from Screens.Screen import Screen
-from Screens.ChoiceBox import ChoiceBox
-from Screens.MessageBox import MessageBox
-from Screens.DefaultWizard import DefaultWizard
-from Screens.InfoBarGenerics import InfoBarNotifications
+from Tools.Directories import resolveFilename, SCOPE_PLUGINS
+from Tools.LoadPixmap import LoadPixmap
-from enigma import eTimer, eServiceReference, iPlayableService, fbClass, eRCInput, eConsoleAppContainer
+from enigma import eTimer, eServiceReference, iPlayableService, fbClass, eRCInput, eConsoleAppContainer, getDesktop, ePicLoad
HTTPConnection.debuglevel = 1
return lock
class VuPlayer(Screen, InfoBarNotifications):
+ size = getDesktop(0).size()
+ wb_bgr = resolveFilename(SCOPE_PLUGINS, "Extensions/WebBrowser/mp_wb_background.png")
+ wb_btn = resolveFilename(SCOPE_PLUGINS, "Extensions/WebBrowser/mp_wb_buttons.png")
+ position_params = size.width() > 750 and (620, wb_bgr, wb_btn) or (480, wb_bgr, wb_btn)
skin = """
- <screen name="VuPlayer" flags="wfNoBorder" position="center,620" size="455,53" title="VuPlayer" backgroundColor="transparent">
- <ePixmap pixmap="Vu_HD/mp_wb_background.png" position="0,0" zPosition="-1" size="455,53" />
- <ePixmap pixmap="Vu_HD/icons/mp_wb_buttons.png" position="40,23" size="30,13" alphatest="on" />
+ <screen name="VuPlayer" flags="wfNoBorder" position="center,%d" size="455,53" title="VuPlayer" backgroundColor="transparent">
+ <ePixmap pixmap="%s" position="0,0" zPosition="-1" size="455,53" />
+ <ePixmap pixmap="%s" position="40,23" size="30,13" alphatest="on" />
<widget source="session.CurrentService" render="PositionGauge" position="80,25" size="220,10" zPosition="2" pointer="skin_default/position_pointer.png:540,0" transparent="1" foregroundColor="#20224f">
<convert type="ServicePosition">Gauge</convert>
<convert type="ServicePosition">Length</convert>
</widget>
</screen>
- """
+ """ % position_params
+
PLAYER_IDLE = 0
PLAYER_PLAYING = 1
PLAYER_PAUSED = 2
self.onClose.append(self.__onClose)
self.doPlay()
+
def __onClose(self):
self.session.nav.stopService()
self.hidetimer.start(5000)
def doExit(self):
+ message = "Stop playing this movie?"
list = ((_("Yes"), "y"), (_("No, but play video again"), "n"),)
- self.session.openWithCallback(self.cbDoExit, ChoiceBox, title=_("Stop playing this movie?"), list = list)
+ self.session.openWithCallback(self.cbDoExit, ChoiceBox, title=_(message), list = list)
def cbDoExit(self, answer):
answer = answer and answer[1]
}
class VuPlayerLauncher:
+ QUALITY_CODE = {
+ '5': 'FLV 224p'
+ ,'6': 'FLV 270p'
+ ,'34':'FLV 360p'
+ ,'35':'FLV 480p'
+ ,'18':'MP4 360p'
+ ,'22':'MP4 720p'
+ ,'37':'MP4 1080p'
+ ,'38':'MP4 2304p'
+ ,'83':'MP4-3D 240p'
+ ,'82':'MP4-3D 360p'
+ ,'85':'MP4-3D 520p'
+ ,'84':'MP4-3D 720p'
+ ,'43':'WebM 360p'
+ ,'44':'WebM 480p'
+ ,'45':'WebM 720p'
+ ,'46':'WebM 1080p'
+ ,'100':'WebM-3D 360p'
+ ,'101':'WebM-3D 480p'
+ ,'102':'WebM-3D 720p'
+ ,'13':'3GP 0.5'
+ ,'17':'3GP 2.0'
+ }
def getVideoUrl(self, video_id):
video_url = None
else:
tmp_fmtUrlDATA = videoinfo['fmt_url_map'][0].split(',')
for fmtstring in tmp_fmtUrlDATA:
+ num_fmtid = 0
if videoinfo.has_key('url_encoded_fmt_stream_map'):
(fmturl, fmtid) = fmtstring.split('&itag=')
+ try:
+ num_fmtid = int(fmtid)
+ except:
+ try:
+ num_fmtid = int(fmtid[:fmtid.find(',')])
+ except: pass
+ pass
+
if fmturl.find("url=") !=-1:
fmturl = fmturl.replace("url=","")
else:
(fmtid,fmturl) = fmtstring.split('|')
if VIDEO_FMT_PRIORITY_MAP.has_key(fmtid):
video_fmt_map[VIDEO_FMT_PRIORITY_MAP[fmtid]] = { 'fmtid': fmtid, 'fmturl': unquote_plus(fmturl) }
- fmt_infomap[int(fmtid)] = unquote_plus(fmturl)
- print "got",sorted(fmt_infomap.iterkeys())
- if video_fmt_map and len(video_fmt_map):
- video_url = video_fmt_map[sorted(video_fmt_map.iterkeys())[0]]['fmturl'].split(';')[0]
- #print "found best available video format:",video_fmt_map[sorted(video_fmt_map.iterkeys())[0]]['fmtid']
- #print "found best available video url:",video_url
- return video_url
+ if num_fmtid:
+ fmt_infomap[num_fmtid] = unquote_plus(fmturl)
+ print "fmtinfomap :",sorted(fmt_infomap.iterkeys())
+
+ video_url_list = []
+ if video_fmt_map:
+ idx = 0
+ sorted_fmt_keys = sorted(video_fmt_map.iterkeys())
+ for x in video_fmt_map:
+ try:
+ videofmt = video_fmt_map[sorted_fmt_keys[idx]]
+ video_url = videofmt['fmturl'].split(';')[0]
+ quality_str = self.qCode2String(videofmt['fmtid'])
+ #print "detected video : quality [%s], url [%s]" % (quality_str, video_url)
+ if video_url and quality_str:
+ video_url_list.append((quality_str, video_url))
+ print "added quality [%s], url [%s]" % (quality_str, video_url)
+ except Exception, msg: print "Error >>", msg
+ idx = idx + 1
+ return video_url_list
+
+ def qCode2String(self, qcode):
+ qstr = None
+ try:
+ qstr = self.QUALITY_CODE[qcode]
+ except: pass
+ #print "quality : code[%s], str[%s]" % (qcode, qstr)
+ return qstr
def run(self, tubeid, session, service):
+ self.session = session
+ self.service = service
try:
- myurl = self.getVideoUrl(tubeid)
- print "Playing URL", myurl
- if myurl is None:
+ self.url_list = self.getVideoUrl(tubeid)
+ if self.url_list is None or len(self.url_list) == 0:
session.open(MessageBox, _("Sorry, video is not available!"), MessageBox.TYPE_INFO)
+ wb_unlock()
return
- myreference = eServiceReference(4097, 0, myurl)
- session.open(VuPlayer, myreference, service)
+ titlemsg = "Please, choice video quality.\nFor smooth playback depends on network conditions."
+ self.session.openWithCallback(self.cbSelectedQuality, ChoiceBox, title=_(titlemsg), list = self.url_list)
+ except Exception, msg:
+ wb_unlock()
+ print "Error >>", msg
+
+ def cbSelectedQuality(self, choice):
+ try:
+ print "selected [%s] : [%s]" % (choice[0], choice[1])
+ myreference = eServiceReference(4097, 0, choice[1])
+ self.session.open(VuPlayer, myreference, self.service)
except Exception, msg:
wb_unlock()
print "Error >>", msg
tmp = data.split("?")
print tmp # ['http://www.youtube.com/watch', 'v=BpThu778qB4&feature=related']
service = self.session.nav.getCurrentlyPlayingServiceReference()
- if len(tmp) == 2 and tmp[0] == "http://www.youtube.com/watch":
+ if len(tmp) and tmp[0] == "http://www.youtube.com/watch":
tmp = tmp[1].split("&")
print tmp # ['v=BpThu778qB4', 'feature=related']
- if len(tmp) == 2:
+ if len(tmp):
tmp = tmp[0].split("=")
print tmp # ['v', 'BpThu778qB4']
if len(tmp) == 2 and tmp[0] == "v":
class BrowserLauncher(ConfigListScreen, Screen):
skin= """
- <screen name="BrowserLauncher" position="center,center" size="309,498" title="Web Browser">
- <ePixmap pixmap="Vu_HD/buttons/red.png" position="4,0" size="40,40" alphatest="on" />
- <ePixmap pixmap="Vu_HD/buttons/green.png" position="154,0" size="40,40" alphatest="on" />
+ <screen position="center,center" size="623,300" title="Web Browser">
+ <ePixmap pixmap="skin_default/buttons/red.png" position="10,0" size="140,40" alphatest="on" />
+ <ePixmap pixmap="skin_default/buttons/green.png" position="158,0" size="140,40" alphatest="on" />
- <widget source="key_red" render="Label" position="30,0" zPosition="1" size="125,30" font="Regular;20" halign="center" valign="center" transparent="1" />
- <widget source="key_green" render="Label" position="180,0" zPosition="1" size="125,30" font="Regular;20" halign="center" valign="center" transparent="1" />
+ <widget source="key_red" render="Label" position="10,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
+ <widget source="key_green" render="Label" position="158,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
<widget name="config" position="0,50" size="309,100" scrollbarMode="showOnDemand" />
- <ePixmap pixmap="Vu_HD/rc_wb_desc.png" position="0,150" size="309,296" alphatest="on" />
- <widget name="info" position="0,455" size="309,50" font="Regular;18" halign="center" foregroundColor="blue" transparent="1" />
+ <ePixmap pixmap="rc_wb_desc.png" position="312,5" size="309,296" alphatest="on" />
+ <widget name="info" position="0,180" size="309,50" font="Regular;18" halign="center" foregroundColor="#a08500" transparent="1" />
</screen>
"""
def __init__(self, session):
Screen.__init__(self, session)
+
+
self.session = session
self.list = []
ConfigListScreen.__init__(self, self.list)