Craig A Holliday

Network Coding for Media Streaming SDKs

Only general information is provided for this project because this project is under an NDA

TL:DR

Challenge: The need to develop an SDK that leverages a proprietary network coding during media playback across multiple platforms and integrates seamlessly into customer applications.

Solution: Introduced SDKs for Apple, Android, and Web with broad player support, custom metrics, HLS manipulation, and a unified API. Developed accompanying test applications with comprehensive playback features, integrating the SDK for proprietary network coding usage.

Tech Stack: Apple (iOS, tvOS), Android, Web (all major browsers, WebOS, Tizen), HLS.js, Dash.js, Video.js, GraphQL API, Apollo, AVPlayer, ExoPlayer, AndroidX Media, and React Native.

Project Goals

This project was the SDK for the main product my team worked on for two years.

The core of the SDK was to utilize a proprietary network coding during media playback. The SDK would be integrated into a customer application, and then the customer could set up infrastructure to provide their media in the proprietary coding.

The SDK product had these features/requirements:

  • Support for Apple, Android, and Web
  • Support for React Native integration
  • Custom metrics collection
  • Custom Feature Flags
  • Simple SDK API to use and integrate
  • Application for all platforms to test SDK integration
  • Customer-focused documentation

Functions

  • Technical Product Owner
    • Collaborated with Product Owners to bridge the gap between Product, Customers, and Engineering
  • SDK Team Lead
    • Lead for 2 Apple Developers, 2 Android Developers, and 4 Web Developers
  • Apple, Android, and Web developer
    • I did development for every team whenever necessary

Features

SDK

Notable Features include:

  • SDKs for Apple, Android, and Web
    • Apple: iOS and tvOS
    • Android: All major Android operating systems
    • Web: All major browsers, WebOS, and Tizen
  • Support for multiple media players
    • Apple: AVPlayer
    • Android: ExoPlayer and AndroidX Media
    • Web: HLS.js, Dash.js, and Video.js
  • Custom network requesting and decoding for proprietary network coding technology
  • Custom Metrics collection
  • HLS manifest parsing and manipulation
  • Simple and unified API for customer use/integration
  • Ongoing support for specific customer integrations
    • For example, React Native Native Module support

Test Applications

For this project, there was a requirement for applications that could integrate the SDK and perform all functionality that was part of the SDK’s feature set.

These applications had these features:

  • UI for selecting media, playing media, displaying metrics about media, and other general media playback functionality.
  • Utilized a GraphQL API using Apollo for requesting available test media.
  • Integrated multiple players on each platform. This allowed users to select different players and test that media playback was functional.
  • Integrated our SDK to utilize the proprietary network coding during media playback.

Project Outcomes

We deployed many alpha versions and a public beta trial to customers.

Key metrics include:

  • 1.8 million+ viewing hours enhanced by our solution
  • 4,400+ unique device models supported.
  • More than 55,000 content titles processed

Personal Takeaways

This was the largest and most ambitious product that I have worked on. At least six teams were working in tandem on this project.

This product was still very young, which meant there would be shifts in business requirements as we worked closely with customers. This required the ability to keep the standard of engineering quality high while also allowing flexibility for product changes.

We had a lot of challenging requirements around performance, ease of integration, and consistent testing.

With challenging requirements like these, the most crucial part of my work was keeping communication open between all teams. There were technical solutions that I planned and executed for most problems, but the complexity of the problems had to be considered by all teams to deliver a successful product.

Working through the most challenging problems with this product pushed me and my team to improve. We all gained great experience from this work and delivered a quality product.