What was the Problem?
It was decided to use GStreamer as a framework for integrating Music capability into a Product. The product must work on embedded platform, Android and iOS.
What was the customer
- Porting of GStreamer based Media Player Engine on various platforms such as
- Few Embedded platforms
- The list of supported platforms can increase over time
- Pluggable architecture for Media Player Engine.
- Porting various codecs to same platforms.
What is the Solution?
We first identified the challenges:
- Along with Gstreamer a long list of dependent packages needs to be ported.
- Many of these dependency packages support auto-tools based building, but some don’t.
- Some packages are not supported on some platforms, hence need appropriate replacements on those specific platforms.
- Build system needs to be scalable to incorporate the growing no. of packages and platforms.
- Each platform toolchain has its own supported and not-supported configuration flags. Build system should accommodate these parameters for each toolchain.
We have addressed all the challenges and successfully ported GStreamer to desired platforms. Few key points of the solutions are:
- Used a widely adopted and proven build system.
- The build system is based on recipe system, hence is scalable for number of packages.
- The robust and scalable network of scripts written on the top of this build system, ensure easy and quick addition of support to new platforms.
- Removed unnecessary and unused codes to optimize library size.
- Merged some static libraries into single shared libraries to reduce the number.
- Media Player Engine requires to interface with many codecs. We integrated and optimized some famous audio codecs like FLAC, AAC, ALAC, OPUS, etc. into the system. Optimizations were specific to underlying platforms and were based on hand-coded assembly optimizations as well as code functional optimizations.
- Designed the GStreamer based application to be easily interfaced with different languages on different platforms without much code rework. e.g. IOS (Objective C), Android (Java), Embedded platforms (typically C or C++).
- Abstraction at different levels of build system enables to make customizations easy by only touching the relevant level of scripts/codes.
- A hassle-free build process with very small learning curve for any new user.
- The comprehensive documentation enables any naïve user to build GStreamer without much hassles.
- With a robust design, it was quick and easy to upgrade our base GStreamer version and the entire suite of dependency packages to a higher version.
- Performance improvements because of optimized Codecs and optimized packaging of GStreamer.
- Abstracted structure of scripts gives customer a clear demarcation of the ownership and responsibilities.
- New possibilities opened for customer as porting of the entire solution to any new platform is easy now.
- Confidence to add some complex features to the solution without worrying for the feasibility or time to market.
GStreamer, FFMPEG, Codecs, Shell Script, C/C++, Assembly, GNU tools chains, Auto Tools, OpenSSL, Curl, gnutls, libsoup, libneon, libopus.