Phill Farrugia


Digital Video Streaming Platform

TENPlay Web TENplay iOS TENplay Android TENplay Apple TV TENplay Fetch TV

Streaming TV on-demand across any platform with TENplay

Today digital video streaming is one of the primary ways that people interact with media content online. People have subscriptions to several services including Netflix, HBO, Hulu and Amazon Prime. Back in 2012-2013 before these services were available in Australia, I joined one of the largest national television broadcasters in Australia, Network Ten as a Junior Software Engineer. At the time broadcasters were faced with the challenge of embracing the future of on-demand streaming and offering users a way of streaming their favourite TV shows online.

Our team’s solution was to build TENplay - a fast, easy and user-friendly on-demand video streaming service available across every single platform available (Web, iOS, Android, Apple TV, Fetch TV, Windows Phone, Xbox, Apple TV and HBBTV). As a Junior Software Engineer, I spent time making contributions across several different parts of the platform, from building backend automation tools to building an Apple TV app and contributing to several iOS applications.

Scheduling, Transcoding and Ingestion Automation

Brightcove screenshot

I contributed to the automation of scheduling, transcoding (using HLS - HTTP Live Streaming technology) and ingestion of on-demand video assets and live streaming content to Brightcove based on Network Ten’s digital media content rights and partnerships. I created multiple ‘Content Scheduling’ scripts and GUI tools using, Javascript, Python and C# that streamlined the process for Content Editors to upload new Episodes, Shows, and Streams to Brightcove and to reduced the margin of error in their workflow. My tools were used to automate the scheduling of Live Streams during the Sochi 2014 Winter Olympics to ensure that content availability was in-line with Network Ten’s contractual rights and obligations across each platform.

Reverse Engineering Apple TV / TVML

Apple TV App Screenshot

Together with my colleague Jeremy Brown, we partnered with Apple to implement Australia’s first third party catchup-TV TVML-based Apple TV application that used Apple’s previously undocumented TVML/XML API, Javascript and HandlebarsJS to query and serve Featured, Categorized, Searchable and User-Specific video content. At the time, Apple’s TV SDK was not publicly available and I was tasked with reverse engineering the XML structure and creating re-usable templates that became the final product.

Apple TV Flow Diagram

I wrote C# to serve up TVML/XML payloads at multiple endpoints that would be synced at regular intervals with the Apple TV client. This XML markup was generated by fetching content and image asset URLs from several backend services and following the strict formatting guidelines of the TVML specification.

Contributing to iOS Applications

TENplay iOS

Tenplay iPad App Screenshot

I quickly found my passion for iOS and contributed to the bug fixes, maintenance and improvements of the TENplay iOS product. I worked alongside our Senior iOS Engineer to learn about the platform, the architecture, the design decisions made during development and found ways that I could contribute.

CollectionView Pagination and LRU Cache

One of the ways I contributed to the app was by implementing a custom UICollectionView pagination solution for the main video feed ViewController. Before UICollectionView supported pagination natively, I used existing APIs such as UICollectionViewDelegate’s collectionView(UICollectionView, willDisplay: UICollectionViewCell, forItemAt: IndexPath) to paginate network requests for Image Assets as the user scrolls through the feed. I implemented an LRU cache to store Image Assets in-memory, preventing duplicate network requests for images in the cache and purging old image assets as needed or upon receiving Out of Memory warnings. This improved the overall framerate of the video feed screen from 44 fps to the recommended 60 fps.

I led pre-release testing parties, triaged and prioritized bug reports, ensuring a high standard of quality throughout each sprint and release.

Eyewitness News

As part of the TENplay platform, we built the Eyewitness News iOS app which enabled users to capture User Generated Content (UGC) on the fly to contribute to Network Ten’s broadcast News program. I collaborated with my colleague Craig Stanford on building the Eyewitness News application. I contributed to architecture discussions, learned about and helped design the backend REST API.

I became responsible for maintaining the app throughout my time at Network Ten, ensuring that the app received frequent updates and improvements. Resolving backend issues with content ingestion, automating the cleanup of stale and old content, as well as improving the end-to-end integration with the TENplay Eyewitness News website.

Sochi 2014 Winter Olympics

Sochi 2014 iPad App Screenshot

During the Sochi 2014 Winter Olympics, my team built an on-demand video streaming iOS application that offered users the ability to view catchup video from each of the Olympic Sports events as well as up to 6 simultaneous streams at one time in a dashboard. We worked with digital vendors such as Switch Media to Design, Develop and Support the product throughout the Olympic games. I contributed to the development of the project, building the Filtered Category screen and the Menu drawer as well as assisting with testing, bug fixes and sprint planning.

What did I learn?

During my time at Network Ten, I grew from a Junior Software Engineer into an experienced, focused and collaborative individual capable of delivering features to strict deadlines. I became familiar with the use of Sprints, Release Deployment, Branches, Automated Testing, Load Testing and the various processes involved in delivering software amongst teams. I found my passion for the iOS platform and for writing in the Objective C programming language. I gained a wide breadth of experience in writing C#,, Javascript, Objective C and SQL.

I applied my experience with programming to real world problems, building tools that assisted with the automation of a lot of previously manual tasks. I learned about delivering software at a large scale and mitigating a lot of the risks that are typically associated with systems used by a large number of people.