## **Step 1:** Add & configure your Bitmovin Player

First, we need to add our component library to your app. To do that create a `ComponentLibrary` node.

Next, start the download of the component library by adding it to your scene and check for the download being finished by observing the `loadStatus` field.

Once the download of the library is complete you can create an instance of the player.

And finally, add the Bitmovin Player License Key to your channel `manifest`:

You can find your license key in your [Bitmovin Dashboard](🔗) under **"Player" -> "Licenses"**. This security mechanism protects your license from being used elsewhere.

(Script tags will be stripped)

## **Step 2:** Replace native video node references in your project

Remove all instances of `roSGNode` of type `Video` from your app and use the Bitmovin Player instead. You can use the same `contentNode` you have been using before.


It is good practice to only ever have one instance of a video node on Roku, be that a native one or the Bitmovin one, to avoid conflicts between the two as well as unexpected behaviours.

(Script tags will be stripped)

## **Summary**

In this guide, we demonstrated how easy it is to migrate from the Native Video Node to the Bitmovin Player in just **two simple steps**: adding the Bitmovin Player and simply replacing the video node with it.

Next, you can

  • check out our [Getting Started Guide](🔗).

  • download fully working [examples](🔗) and explore more features in our GitHub repository.

  • choose additional platforms to deploy on in our [Getting Started Hub](🔗) and try our no-code wizards.

  • browse our [Bitmovin Player API reference](🔗).

  • try our [Analytics](🔗) product to get real-time insights into your new Roku Player.

  • see if some of the questions you might have are answered in our [Community](🔗) and ask your own!

(Script tags will be stripped)

## **Appendix:** Mapping Tables

For more advanced use cases, we've created the following mapping tables to support your migration.

### `Video` node ➡️ `Player` function mapping

Video NodeBitmovin Player
`video.content = contentNode``bitmovinPlayer.callFunc("load", contentNode)` or `bitmovinPlayer.callFunc("load", bitmovinSourceConfig)`
`video.control = "play"``bitmovinPlayer.callFunc("play", invalid)`
`video.control = "pause"``bitmovinPlayer.callFunc("pause", invalid)`
`video.control = "stop"``bitmovinPlayer.callFunc("unload", invalid)`
`video.seek = target``bitmovinPlayer.callFunc("seek", target) ' For VoD content` `bitmovinPlayer.callFunc("timeShift", target) ' For live content`
`video.duration``bitmovinPlayer.callFunc("getDuration", invalid)`
`video.mute = true` and `video.mute = false``bitmovinPlayer.callFunc("mute", invalid)` and `bitmovinPlayer.callFunc("unmute", invalid)`

For a full list of all available functions check out our [Bitmovin Player API reference](🔗).

### `Video` node ➡️ `Player` field mapping

Video NodeBitmovin Player
`video.errorCode`, `video.errorMsg`, `video.errorStr``bitmovinPlayer.error.code`, `bitmovinPlayer.error.message`, `bitmovinPlayer.error.name`

For a full list of all available fields check out our [Bitmovin Player API reference](🔗).