5
votes

Android Exoplayer ne lit que de l'audio sans vidéo

J'accède à un fichier mp4 sur le Web - il fonctionne très bien dans le navigateur, mais pour une raison quelconque, je ne peux que faire fonctionner la partie audio dans mon application. Toute aide serait appréciée.

Gradle pertinent:

private SimpleExoPlayer mExoPlayer;
private static MediaSessionCompat mMediaSession;
private PlaybackStateCompat.Builder mStateBuilder;



BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory =
                new AdaptiveTrackSelection.Factory(bandwidthMeter);
TrackSelector trackSelector =
                new DefaultTrackSelector(videoTrackSelectionFactory);
LoadControl loadControl = new DefaultLoadControl();
DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(mParentActivity);

mExoPlayer = ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector, loadControl);
mPlayerView.setPlayer(mExoPlayer);

mExoPlayer.addListener(this);

DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(mParentActivity, "APP_NAME");
DefaultExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();

MediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory).setExtractorsFactory(extractorsFactory).createMediaSource(mediaUri);

mExoPlayer.prepare(mediaSource);
mExoPlayer.setPlayWhenReady(true);

Vue mise en page:

<com.google.android.exoplayer2.ui.PlayerView
    android:id="@+id/playerView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_constraintTop_toTopOf="parent"
    android:layout_marginTop="0dp"
    android:layout_marginRight="0dp"
    app:layout_constraintRight_toRightOf="parent"
    android:layout_marginBottom="0dp"
    android:layout_marginLeft="0dp"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintBottom_toTopOf="@+id/horizontalHalf"
     />

Code pertinent dans le fragment:

android {
    compileSdkVersion 28
        minSdkVersion 17
        targetSdkVersion 28

    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation "com.android.support:support-compat:28.0.0"
    implementation "com.android.support:support-media-compat:28.0.0"
    implementation "com.google.android.exoplayer:exoplayer-core:2.7.2"
    implementation "com.google.android.exoplayer:exoplayer-ui:2.7.2"
}


0 commentaires

6 Réponses :


1
votes

Pourriez-vous essayer HlsMediaSource ? Cela fonctionne normalement pour moi

implementation "com.google.android.exoplayer:extension-okhttp:2.7.2"

De plus, en ajoutant ceci aux dépendances de votre gradle

val bandwidthMeter = DefaultBandwidthMeter()
val videoTrackSelectionFactory = AdaptiveTrackSelection.Factory(bandwidthMeter)
val trackSelector = DefaultTrackSelector(videoTrackSelectionFactory)
player = ExoPlayerFactory.newSimpleInstance(context, trackSelector)

val dataSourceFactory = OkHttpDataSourceFactory(
          OkHttpClient(),
          Util.getUserAgent(context, context.getString(R.string.app_name)),
          bandwidthMeter
)
val videoSource = HlsMediaSource.Factory(dataSourceFactory)
          .createMediaSource(Uri.parse(url))

player?.prepare(videoSource)


3 commentaires

quelles dépendances utilisez-vous pour cela?


Maintenant ça ne joue plus rien


Merci. Cela s'est avéré être assez étrange. Découvrez ma réponse ci-dessous.



2
votes

Oh mon Dieu, est-ce bizarre ... il s'avère donc que le problème est que la définition du thème d'arrière-plan de l'application provoque le masquage de l'affichage de l'exoplayer ...

Donc, même le fait de définir cela suffisait . Si j'ai supprimé l'arrière-plan d'ici, tout fonctionne. Je ne sais toujours pas comment montrer cette vidéo et avoir un arrière-plan, cependant ...

> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
>     <!-- Customize your theme here. -->
>     <item name="android:background">@color/colorPrimary</item> </style>

J'espère avoir ceci ici aidera quelqu'un d'autre à l'avenir à éviter ce problème.


2 commentaires

Etes-vous sûr que c'était le problème? Ni HlsMediaSource ni cette solution n'ont fonctionné pour moi: / Toujours lire l'audio mais l'écran vidéo est vide.


peu importe :) Mon problème était d'utiliser: nouvel ExoPlayer.Builder (ceci, nouveau MediaCodecVideoRenderer (ceci, MediaCodecSelector.DEFAULT), nouveau MediaCodecAudioRenderer (ceci, MediaCodecSelector.DEFAULT)). build (); Je l'ai changé en: nouveau SimpleExoPlayer.Builder (this) .build ();



2
votes

Dans mon cas, l'accélération matérielle a été définie sur false dans le manifeste.

android: hardwareAccelerated = "true" est nécessaire pour que la vue de texture dans exoplayer fonctionne.


0 commentaires

0
votes

Mon cas était bizarre. J'ai essayé d'éviter les méthodes obsolètes et j'utilisais:

new SimpleExoPlayer.Builder(this).build();

Je l'ai changé en:

new ExoPlayer.Builder(this, new MediaCodecVideoRenderer(this, MediaCodecSelector.DEFAULT), new MediaCodecAudioRenderer(this, MediaCodecSelector.DEFAULT)).build();

Cela a résolu mon problème. p>


0 commentaires

0
votes

Veuillez vérifier votre code, PlayerView setPlayer plus d'un peut conduire au problème ...


0 commentaires

0
votes

J'ai eu le même problème. J'ai oublié d'ajouter le code ci-dessous, il a été corrigé lorsque je l'ai ajouté.

playerView.setPlayer(player);


0 commentaires