Minimum Roku Video Channel

This is a minimum Roku channel that shows up on Roku TV home screen and plays HLS video.

Screen shot:

Folder structure:

main.brs is the only source file, in BrightScript language.
two .png files. one as home screen tile, one as spalash screen when entering channel.
manifest: some meta data such as title and resolution.

A typical channel would have a components/ folder with .xml and .brs files. I moved the essential components into the main.brs file to keep the channel to minimum.
mian.brs: Main() is the entry point to create screen, which in turn creates Scene, which in turn creates Video, which has a ContentNode with HLS URL property.
Installation process: make a zip file and post it to HTTP plugin_install API of the Roku device.
All files can be downloaded from



Why image compressible

Why can images be compressed?
Due to human eye:
Not sensible to chroma as to luma, which leads to YUV compression.
Not sensible to red and blue as to green, which leads to Bayer format.
Not sensible to high frequency change, AKA details, which leads to DCT
Due to redundancy´╝Ü Lossless compression

VAST video ad from scratch

JW Player plays video ads with absence of ads server.

Key components:
Ad Tag .xml file in the html page
ClickThrough and MediaFile in the xml, for ad destination URL and ad video file


(To be finished)
VAST: simple, support server stitching.
Here is my googima sample video page from last year.
(sometimes a F5 refersh is needed for ads to play)

VPAID: better interactivity, e.g. in a car ad, the car 3D model can be rotated by mouse.
better metrics: VAST can only report limited info back like ad start, skip.