Roku Developer Program

Developers and content creators—a complete solution for growing an audience directly.
cancel
Showing results for 
Search instead for 
Did you mean: 
hugetv
Level 7

I can do as a guide

this epg for videoplay

Our system http://www.rokumanager.com
0 Kudos
6 Replies
hugetv
Level 7

Re: I can do as a guide

someone could help make this possible
Our system http://www.rokumanager.com
0 Kudos
Roku Employee
Roku Employee

Re: I can do as a guide

0 Kudos
hugetv
Level 7

Re: I can do as a guide

ok and I managed to do it but I have a problem with time bara


'******************************************
'* paint.brs
'* display the screen and dynamic overlay
'******************************************

Sub PaintFullscreenCanvas()
splash = []
canvasItems = []
navItems = []

'Clear previous contents
m.canvas.ClearLayer(0)
m.canvas.ClearLayer(1)
m.canvas.ClearLayer(2)
m.canvas.ClearLayer(3)

' display a custom loading image
if m.progress < 100
splash.Push({
url: "pkg:/images/splash.png"
TargetRect: m.textRect
})
endif

if m.overlay
' Display overlay with a list of canvasItems
' Get the canvas size to work with
canvasRect = m.targetRect

' Set the starting Y value, top of the overlay
yVal = canvasRect.h - 150

' Get the overall width
wVal = canvasRect.w

' Set the offsets for the controls
controlxoff = int( canvasRect.w / 2 ) - 115
controlyoff = yVal+200

' Set the width of the time bars
barwidth = int( wVal / 6 )

' Get values from the json feed for the selected title, this should be loaded in a sub
mytitle = m.feedData.Videos[m.playing].title
mydesc = m.feedData.Videos[m.playing].desc
mytag = m.feedData.Videos[m.playing].tag
myepisode = m.feedData.Videos[m.playing].episode
myepisode2 = m.feedData.Videos[m.playing].episode2
myimage = m.feedData.Videos[m.playing].image

' Calculate horizontal offset when there is a highlight tag
font_registry = CreateObject("roFontRegistry")
font_regular = font_registry.getdefaultfont()

' Need to factor the length to get a good fit - research font behavior
tagOffset = 110 + int( 2/3 * font_regular.GetOneLineWidth( mytag, 999 ) )

' Calculate horizontal offset for Station, symbols
stationoff = tagOffset + int( 2/3 * font_regular.GetOneLineWidth( myepisode, 999 ) ) - 30

symbol_1off = stationoff + 125
symbol_2off = stationoff + 225
symbol_3off = stationoff + 300

' normally the times would come from the feed or device. hardcode for demo:
starttime = "11:00 AM"
endtime = "1:00 PM"

' Calculatation for the time display and for the orange bar
print m.position " is the current position in seconds"
' time bars are gray by default
bar2color = "#FF999999"
bar3color = "#FF999999"

' the percent of the bar shown orange is m.position divided by half hour (1800 sec)
' multiply by barwidth to get the width of the orange portion
' need to add 1 since 0 makes it unlimited width
worange = 1 + int( barwidth * m.position / 1800 )

print "width of orange on the second time bar is " str(worange)

' Format the current time display
mymin = int ( m.position / 10 )
'mysec = m.position mod 60
if mymin < 30 then
' Hack to set current time display
mytime = "11:" + str(30 + mymin).trim()

' horizontal starting point of highlighted time bar
hloffset = 195+barwidth

' set the placement offset for the current time
offsettime = 217 + worange + int ( barwidth * 2 / 3 )

else
' hack for demo - ultimately all bars would be dynamic
' 2nd bar full orange
bar2color = "#FFFFA500"

' set the placement offset for the current time
offsettime = 217 + worange + int ( barwidth * 2 / 3 )

if mymin > 59
' 3rd bar full orange
bar3color = "#FFFFA500"
' horizontal starting point of highlighted time bar
hloffset = 195+barwidth*3
' width of highlight
worange = worange - (2*barwidth)
else
' horizontal starting point of highlighted time bar
hloffset = 195+barwidth*2
' width of highlight
worange = worange - barwidth
endif

if mymin > 89
' went past the end, go to beginning?
' hack the display for now
mymin = 30
endif

if mymin > 39
mytime = "12:"
else
mytime = "12:0"
endif
mytime = mytime + str(mymin - 30).trim()
endif

print "current time to display " + mytime

canvasItems = [
{
color:"#AA000000"
TargetRect:{x:0,y:yVal,w:wVal,h:350}
},
{
Text:mytitle
TextAttrs:{Color:"#FFFFFFFF", Font:"Medium",
HAlign:"Left", VAlign:"VCenter",
Direction:"LeftToRight"}
TargetRect:{x:40,y:yVal-15,w:500,h:60}
},
{
url: myimage
TargetRect:{x:40,y:yVal+35,w:80,h:80}
},
{
Text:"LIVE"
TextAttrs:{Color:"#00FF18", Font:"Mini",
HAlign:"Left", VAlign:"VCenter",
Direction:"LeftToRight"}
TargetRect:{x:140,y:yVal+30,w:50,h:40}
},
{
Text:myepisode
TextAttrs:{Color:"#FFFFFFFF", Font:"Small",
HAlign:"Left", VAlign:"VCenter",
Direction:"LeftToRight"}
TargetRect:{x:190,y:yVal+30,w:550,h:40}
},
{
Text:"NEXT"
TextAttrs:{Color:"#0000FF", Font:"Mini",
HAlign:"Left", VAlign:"VCenter",
Direction:"LeftToRight"}
TargetRect:{x:140,y:yVal+85,w:50,h:40}
},
{
Text:myepisode2
TextAttrs:{Color:"#FFFFFFFF", Font:"Small",
HAlign:"Left", VAlign:"VCenter",
Direction:"LeftToRight"}
TargetRect:{x:190,y:yVal+85,w:550,h:40}
},
{
Text:starttime
TextAttrs:{Color:"#FFFFFFFF", Font:"Mini",
HAlign:"Left", VAlign:"VCenter",
Direction:"LeftToRight"}
TargetRect:{x:140,y:yVal+62,w:100,h:20}
},
{
color:"#FFFFA500"
TargetRect: {x:140, y:yVal+83, w:barwidth-3, h:4}
},
{
color:bar2color
TargetRect: {x:140+barwidth, y:yVal+83, w:barwidth-3, h:4}
},
{
color:bar3color
TargetRect: {x:140+barwidth*2, y:yVal+83, w:barwidth-3, h:4}
},
{
color:"#FF999999"
TargetRect: {x:140+barwidth*3, y:yVal+83, w:barwidth-3, h:4}
},
{
Text:endtime
TextAttrs:{Color:"#FFFFFFFF", Font:"Mini",
HAlign:"Left", VAlign:"VCenter",
Direction:"LeftToRight"}
TargetRect:{x:200+barwidth*3,y:yVal+62,w:100,h:20}
},
{
color:"#FFFFA500"
TargetRect: {x:hloffset, y:yVal+83, w:worange, h:4}
},
{
color:"#EFFFFFFF"
TargetRect: {x:hloffset+worange, y:yVal+83, w:2, h:4}
},
{
Text:"TIME:"+mytime
TextAttrs:{Color:"#FFFFFFFF", Font:"Mini",
HAlign:"HCenter", VAlign:"VCenter",
Direction:"LeftToRight"}
TargetRect:{x:200+barwidth*4,y:yVal+15,w:100,h:12}
}
]
else
' No overlay
canvasItems = []
endif

m.canvas.SetLayer(0, { Color: "#00000000", CompositionMode: "Source" })
if (splash.Count() > 0)
m.canvas.SetLayer(1, splash)
m.canvas.SetLayer(2, canvasItems)
else
m.canvas.SetLayer(1, canvasItems)
endif

canvasItems.Clear()
splash.Clear()
End Sub


http://i.imgur.com/hXLe9QB.png
Our system http://www.rokumanager.com
0 Kudos
armagedon79
Level 7

Re: I can do as a guide

where can get this source code ?
0 Kudos
hugetv
Level 7

Re: I can do as a guide

help pliss
Our system http://www.rokumanager.com
0 Kudos
hugetv
Level 7

Re: I can do as a guide

It helps to implement my code

VideoPlayer.brs

' Plays the video file
Sub playVideoMovies(episode As Object)

port = CreateObject("roMessagePort")
screen = CreateObject("roVideoScreen")
screen.SetMessagePort(port)

vid_to_play = episode

vid_to_play = {
Stream: { url: episode.StreamUrl }
StreamFormat: episode.StreamFormat
Title: episode.Title
'SubtitleConfig: episode.SubtitleUrl
SubtitleUrl: episode.SubtitleUrl
SwitchingStrategy: "full-adaptation"
Live: episode.Live
PlayStart: episode.PlayStart
}

screen.SetLoop(true)
screen.SetPositionNotificationPeriod(1)
screen.AddHeader("User-Agent", "")
screen.SetContent(vid_to_play)
doCerts(screen)
screen.Show()

timer=createobject("rotimespan")
timer.mark()
' 20 seconds = 20000
refreshTime = 10000
currentTime = 0

while true
msg = wait(10, port)

currentTime = currentTime + timer.totalmilliseconds()
'print currentTime
timer.mark()
if currentTime > refreshTime then
currentTime = 0
'print "refresh"
AuthUser()
AuthLogin()
end if

if type(msg) = "roVideoScreenEvent" then
print "showHomeScreen | msg = "; msg.getMessage() " | index = "; msg.GetIndex()
if msg.isScreenClosed()
print "Screen closed"
exit while
elseif msg.isRequestFailed()
print "Video request failure: "; msg.GetIndex(); " " msg.GetData()
elseif msg.isStatusMessage()
print "Video status: "; msg.GetIndex(); " " msg.GetData()
elseif msg.isButtonPressed()
print "Button pressed: "; msg.GetIndex(); " " msg.GetData()
elseif msg.isPlaybackPosition() then
'print "Play position: "; msg.GetIndex(); " " msg.GetData()
nowpos = msg.GetIndex()
RegWrite(episode.ContentId, nowpos.toStr())
elseif msg.isFullResult() then
RegWrite(episode.ContentId, "0")
exit while
elseif msg.isPartialResult()
print "Video playback was interrupted: "; msg.GetType()
else
print "Unexpected event type: "; msg.GetType()
end if
else
'print "Unexpected message class: "; type(msg)
end if
end while

End Sub
Our system http://www.rokumanager.com
0 Kudos