I've had mixed success trying to setup custom remote actions using isRemoteKeyPressed() on my roImageCanvas object that is running underneath my roVideoPlayer object. I am able to successfully register remote key presses, I've been able to set <LEFT> to restart from the beginning of the video using
position = 0
player.Seek(position)
However, I'm having trouble with the other three actions I am trying to setup.
For <RIGHT> I want to skip to the next item in the Video Player playlist. As I haven't been able to find a built in function to do this for me, I've tried the following:
position = playList[currentIndex].Length.toInt()
player.Seek(position * 1000)
This does seem to jump forward, but for some reason it won't jump to the end of the video like I want it to. And I've checked to make sure the values are lining up by printing them to the console.
See the following log snippet:
Playlist #: 0
Current Position: 0
Current Video Length: 25
msg = | index = 1
Playlist #: 0
Current Position: 1
Current Video Length: 25
Remote button pressed: 5
Button Length: 25
Current Length = The length in seconds that the current video playing is.
Button Length = The value in seconds that the the forward press should be using to determine Seek() position e.g. player.Seek(25 * 1000)
As you can see these values are the same, but for some reason it does not jump to the end. It seemingly jumps to a random position on each video, but jumps to the same position if I press more than once on same video.
For the <FFWD> and <REV> I have the following:
Else If index = 8 '// <REV>
position = m.position - 5
player.Seek(position * 1000)
Else If index = 9 '// <FWD>
position = m.position + 5
player.Seek(position * 1000)
As you can see I am trying to increment + or - 5 seconds for each push. However, <REV> starts from the beginning of the video and <FFWD> again jumps to random position for each video.
For clarity sake here is my entire Event Loop
'// Listen For Events On Message Port
While True
msg = wait(0, messagePort)
'// Image Canvas Events
If Type(msg) = "roImageCanvasEvent" Then
'// Listen For Remote Keys
If msg.isRemoteKeyPressed()
index = msg.GetIndex()
Print "Remote button pressed: " + index.toStr()
If index = 4 '// <LEFT>
'// Jump To Start Of Video
m.position = 0
player.Seek(m.position)
Else If index = 5 '// <RIGHT>
Print "Button Length: "; m.playList[m.currentIndex].Length
'// Jump To Next Video
position = m.playList[m.currentIndex].Length.toInt()
player.Seek((position - 1) * 1000)
Else If index = 8 '// <REV>
position = m.position - 5
player.Seek(position * 1000)
Else If index = 9 '// <FWD>
position = m.position + 5
player.Seek(position * 1000)
End If
End If
End If
'// Video Player Events
If Type(msg) = "roVideoPlayerEvent" Then
'// Output Status Message
Print "msg = "; msg.GetMessage() " | index = "; msg.GetIndex()
Print "Playlist #: "; m.currentIndex
If msg.isStreamStarted()
Print "Stream Started"
Else If msg.isScreenClosed()
'// Output Message And Exit Loop
Print "Screen Closed"
Exit While
Else If msg.isRequestFailed()
Print "Video request failure: "; msg.GetIndex(); " " msg.GetData()
Else If msg.isStatusMessage()
Print "Video status: "; msg.GetIndex(); " " msg.GetData()
Else If msg.isPlaybackPosition() Then
m.position = msg.GetIndex()
checkPosition = m.position
Print "Current Position: "; m.position
Print "Current Video Length: "; m.playList[m.currentIndex].Length
If checkPosition.toStr() = m.playList[m.currentIndex].Length
m.currentIndex = m.currentIndex + 1
playAd(m.acudeoPolicyId)
End If
Else
Print "Unexpected event type: "; msg.GetType()
End If
End If
End While