V-NOVA
V-NOVA
V-NOVA
  • V-Nova Documentation
  • V-NOVA LCEVC
    • Overview
    • Getting Started
      • Encoding
      • Decoding
    • LCEVC Best Practices
    • SDK
      • Encoder Integration Layer (EIL)
      • Decoder Integration Layer (DIL)
      • LCEVC Decoder for Web (LCEVCdecJS)
    • NDK
      • LCEVC Decoder IP Core
        • LCEVC Decoder IP Core Deliverables
      • LCEVC Encoder IP Core
    • Player Integrations
      • AVPlayer with LCEVC
      • VLCKit with LCEVC
      • hls.js with LCEVC
      • Shaka Player with LCEVC
      • Embedding LCEVC-enabled demo hls.js player
      • AndroidX (ExoPlayer) with LCEVC
    • LCEVC in Android Open-Source Project
    • LCEVC in FFmpeg
      • FFmpeg with LCEVC
    • LCEVC in WebRTC
    • LCEVC in Chromium
  • V-NOVA VC-6
    • Overview
    • Codec Description
    • SDK
  • V-Nova Platform
    • Introduction
      • The Dashboard
      • VOD Job List
      • Users and Account Details
    • Encoding
      • Create a VOD Encoding Job
        • Creating Encoding Templates
      • Set up a Live Channel
      • Perform the Encode and View Content
      • Platform API
    • Decoding
Powered by GitBook
On this page
  • Supported stream format
  • Supported AndroidX (ExoPlayer) version
  • Design overview
  • How to deploy
  • Get decoder_lcevc extension library
  • Code to enable LCEVC

Was this helpful?

  1. V-NOVA LCEVC
  2. Player Integrations

AndroidX (ExoPlayer) with LCEVC

This article introduces how to add LCEVC decoding and rendering into androidx/media project, Google's open source Android platform media libraries specifically ExoPlayer.

PreviousEmbedding LCEVC-enabled demo hls.js playerNextLCEVC in Android Open-Source Project

Last updated 6 months ago

Was this helpful?

Supported stream format

  1. The solution utilizesMediaCodecfor decoding the base video stream so any codec supported by MediaCodec on the device can be supported for its LCEVC enhanced stream. Please consult to understand Android native codec support. For example, LCEVC enhanced H264 stream in local file (MPEG-TS .ts, MPEG-4 .mp4), as well as in HLS and DASH, are well supported. However, formats such as AV1 are only available on Android 10 and later, so playback of LCEVC-enhanced AV1 streams in this implementation faces the same limitation.

  2. LCEVC data can be carried within the single video track using the SEI NAL unit type for MPEG codecs such as H.264, HEVC, and VVC. Alternatively, it can be contained within separate tracks, as seen in an .mp4 video source where one track carries the base video stream and another track carries the LCEVC video stream. However, it's crucial to note that the current implementation only supports the use of a single video track carried within SEI data.

Supported AndroidX (ExoPlayer) version

Since ExoPlayer version 2.13, the MediaCodecAdapterinterface has been introduced and remained stable. The implementation of the LCEVC decoder extension relies on this interface, enabling seamless integration of the solution into media applications using ExoPlayer 2.13 and later versions.

Design overview

The provided class diagram offers a high-level depiction of how LCEVC decoding and rendering are integrated into the AndroidX framework:

  1. LCEVC decoding and rendering is added into ExoPlayer as a decoder extension library, by use the LCEVC decoder native library.

  2. LCEVCSynchronousMediaCodecAdapter is the entry point class, which inherits the interface MediaCodecAdapterdefined in ExoPlayer core library. Its implementation is by use MediaCodec API to decode the base video stream, use LCEVC decoder native library to decode LCEVC video stream and render the final full resolution video frame.

How to deploy

Get decoder_lcevc extension library

For media application already migrated to AndroidX project the integration can be quite straight forward:

  1. Fetch specific version of Google AndroidX libraries in your project build.gradle i.e.

    def mediaVersion = "1.0.1"
    implementation "androidx.media3:media3-exoplayer:$mediaVersion"
    implementation "androidx.media3:media3-exoplayer-dash:$mediaVersion"
  2. Fetch the matching version of V-Nova decoder_lcevc library by adding following into build.gradle i.e:

    def lcevcDecoderExtensionVersion = “1.0.1.hashcode”
    implementation "androidx.media3:media3-decoder-lcevc:$lcevcDecoderExtensionVersion "

Code to enable LCEVC

Once you've followed the instructions above to fetch the AndroidX and decoder_lcevc libraries, the next step is to tell ExoPlayer to use decoder_lcevc by creating the LcevcRenderersFactory and create ExoPlayer instance:

renderersFactory = LcevcRenderersFactory(applicationContext)
player = ExoPlayer.Builder(this)
            .setRenderersFactory(renderersFactory)
            .build()

this page
decoder_lcevc extension architecture