Audio and passthrough - nova-video-player/aos-AVP GitHub Wiki

Audio passthrough enables to transmit through HDMI interface compressed sound channels directly to your AV receiver that will perform the decoding and rendering. It is thus a feature targeted for Android TV or TV boxes. This feature is still experimental and can result in audio/video delay.

If you experience issues, disable audio passthrough: this will not prevent support for multi-channel decoding.

On Nova Video Player, two audio passthrough modes are supported:

  • Mode 1 (almost deprecated) targets TV boxes with early versions of Android (up to Kitkat 4.4). Note that on some devices you need to set the sound volume to maximum (so that the streams are not altered by the sound mixer). This mode does a software SPDIF encapsulation with ffmpeg .
  • Mode 2 targets latest versions of Android above 5.1 (Nvidia Shield TV and Android TVs) using official Android framework support.

You might have to try the two modes and figure out what suits you best depending on the multi-channel audio codec used in your video files.

For now, when using passthrough you fully delegate to your sound receiver the decoding of the compressed bitstream trusting that it will manage without checking the codec capabilities of the receiver. This means that when the sound receiver is not capable of decoding the audio compressed stream it will play no sound or noise.

Note that ARC (not eARC) is bandwidth limited and does not handle multichannel uncompressed bitstreams. You may experience more problems with ARC than HDMI for passthrough since some TVs are not able to send a 5.1 Dolby Digital or DTS soundtrack from a movie over ARC.

TVs running Android TV are using always ARC with an AV receiver which limits the bandwidth available to DTS core and AC3. For TVs it is recommended not to use audio passthrough.

If you experience some issues with passthrough please submit a sample and detail your hardware configuration. Note that deactivating passthrough does not force stereo downmix on recent Android versions (Nougat 7.0 and above) where audio tracks are decoded into multichannel PCM output and passed to Android to deal with it depending on the receiver capabilities advertized (EDID etc.). This is for now the most reliable way to achieve multichannel audio output.

In short: on a stereo TV or not universal audio receiver, disable passthrough (you still get multichannel support).

If you experience a systematic A/V delay, it can be compensated by adjusting while playing the video via the menu/tiles the delay value and keeping the setting global.

On a more technical side, current version of nova passthrough uses audiotrack and non passthrough uses opensles for most outputs cf. https://github.com/nova-video-player/aos-AVP/issues/196

Some per device logic has been implemented to select audio output interface in audio_interface.c based on device_config.c hardware detection i.e.:

  • audio_interface_impl_opensles
  • audio_interface_impl_audiotrack
  • audio_interface_impl_audiotrack_new
  • audio_interface_impl_audiotrack_java