Migrating from Native Video Node to the Bitmovin Player
In this guide, we will show you how to migrate from the Roku Native Video Node to the Bitmovin Player in just two simple steps.
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.
m.bitmovinPlayerSDK = CreateObject("roSGNode", "ComponentLibrary")
m.bitmovinPlayerSDK.id = "BitmovinPlayerSDK"
m.bitmovinPlayerSDK.uri = "https://cdn.bitmovin.com/player/roku/1/bitmovinplayer.pkg"
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.
m.top.appendChild(m.bitmovinPlayerSDK)  
m.bitmovinPlayerSDK.observeField("loadStatus", "onLoadStatusChanged")
Once the download of the library is complete you can create an instance of the player.
sub onLoadStatusChanged()
	if (m.bitmovinPlayerSDK.loadStatus = "ready") then
		m.bitmovinPlayer = CreateObject("roSGNode", "BitmovinPlayerSDK:BitmovinPlayer")
end sub
And finally, add the Bitmovin Player License Key to your channel manifest:
# License key
bitmovin_player_license_key=YOUR_LICENSE_KEY
You can find your license key in your Bitmovin Dashboard under "Player" -> "Licenses". This security mechanism protects your license from being used elsewhere.
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.
- m.video = CreateObject("roSGNode", "Video")
- m.video.content = contentNode
- m.video.control = "play"
+ m.bitmovinPlayer = CreateObject("roSGNode", "BitmovinPlayerSDK:BitmovinPlayer")
+ m.bitmovinPlayer.callFunc("load", contentNode)
+ m.bitmovinPlayer.callFunc("play", invalid)
Note
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.
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!
 
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 node ➡️ Player function mapping| Video Node | Bitmovin Player | 
|---|---|
video.content = contentNode | bitmovinPlayer.callFunc("load", contentNode) orbitmovinPlayer.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 contentbitmovinPlayer.callFunc("timeShift", target) ' For live content | 
video.duration | bitmovinPlayer.callFunc("getDuration", invalid) | 
video.mute = true andvideo.mute = false | bitmovinPlayer.callFunc("mute", invalid) andbitmovinPlayer.callFunc("unmute", invalid) | 
For a full list of all available functions check out our Bitmovin Player API reference.
Video node ➡️ Player field mapping
Video node ➡️ Player field mapping| Video Node | Bitmovin Player | 
|---|---|
video.state | bitmovinPlayer.playerState | 
video.errorCode, video.errorMsg,    video.errorStr | bitmovinPlayer.error.code, bitmovinPlayer.error.message,  bitmovinPlayer.error.name | 
video.position | bitmovinPlayer.timeChanged | 
video.timedMetaData | bitmovinPlayer.metadata | 
For a full list of all available fields check out our Bitmovin Player API reference.
Updated almost 2 years ago