我试图加入igmp直播,并在roku盒子中播放。但这并没有奏效。是不是我们不能加入Roku盒子中的多播流?如果可以通过HLS进行,那么解决方案是什么?我在github的链接中尝试了引用:https://github.com/thetrime/trimeplay/blob/master/source/trimeplay.brs请参考我使用的另一个代码作为参考:
function SetupJoin()
ssdpAddress = "239.60.60.7:6607"
ssdpPort = 6607
timeout = 300 * 60 * 1000
groupAddr = CreateObject("roSocketAddress")
groupAddr.setAddress(ssdpAddress)
groupAddr.setPort(ssdpPort)
listenAddr = CreateObject("roSocketAddress")
listenAddr.setPort(ssdpPort)
listenAddr.setAddress("0.0.0.0")
listen = CreateObject("roDatagramSocket")
listen.setReuseAddr(true)
listen.setAddress(listenAddr)
result = listen.joinGroup(groupAddr)
listen.setMessagePort(canvas.GetMessagePort())
listen.notifyReadable(true)
numResponses= Wait_SSDP(listen, timeout)
? "Result : " result
? "SSDP Listen got"; numResponses; " responses"
end function
function Wait_SSDP(socket as Object, timeout as Integer) as Integer
numResponses = 0
elapsed = CreateObject("roTimespan")
remaining = timeout - elapsed.totalMilliseconds()
while remaining > 0
msg = wait(remaining, socket.getMessagePort())
if type(msg)="roSocketEvent"
if socket.isReadable()
results = socket.receiveStr(255)
print "SSDP Listen gets from "; socket.getReceivedFromAddress().getAddress(); ":"
print results
numResponses = numResponses + 1
end if
else
exit while 'enter code here
end if
remaining = timeout - elapsed.totalMilliseconds()
end while
return numResponses
end function
我不会说你试图做的事情是完全不可能的,但这是不切实际的。
你必须做这样的事情:
使用roStreamSockets收集UDP数据,并将其作为h.264视频文件(可能是HLS块)写入tmp://,然后通过您也在动态写入的.m3u8文件将视频播放组件指向它。这必须在Brightscript中完成。我不确定Brightscript是否足够快。我并不是说这是不可能做到的,但Roku并没有原生播放多播或其他UDP视频流格式。
唯一官方支持的直播视频格式是HLS和Microsoft Smooth。