' ********************************************************************
' ** Sample PlayVideo App
' ** Copyright (c) 2009 Roku Inc. All Rights Reserved.
' ********************************************************************
Sub Main(args As Dynamic)
'initialize theme attributes like titles, logos and overhang color
initTheme()
if type(args) = "roAssociativeArray" and type(args.url) = "roString" then
displayVideo(args)
end if
print "Type args = "; type(args)
print "Type args.url = "; type(args.url)
'has to live for the duration of the whole app to prevent flashing
'back to the roku home screen.
screenFacade = CreateObject("roPosterScreen")
screenFacade.show()
itemMpeg4 = { ContentType:"episode"
SDPosterUrl:"file://pkg:/images/DanGilbert.jpg"
HDPosterUrl:"file://pkg:/images/DanGilbert.jpg"
IsHD:False
HDBranded:False
ShortDescriptionLine1:"Dan Gilbert asks, Why are we happy?"
ShortDescriptionLine2:""
Description:"Harvard psychologist Dan Gilbert says our beliefs about what will make us happy are often wrong -- a premise he supports with intriguing research, and explains in his accessible and unexpectedly funny book, Stumbling on Happiness."
Rating:"NR"
StarRating:"80"
Length:1280
Categories:["Technology","Talk"]
Title:"Dan Gilbert asks, Why are we happy?"
}
itemVenter = { ContentType:"episode"
SDPosterUrl:"file://pkg:/images/CraigVenter-2008.jpg"
HDPosterUrl:"file://pkg:/images/CraigVenter-2008.jpg"
IsHD:False
HDBranded:False
ShortDescriptionLine1:"Can we create new life out of our digital universe?"
ShortDescriptionLine2:""
Description:"He walks the TED2008 audience through his latest research into fourth-generation fuels -- biologically created fuels with CO2 as their feedstock. His talk covers the details of creating brand-new chromosomes using digital technology, the reasons why we would want to do this, and the bioethics of synthetic life. A fascinating Q&A with TED's Chris Anderson follows."
Rating:"NR"
StarRating:"80"
Length:1972
Categories:["Technology","Talk"]
Title:"Craig Venter asks, Can we create new life out of our digital universe?"
}
itemMissionTV = { ContentType:"episode"
SDPosterUrl:"file://pkg:/images/MainMenu.png"
HDPosterUrl:"file://pkg:/images/MainMenu.png"
IsHD:true
HDBranded:true
ShortDescriptionLine1:"Watch mission videos anytime!"
ShortDescriptionLine2:""
Description:"Mission TV is a 24/7 channel devoted to the Great Commission of Matthew 28:17-20. Watch front line mission video adventures and see interviews of missionaries who have been there. Most of all, get encouraged to be a part of hastening the coming of Christ by giving the Gospel to the world."
Rating:"NR"
StarRating:"80"
Length:600
Categories:["Gospel","Christian"]
Title:"Watch mission videos anytime!"
}
'showSpringboardScreen(itemVenter)
'showSpringboardScreen(itemMpeg4) 'uncomment this line and comment out the next to see the old mpeg4 example
showSpringboardScreen(itemMissionTV) 'uncomment this line to see the BigBuckBunny example
'exit the app gently so that the screen doesn't flash to black
screenFacade.showMessage("")
sleep(25)
End Sub
'*************************************************************
'** Set the configurable theme attributes for the application
'**
'** Configure the custom overhang and Logo attributes
'*************************************************************
Sub initTheme()
app = CreateObject("roAppManager")
theme = CreateObject("roAssociativeArray")
theme.OverhangOffsetSD_X = "72"
theme.OverhangOffsetSD_Y = "31"
theme.OverhangSliceSD = "pkg:/images/Overhang_Background_SD.png"
theme.OverhangLogoSD = "pkg:/images/Overhang_Logo_SD.png"
theme.OverhangOffsetHD_X = "125"
theme.OverhangOffsetHD_Y = "35"
theme.OverhangSliceHD = "pkg:/images/Overhang_Background_HD.png"
theme.OverhangLogoHD = "pkg:/images/Overhang_Logo_HD.png"
theme.BackgroundColor = "#000000"
app.SetTheme(theme)
End Sub
'*************************************************************
'** showSpringboardScreen()
'*************************************************************
Function showSpringboardScreen(item as object) As Boolean
port = CreateObject("roMessagePort")
screen = CreateObject("roSpringboardScreen")
print "showSpringboardScreen"
screen.SetMessagePort(port)
screen.AllowUpdates(false)
if item <> invalid and type(item) = "roAssociativeArray"
screen.SetContent(item)
endif
screen.SetDescriptionStyle("generic") 'audio, movie, video, generic
' generic+episode=4x3,
screen.ClearButtons()
screen.AddButton(1,"Play Live Stream")
screen.AddButton(2,"Play On Demand Videos")
screen.SetStaticRatingEnabled(false)
screen.AllowUpdates(true)
screen.Show()
downKey=3
selectKey=6
while true
msg = wait(0, screen.GetMessagePort())
if type(msg) = "roSpringboardScreenEvent"
if msg.isScreenClosed()
print "Screen closed"
exit while
else if msg.isButtonPressed()
print "Button pressed: "; msg.GetIndex(); " " msg.GetData()
if msg.GetIndex() = 1
displayVideo("")
else if msg.GetIndex() = 2
InitContentList("1")
return true
endif
else
print "Unknown event: "; msg.GetType(); " msg: "; msg.GetMessage()
endif
else
print "wrong type.... type=";msg.GetType(); " msg: "; msg.GetMessage()
endif
end while
return true
End Function
'*************************************************************
'** displayVideo()
'*************************************************************
Function displayVideo(args As Dynamic)
print "Displaying video: "
p = CreateObject("roMessagePort")
video = CreateObject("roVideoScreen")
video.setMessagePort(p)
'bitrates = [0] ' 0 = no dots, adaptive bitrate
'bitrates = [348] ' <200 Kbps = 1 dot
'bitrates = [664] ' <600 Kbps = 2 dots
'bitrates = [996] ' <1.1Mbps = 3 dots
'bitrates = [2048] ' >=1.6Mbps = 4 dots
'bitrates = [0]
'Low Bandwidth'
urls = ["http://[realhost-low]/playlist.m3u8"]
bitrates = [348]
qualities = ["SD"]
StreamFormat = "HLS"
title = "Loading Stream... Auto-Bandwidth Low"
srt = ""
'Medium Bandwidth'
urls = ["http://[realhost-medium]/playlist.m3u8"]
bitrates = [664]
qualities = ["SD"]
StreamFormat = "HLS"
title = "Loading Stream... Auto-Bandwidth Medium"
srt = ""
'High Bandwidth'
urls = ["http://[realhost-high]/playlist.m3u8"]
bitrates = [2048]
qualities = ["SD"]
StreamFormat = "HLS"
title = "Loading Stream... Auto-Bandwidth High"
srt = ""
'Ted Talks'
'urls = ["[code][/code]"]
'qualities = ["SD"]
'StreamFormat = "mp4"
'title = "Loading Stream..."
' Apple's HLS test stream
'urls = ["http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]
'qualities = ["SD"]
'streamformat = "hls"
'title = "Apple BipBop Test Stream"
if type(args) = "roAssociativeArray"
if type(args.url) = "roString" and args.url <> "" then
urls[0] = args.url
end if
if type(args.StreamFormat) = "roString" and args.StreamFormat <> "" then
StreamFormat = args.StreamFormat
end if
if type(args.title) = "roString" and args.title <> "" then
title = args.title
else
title = ""
end if
if type(args.srt) = "roString" and args.srt <> "" then
srt = args.StreamFormat
else
srt = ""
end if
end if
videoclip = CreateObject("roAssociativeArray")
videoclip.StreamBitrates = bitrates
videoclip.StreamUrls = urls
videoclip.switchingStrategy = "full-adaptation"
videoclip.StreamQualities = qualities
videoclip.StreamFormat = StreamFormat
videoclip.Title = title
videoclip.Live = True
'print "srt = ";srt
if srt <> invalid and srt <> "" then
videoclip.SubtitleUrl = srt
end if
video.SetContent(videoclip)
video.show()
lastSavedPos = 0
statusInterval = 10 'position must change by more than this number of seconds before saving
while true
msg = wait(0, video.GetMessagePort())
if type(msg) = "roVideoScreenEvent"
if msg.isScreenClosed() then 'ScreenClosed event
print "Closing video screen"
exit while
else if msg.isPlaybackPosition() then
nowpos = msg.GetIndex()
if nowpos > 10000
end if
if nowpos > 0
if abs(nowpos - lastSavedPos) > statusInterval
lastSavedPos = nowpos
end if
end if
else if msg.isRequestFailed()
print "play failed: "; msg.GetMessage()
else
print "Unknown event: "; msg.GetType(); " msg: "; msg.GetMessage()
endif
end if
end while
End Function
Current Function:
012: Function preShowPosterScreen(breadA=invalid, breadB=invalid) As Object
013:
014: if validateParam(breadA, "roString", "preShowPosterScreen", true) = false return -1
015: if validateParam(breadB, "roString", "preShowPosterScreen", true) = false return -1
016:
017: port=CreateObject("roMessagePort")
018: screen = CreateObject("roPosterScreen")
019: screen.SetMessagePort(port)
020: if breadA<>invalid and breadB<>invalid then
021: screen.SetBreadcrumbText(breadA, breadB)
022: end if
023:
024: screen.SetListStyle("arced-landscape")
025: return screen
026:
027: End Function
Function Call Operator ( ) attempted on non-function. (runtime error &he0) in ...g:/source/appPosterScreen.brs(14)
014: if validateParam(breadA, "roString", "preShowPosterScreen", true) = false return -1
Backtrace:
Function preshowposterscreen(breada As ) As
file/line: /tmp/plugin/LABAAAswQzn8...g:/source/appPosterScreen.brs(14)
Function showspringboardscreen(item As <uninitialized>) As Boolean
file/line: /tmp/plugin/LABAAAswQzn8/pkg:/source/appMain.brs(141)
Function main(args As ) As
file/line: /tmp/plugin/LABAAAswQzn8/pkg:/source/appMain.brs(68)
Local Variables:
breada &h0100 String (VT_STR_CONST) val:
breadb &h0080 Invalid val:invalid
global &h0020 rotINTERFACE:ifGlobal
m &h0010 bsc:roAssociativeArray, refcnt=4
port &h0000 <uninitialized> val:Uninitialized
screen &h0000 <uninitialized> val:Uninitialized
validateparam &h0000 <uninitialized> val:Uninitialized
Function Call Operator ( ) attempted on non-function. (runtime error &he0) in ...g:/source/appPosterScreen.brs(14)
014: if validateParam(breadA, "roString", "preShowPosterScreen", true) = false return -1
validateparam &h0000 <uninitialized> val:Uninitialized
invalid parameter of type roInvalid for roString in function preShowPosterScreen
Function preShowPosterScreen(breadA=invalid, breadB=invalid) As Object
if validateParam(breadA, "roString", "preShowPosterScreen", true) = false return -1
if validateParam(breadB, "roString", "preShowPosterScreen", true) = false return -1
port=CreateObject("roMessagePort")
screen = CreateObject("roPosterScreen")
screen.SetMessagePort(port)
if breadA<>invalid and breadB<>invalid then
screen.SetBreadcrumbText(breadA, breadB)
end if
screen.SetListStyle("arced-landscape")
return screen
End Function
invalid parameter of type roInvalid for roString in function preShowPosterScreen
We’re upgrading Roku Community to bring you a faster, more mobile-friendly experience. You may notice limited functionality or read-only access during this time. Read more here.
Planned Downtime:
Community will be unavailable for up to 24–48 hours during the upgrade window during the week of May 19th and you may notice reduced functionality.
In the meantime, for additional assistance, visit our Support Site.
We're sorry for this disruption — we’re excited to share what’s next!
For support, visit support.roku.com.