Shaka Player Embedded is a framework that runs Shaka Player in native (C++) apps. This gives a cross-platform interface to Shaka Player allowing native apps to use the player. Your native apps can now be built with the same features, behavior, and API as your Shaka-based web apps.
In addition to the C++ API, we provide a high-level wrapper for iOS called
ShakaPlayerView which can be used from either Objective-C or
Documentation: https://google.github.io/shaka-player-embedded/ Tutorials: https://google.github.io/shaka-player-embedded/usergroup0.html Releases: https://github.com/google/shaka-player-embedded/releases
We only support iOS at this time, but other platforms could be added.
Because many on our team use Linux, there is a Linux port included to make it easier to work on non-iOS-specific features. Linux is not, however, a first-class target platform at this time.
This project follows semantic versioning, meaning we maintain backwards compatibility with all minor releases, including ABI. This means you can drop in a newer version of the compiled library and not have to recompile your main app (you'll need to re-sign it due to Apple requirements).
Minor releases (e.g. v1.1) will add new features in a reverse-compatible way,
but major releases (e.g. v2.0) may break any compatibility. We'll mark
deprecated features with compiler attributes to give you warnings about features
that will be removed later. This may break API compatibility if you compile
-Werror, but you can suppress the warnings. Features will only be
removed in major releases.
If you are interested in release and survey announcements, please join our mailing list: https://groups.google.com/forum/#!forum/shaka-player-users
This is a very low-volume list that only admins of the project may post to.
For issues or to start a discussion, please use github issues: https://github.com/google/shaka-player-embedded/issues
Widevine support requires the Widevine CDM for iOS, which must be obtained separately from Widevine, under license. The Widevine CDM is not open-source.
Adding Widevine support requires compiling from source; you cannot use the pre-built versions. Follow the instructions in the Widevine CDM repo for how to build it.
This requires the use of at least v15.2.3 of the Widevine CDM.
This does not require a C++ compiler as it uses a pre-compiled version of clang downloaded from Google Cloud Storage. However, it does require a C++11 compatible C++ library (installed with most compilers, e.g. gcc).
Install Chromium depot tools, which contains ninja and other required tools. See https://www.chromium.org/developers/how-tos/install-depot-tools for details.
Get the source
git clone https://github.com/google/shaka-player-embedded.git cd shaka-player-embedded
We use git submodules to manage third-party dependencies. You can run
git submodule update (or pass
git clone) to
download all the submodules; or you can wait and have the
download only those you need.
You need to run
configure to setup configuration settings. You can pass
--help to see some of the options you can use. We don't support in-tree builds;
you need to run
configure in another directory.
configure is done, you can build using
build.py. There is a Makefile
that will run the script for you if you prefer.
mkdir foo cd foo ../configure make
Once it is built, you can use the resulting shared library.
On iOS, there will be a
ShakaPlayerEmbedded.framework folder that you use;
there is also a
ShakaPlayerEmbedded.FFmpeg.framework bundle that you need to
include in your app, but you shouldn't use it directly since we don't maintain
ABI for it.
On other platforms, there is a
libshaka-player-embedded.dylib or a
libshaka-player-embedded.so file you can use. Like iOS, there is a
libshaka-player-embedded.ffmpeg.* file you need to include too.
If you are using a custom
--eme-impl, you need to copy the respective
shared libraries too, if needed.
If you intend to send a pull-request, you need to ensure the code complies with
style guidelines. This is done with the
which can be run with
To run all the checks, you also have to have
clang-tidy installed. It needs
to be installed on
PATH, or you can pass
--clang-tidy to the script to tell
it where to find the binary.