I'm developing a custom Roku channel and I need to use a livestream.com video stream from the following live stream event:
http://livestream.com/accounts/11222132/events/3665575
Using their json service I've been able to obtain an m3u8 stream. The stream works fine on iOS, Android, and Fire OS but I can't get it to work on Roku.
This code gets and attempts to play my stream:
Function displayVideo()
print "Displaying video: "
p = CreateObject("roMessagePort")
video = CreateObject("roVideoScreen")
video.setMessagePort(p)
'bitrates = [0] ' 0 = no dots, adaptive bitrate
'bitrates = [348] ' <500 Kbps = 1 dot
'bitrates = [664] ' <800 Kbps = 2 dots
'bitrates = [996] ' <1.1Mbps = 3 dots
'bitrates = [2048] ' >=1.1Mbps = 4 dots
bitrates = [0]
request = CreateObject("roUrlTransfer")
request.SetUrl("http://livestream.com/api/accounts/11222132/events/3665575/viewing_info")
jsonString = request.GetToString()
myJson = ParseJSON(jsonString)
theurl = myJson.streamInfo.m3u8_url
urls = [theurl]
print "the json url is:"
print urls
qualities = ["SD"]
StreamFormat = "hls"
title = "COACB TV 39"
srt=""
videoclip = CreateObject("roAssociativeArray")
videoclip.StreamBitrates = bitrates
videoclip.StreamUrls = urls
videoclip.StreamQualities = qualities
videoclip.StreamFormat = streamformat
videoclip.Title = title
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
in my console I get the following pertinent messages:
Displaying video:
the json url is:
http://api.new.livestream.com/accounts/11222132/events/3665575/broadcasts/92495453.m3u8?dw=100&hdnea=st=1436386598~exp=1436387498~acl=/i/11222132_3665575_bee34040_1@123585/*~hmac=dfacbbb090cc8df9435397d7c38d134be418756b3a00620297948eea35bedae7
srt =
Unknown event: 11 msg: Unspecified or invalid track path/url.
play failed:
Closing video screen
The error I'm getting indicates that the url is invalid and in fact if I give it a url value of "nothing honey", it gives me the same error. So if the url I am getting from this json is wrong.. then how is it wrong? It works on my other devices...