Accessibility is Key - Sample Project
One of the great requirements of accessibility standards is the ability to control things completely via the keyboard. Not as sexy as creating a 3D video player - but still incredibility important in today's world.
Having the ability to control your video player by the keyboard is a great win and allows you to reach an even wider audience. All this and it's incredibility easy to do using BEML and BC3 Player API. (Even I CAN do it)
Here's one possible solution:
Step 1 - Player Action to Key Stroke to Player API Function Mapping
Start with a key stroke to BC3 Player Action mapping table - maybe something like
Action Key Stroke Player API
Play / Pause UP VideoPlayer.play() / VideoPlayer.pause()
Stop DOWN VideoPlayer.stop()
Seek Forward (15s) RIGHT VideoPlayer.seek(time + 15s)
Seek Reverse (15s) LEFT VideoPlayer.seek(time - 15s)
At this stage I HIGHLY encourage you to read up on the Player API (specifically around the Video Player API module
Step 2 - Create a BEML Module Component
Now we need to create a custom AS3 component that we can append to our players - in this instance we'll use the BEML interface to allow us to easily include this into our player. I won't get too much into BEML as you can read ALL ABOUT IT HERE - but I will say this: I'll be using the BEML SWFLoader Component - you may think that because there is no UI it should go in the Modules nodes BUT because I need to wire into the Stage object I have to put this into the SWFLoader component.
A quick look on the interweb gave me this AS3 code snippet from Adobe's Help Centre.
Combine that with the BC3 Player API Reference here I created a SWF of only 100 lines! [Code to be available via Dev Centre]
Step 3 - Host the Component and combine with BEML
For this sample I kept things incredibly simple and so just duplicated the out of the box Video Player Template and modified the BEML with the SWF Loader component (with width of 0 and height of 0 so it doesn't throw the layout out of whack).
The BEML looks like this:
<Runtime>
<Theme name="Deluxe" style="Light" />
<Layout>
<SWFLoader width="0" height="0" source="http://mysite/bc3keycontrol_v1.swf" />
<VBox padding="3">
<VideoPlayer id="videoPlayer" />
</VBox>
</Layout>
</Runtime>
And the key ActionScript class that ties the Keyboard to the Player events looks like this:
private function reportKeyDown(event:KeyboardEvent):void
{
//Key to Action Mapping
//Play / Pause UP VideoPlayer.play() / VideoPlayer.pause()
//Stop DOWN VideoPlayer.stop()
//Seek Forward (15s) RIGHT VideoPlayer.seek(time + 15s)
//Seek Reverse (15s) LEFT VideoPlayer.seek(time - 15s)
switch(event.keyCode)
{
case Keyboard.UP:
if (this._bcVideo.isPlaying())
{
this._bcVideo.pause(true);
}
else
{
this._bcVideo.play();
}
break;
case Keyboard.DOWN:
this._bcVideo.stop();
break;
case Keyboard.RIGHT:
this._bcVideo.seek(this._bcVideo.getVideoPosition(false) + 15);
break;
case Keyboard.LEFT:
this._bcVideo.seek(this._bcVideo.getVideoPosition(false) - 15);
break;
}
}
Step 4 - Create a player and publish
MAKE SURE YOU TURN ON THE API FOR THE PLAYER! If you don't none of this works.
Using the quick publish feature in the Media Module I combined a video with my player and voila - see below.
Note you need to click on the player before the keys work. Yes I know that might be redundant so if anyone knows how to pass focus from the hosting page via JS please let me know so I can get this all completed.
Also note sample code needs to be reviewed first and I'll most likely post this all on the Dev Blog.
Total time!? = 45 minutes (60 if you include writing this post!)
The Finished Product
Currently you need to start the video with the mouse - but once started the UP key Play/Pauses, DOWN key Stops, RIGHT key advances by 15s, LEFT key rewinds by 15s
Posted in category: , Comments (2), Tags:

Comments
This only seems to work on Internet Explorer and not on Mozilla or Webkit browsers. Any suggestions how to get this to work on other browsers?
by chris on Aug 19, 2009 9:31:27 AM
Hmmm yes Chris I see what you're saying, my Flash debug is showing an error when using FF 3.5
I'll have a look and post an update isolating the issues
Thanks for pulling this up
by Cameron on Aug 21, 2009 5:05:21 AM
Post a comment