androidx / media

Jetpack Media3 support libraries for media use cases, including ExoPlayer, an extensible media player for Android
https://developer.android.com/media/media3
Apache License 2.0
1.6k stars 380 forks source link

How to overlay audio over video and preview in composition Player #1560

Closed omkarsurya closed 2 months ago

omkarsurya commented 2 months ago

How to overlay audio over video and preview in composition Player

I am trying this code

public Composition audioComposition() {
        SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor();
        sonicAudioProcessor.setOutputSampleRateHz(44100);
        Effects effects =
                new Effects(ImmutableList.of(sonicAudioProcessor), /* videoEffects= */ ImmutableList.of());
        EditedMediaItem videoEditedMediaItem =
                new EditedMediaItem.Builder(MediaItem.fromUri(VideoUri)).setEffects(effects).build();
        EditedMediaItemSequence videoSequence =
                new EditedMediaItemSequence(ImmutableList.of(videoEditedMediaItem));
        EditedMediaItem audioEditedMediaItem =
                new EditedMediaItem.Builder(MediaItem.fromUri(AudioUri)).setEffects(effects).build();
        EditedMediaItemSequence audioSequence =
                new EditedMediaItemSequence(ImmutableList.of(audioEditedMediaItem), /* isLooping= */ true);
       return new Composition.Builder(ImmutableList.of(videoSequence, audioSequence)).build();
    }

and then set it to the compositionplayer

Composition composition = audioComposition();
 CompositionPlayer player = new CompositionPlayer.Builder(getApplicationContext()).build();
 player.setComposition(composition);  

How ever I am getting this error

17:03:40.937 18163-18163 ViewRootIm...TryBackup] org.own.media14beta                  I  ViewPostIme pointer 0
2024-07-24 17:03:40.947 18163-18163 AnimatorSet             org.own.media14beta                  D  mReversing is false. Don't call initChildren.
2024-07-24 17:03:40.955 18163-18163 ViewRootIm...TryBackup] org.own.media14beta                  I  ViewPostIme pointer 1
2024-07-24 17:03:41.054 18163-18163 own.media14beta         org.own.media14beta                  W  Accessing hidden method Landroid/media/AudioTrack;->getLatency()I (unsupported, reflection, allowed)
2024-07-24 17:03:41.131 18163-18163 AndroidRuntime          org.own.media14beta                  D  Shutting down VM
2024-07-24 17:03:41.140 18163-18163 AndroidRuntime          org.own.media14beta                  E  FATAL EXCEPTION: main (Ask Gemini)
                                                                                                    Process: org.own.media14beta, PID: 18163
                                                                                                    java.lang.IllegalStateException: -9223372036854775807
                                                                                                        at androidx.media3.common.util.Assertions.checkState(Assertions.java:100)
                                                                                                        at androidx.media3.transformer.CompositionPlayer.getSequenceDurationUs(CompositionPlayer.java:811)
                                                                                                        at androidx.media3.transformer.CompositionPlayer.getCompositionDurationUs(CompositionPlayer.java:792)
                                                                                                        at androidx.media3.transformer.CompositionPlayer.setCompositionInternal(CompositionPlayer.java:586)
                                                                                                        at androidx.media3.transformer.CompositionPlayer.setComposition(CompositionPlayer.java:321)
                                                                                                        at org.own.media14beta.ExoPlayerTryBackup.PreviewComposition(ExoPlayerTryBackup.java:202)
                                                                                                        at org.own.media14beta.ExoPlayerTryBackup.lambda$onCreate$3$org-own-media14beta-ExoPlayerTryBackup(ExoPlayerTryBackup.java:120)
                                                                                                        at org.own.media14beta.ExoPlayerTryBackup$$ExternalSyntheticLambda2.onClick(D8$$SyntheticClass:0)
                                                                                                        at android.view.View.performClick(View.java:8043)
                                                                                                        at android.widget.TextView.performClick(TextView.java:17817)
                                                                                                        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1218)
                                                                                                        at android.view.View.performClickInternal(View.java:8020)
                                                                                                        at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
                                                                                                        at android.view.View$PerformClick.run(View.java:31867)
                                                                                                        at android.os.Handler.handleCallback(Handler.java:958)
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                                        at android.os.Looper.loopOnce(Looper.java:230)
                                                                                                        at android.os.Looper.loop(Looper.java:319)
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:8913)
                                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608)
                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)

How can we preview Audio overlay over video in compositionplayer

droid-girl commented 2 months ago

Hi @omkarsurya , CompositionPlayer is still under development thus there are some limitations you will encounter at the moment. Currently, you should check for 2 conditions: all EditedMediaItems must have a duration defined with setDurationUs and the second limitation is that both sequences has to be equal length (comment here)

For preview, isLooping = true is currently not supported, so please make sure that your audio sequence has equal duration as your video sequence

Please take a look at Composition demo app for reference.