Search code examples
rokubrightscript

How to create a common video player which can be used by multiple screens in brightscript


I need to access video player from two or three different screens (namely guide, feature) which extends Group. Initially I thought of declaring Video in all the xml files and access that in respective brs files as below

.xml

<Video id="VideoPlayer" visible="false" translation="[0, 0]" width="1920" height="1080" />

.brs

m.video = m.top.findNode("VideoPlayer")

This is working fine. But later I realized that I am creating multiple video player instances unnecessarily. I am planning to create at one place and use it in all the screens which intended to use player. But I am not able to understand how I can create the player. Can anyone please let me know whether I need to create a screen file (.xml) for Video as below to achieve this

<?xml version="1.0" encoding="UTF-8"?>
<component name="VideoPlayer" extends="Group">
    <children>
        <Video id="VideoPlayer" visible="false" translation="[0, 0]" width="1920" height="1080" />
    </children>

    <script type="text/brightscript" uri="pkg://components/Player/VideoPlayer.brs"/>
</component>

Can any one please let me know if this is the correct way.


Solution

  • There's more than one way to do it. Maybe the easiest would be to create the player on global and access it from anywhere.

    m.global.addField("player","node", false)
    m.global.player = createObject("RoSGNode","VideoPlayer")
    

    Then in the screens you can access using m.global.player

    You also could create it as a component and pass it to your subComponents (screens) as needed, by adding a field definition to each component to reference the player. In each component's interface definition:

    <field id="player" type="node" />
    

    Then when the screen is created, set the player field from above to your one player instance. Then in the screens you can access using m.top.player