Roku Developer Program

Join our online forum to talk to Roku developers and fellow channel creators. Ask questions, share tips with the community, and find helpful resources.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
bollywood
Visitor

help with new private channel, stream won't play

i am using the custom video player example to create a private channel. however its not playing the live video stream. all it says is "loading...13%" and stays there.

any suggestions on what am i doing wrong here?


here is the source

' ********************************************************************
' ********************************************************************
' ** Roku Custom Video Player Channel (BrightScript)
' **
' ** May 2010
' ** Copyright (c) 2010 Roku Inc. All Rights Reserved.
' ********************************************************************
' ********************************************************************

Sub RunUserInterface()
o = Setup()
o.setup()
o.paint()
o.eventloop()
End Sub

Sub Setup() As Object
this = {
port: CreateObject("roMessagePort")
progress: 0 'buffering progress
position: 0 'playback position (in seconds)
paused: false 'is the video currently paused?
fonts: CreateObject("roFontRegistry") 'global font registry
canvas: CreateObject("roImageCanvas") 'user interface
player: CreateObject("roVideoPlayer")
setup: SetupFramedCanvas
paint: PaintFramedCanvas
eventloop: EventLoop
}

'Static help text:
this.help = "Press the right or left arrow buttons on the remote control "
this.help = this.help + "to seek forward or back through the video at "
this.help = this.help + "approximately one minute intervals. Press down "
this.help = this.help + "to toggle fullscreen."

'Register available fonts:
this.fonts.Register("pkg:/fonts/caps.otf")
this.textcolor = "#406040"

'Setup image canvas:
this.canvas.SetMessagePort(this.port)
this.canvas.SetLayer(0, { Color: "#000000" })
this.canvas.Show()

'Resolution-specific settings:
mode = CreateObject("roDeviceInfo").GetDisplayMode()
if mode = "720p"
this.layout = {
full: this.canvas.GetCanvasRect()
top: { x: 0, y: 0, w:1280, h: 130 }
left: { x: 249, y: 177, w: 391, h: 291 }
right: { x: 700, y: 177, w: 350, h: 291 }
bottom: { x: 249, y: 500, w: 780, h: 300 }
}
this.background = "pkg:/images/back-hd.jpg"
this.headerfont = this.fonts.get("lmroman10 caps", 50, 50, false)
else
this.layout = {
full: this.canvas.GetCanvasRect()
top: { x: 0, y: 0, w: 720, h: 80 }
left: { x: 100, y: 100, w: 280, h: 210 }
right: { x: 400, y: 100, w: 220, h: 210 }
bottom: { x: 100, y: 340, w: 520, h: 140 }
}
this.background = "pkg:/images/back-sd.jpg"
this.headerfont = this.fonts.get("lmroman10 caps", 30, 50, false)
end if

this.player = CreateObject("roVideoPlayer")
this.player.SetMessagePort(this.port)
this.player.SetLoop(true)
this.player.SetPositionNotificationPeriod(1)
this.player.SetDestinationRect(this.layout.left)
this.player.SetContentList([{
Stream: { url: "http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
StreamFormat: "hls"
}])
this.player.Play()

return this
End Sub

Sub EventLoop()
while true
msg = wait(0, m.port)
if msg <> invalid
'If this is a startup progress status message, record progress
'and update the UI accordingly:
if msg.isStatusMessage() and msg.GetMessage() = "startup progress"
m.paused = false
progress% = msg.GetIndex() / 10
if m.progress <> progress%
m.progress = progress%
m.paint()
end if

'Playback progress (in seconds):
else if msg.isPlaybackPosition()
m.position = msg.GetIndex()
m.paint()

'If the <UP> key is pressed, jump out of this context:
else if msg.isRemoteKeyPressed()
index = msg.GetIndex()
print "Remote button pressed: " + index.tostr()
if index = 2 '<UP>
return
else if index = 3 '<DOWN> (toggle fullscreen)
if m.paint = PaintFullscreenCanvas
m.setup = SetupFramedCanvas
m.paint = PaintFramedCanvas
rect = m.layout.left
else
m.setup = SetupFullscreenCanvas
m.paint = PaintFullscreenCanvas
rect = { x:0, y:0, w:0, h:0 } 'fullscreen
m.player.SetDestinationRect(0, 0, 0, 0) 'fullscreen
end if
m.setup()
m.player.SetDestinationRect(rect)
else if index = 4 or index = 8 '<LEFT> or <REV>
m.position = m.position - 60
m.player.Seek(m.position * 1000)
else if index = 5 or index = 9 '<RIGHT> or <FWD>
m.position = m.position + 60
m.player.Seek(m.position * 1000)
else if index = 13 '<PAUSE/PLAY>
if m.paused m.player.Resume() else m.player.Pause()
end if

else if msg.isPaused()
m.paused = true
m.paint()

else if msg.isResumed()
m.paused = false
m.paint()

end if
'Output events for debug
print msg.GetType(); ","; msg.GetIndex(); ": "; msg.GetMessage()
end if
end while
End Sub

Sub SetupFullscreenCanvas()
m.canvas.AllowUpdates(false)
m.paint()
m.canvas.AllowUpdates(true)
End Sub

Sub PaintFullscreenCanvas()
list = []

if m.progress < 100
color = "#000000" 'opaque black
list.Push({
Text: "Loading..." + m.progress.tostr() + "%"
TextAttrs: { font: "huge" }
TargetRect: m.layout.full
})
else if m.paused
color = "#80000000" 'semi-transparent black
list.Push({
Text: "Paused"
TextAttrs: { font: "huge" }
TargetRect: m.layout.full
})
else
color = "#00000000" 'fully transparent
end if

m.canvas.SetLayer(0, { Color: color, CompositionMode: "Source" })
m.canvas.SetLayer(1, list)
End Sub

Sub SetupFramedCanvas()
m.canvas.AllowUpdates(false)
m.canvas.Clear()
m.canvas.SetLayer(0, [
{ 'Background:
Url: m.background
CompositionMode: "Source"
},
{ 'The title:
Text: "Live from the Nest"
TargetRect: m.layout.top
TextAttrs: { valign: "bottom", font: m.headerfont, color: m.textcolor }
},
{ 'Help text:
Text: m.help
TargetRect: m.layout.right
TextAttrs: { halign: "left", valign: "top", color: m.textcolor }
}
])
m.paint()
m.canvas.AllowUpdates(true)
End Sub

Sub PaintFramedCanvas()
list = []
if m.progress < 100 'Video is currently buffering
list.Push({
Color: "#80000000"
TargetRect: m.layout.left
})
list.Push({
Text: "Loading..." + m.progress.tostr() + "%"
TargetRect: m.layout.left
})
else 'Video is currently playing
if m.paused
list.Push({
Color: "#80000000"
TargetRect: m.layout.left
CompositionMode: "Source"
})
list.Push({
Text: "Paused"
TargetRect: m.layout.left
})
else 'not paused
list.Push({
Color: "#00000000"
TargetRect: m.layout.left
CompositionMode: "Source"
})
end if
list.Push({
Text: "Current position: " + m.position.tostr() + " seconds"
TargetRect: m.layout.bottom
TextAttrs: { halign: "left", valign: "top", color: m.textcolor }
})
end if
m.canvas.SetLayer(1, list)
End Sub
Hawk Cam
Live footage from the nest on top of Bobst Library at N.Y.U.
copy and paste the link in your browser or use keyword: hawkcam

https://owner.roku.com/add/hawkcam
0 Kudos
13 REPLIES 13
TheEndless
Channel Surfer

Re: help with new private channel, stream won't play

The highest bitrate stream in that M3U8 is 198k, which I believe is below the default minimum bandwidth. Try changing the SetContentList lines to:

this.player.SetContentList([{
Stream: { url: "http://xnytnestcamx.api.channel.livestream.com/3.0/playlist.m3u8" }
StreamFormat: "hls"
MinBandwidth: 128
}])
My Channels: http://roku.permanence.com - Twitter: @TheEndlessDev
Instant Watch Browser (NetflixIWB), Aquarium Screensaver (AQUARIUM), Clever Clocks Screensaver (CLEVERCLOCKS), iTunes Podcasts (ITPC), My Channels (MYCHANNELS)
0 Kudos
bollywood
Visitor

Re: help with new private channel, stream won't play

thanks.

just did that and its still loading, but its taking extremely long time to load. its taking 1-2 seconds for every 1 percent. any ideas?


it just finally started playing...
Hawk Cam
Live footage from the nest on top of Bobst Library at N.Y.U.
copy and paste the link in your browser or use keyword: hawkcam

https://owner.roku.com/add/hawkcam
0 Kudos
TheEndless
Channel Surfer

Re: help with new private channel, stream won't play

Lack of segments. That M3U8 only has three segments. Roku recommends at least 8. It may be taking so long because it's starving the buffer... viewtopic.php?f=34&t=39362&p=266078#p266078
My Channels: http://roku.permanence.com - Twitter: @TheEndlessDev
Instant Watch Browser (NetflixIWB), Aquarium Screensaver (AQUARIUM), Clever Clocks Screensaver (CLEVERCLOCKS), iTunes Podcasts (ITPC), My Channels (MYCHANNELS)
0 Kudos
RokuKevin
Visitor

Re: help with new private channel, stream won't play

You should set your bandwidth to 198. HLS streams that are less than 1.5 Mbps should set the bandwidth explicitly rather than setting it to 0.

--Kevin
0 Kudos
bollywood
Visitor

Re: help with new private channel, stream won't play

i set it like this,

MinBandwidth: 128


should i change this to 198?
Hawk Cam
Live footage from the nest on top of Bobst Library at N.Y.U.
copy and paste the link in your browser or use keyword: hawkcam

https://owner.roku.com/add/hawkcam
0 Kudos
RokuKevin
Visitor

Re: help with new private channel, stream won't play

No. The minbandwidth causes the player not to consider streams less than that bitrate. Leave it as is.

--Kevin
0 Kudos
bollywood
Visitor

Re: help with new private channel, stream won't play

so i dont need to change anything to 198???


now that i have played with it quite a bit, is this the recommended way to create a channel before i add this as a private channel?
Hawk Cam
Live footage from the nest on top of Bobst Library at N.Y.U.
copy and paste the link in your browser or use keyword: hawkcam

https://owner.roku.com/add/hawkcam
0 Kudos
bollywood
Visitor

Re: help with new private channel, stream won't play

I've created a private channel for the hawk cam.

https://owner.roku.com/add/hawkcam

can you please test it and provide some feedback? should i create a new thread for the private channel to let others know?
Hawk Cam
Live footage from the nest on top of Bobst Library at N.Y.U.
copy and paste the link in your browser or use keyword: hawkcam

https://owner.roku.com/add/hawkcam
0 Kudos
jbrave
Channel Surfer

Re: help with new private channel, stream won't play

so far:

took several minutes of "uplinking" before it finally showed the image. I went full screen, and about 20 seconds later, back to "uplinking", but the percentage is still at zero since I started writing this email. Well, it just flashed back the the image and then back to 0% again.

I guessing the bandwidth is pretty low ?

this is on a Radio Shack flavored roku XD running 3.0 beta and in SD 4:3 mode.

- Joel
Screenshades: The first Screensaver for Roku2!
Musiclouds: The best free internet music, on your Roku!
Ouroborialis: Psychedelic Screensaver for Roku!
0 Kudos