The player lives on veoh.com and as an embedable player on sites like facebook. It plays more than 3 million videos per day to a global audience. The player is also the primary vehicle for our Behavioral Ad Targeting.
This player played a key role in monetizing Veoh's business model. With this in mind the player architecture must accommodate an intense product life cycle and reliability.
I was able to achieve a reliable, scaleable and, testable code with Test Driven Development and common Design Patterns. This worked out so well after months of adding/removing features and product directions the code base still has no cruft!
To improve performance during progressive seeking I implemented a Binary Search to find the closest keyframe.
Multiple Logging Systems such as Nielsen, Omniture, Quantcast, Visible Measures, TubeMogul and our own data center.
Multicore PureMVC my choice because it's alight weight framework that could control a Flex or a pure ActionScript project.
Veoh Data SDK
My first step in converting the Veoh player to OOP was to create an API for our REST service.
Here is an example of how to fetch a video.
var service:VeohService = new VeohService( VEOH_API_KEY ); service.addEventListener( VeohResultEvent.SEARCH_SEARCH, handle_response); service.search.findByPermalink( _videoPermalink );
I developed a VeohPlayback object with s similar interface to Adobe's FLVPlayback Component.
Unlike the Adobe's Component ours will play videos from our CDN, the Veoh P2P network, YouTube or CBS.
In Player Advertising
In early 2007 we created one of the first in-stream ad systems. We later partnered up with Freewheel to deliver our in-stream ads. Since we one of Freewheels first clients I worked closely with their development team in NYC and China on their ActionScript SDK.
Event based ads was something I was pushing for before working with Veoh. At Aviatech I was able to use event based ads to sell products. This example for Calloway Golf is a great example. My theory here was that many users would react to the video auto playing and immediately click pause. When the user clicks the pause button we know they are looking at the player and in this demo we show the product. After bringing this idea to Veoh it proved to have a higher click through rate than a typical overlay ad.
We have also integrated ads from Axel Springer, Scanscout and DoubleClick.
Testing and Planning
Planning: During he planning phase we implemented new features in out UML charts and discussed it's impact before writing any code.
Testing: Since this player is responsible for Veoh's main revenue stream I saw the need implement Test Driven Development. After I fully emerged my team with TDD the product life cycle became much smoother and more manageable. We used AsUnit along with ProjectSprouts/Growl to auto run the test suite. We also forked the ProjectSprouts to add some generators for AsUnit and PureMVC.
Continuous Integration: We have Hudson set up to test and build the player.