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" }
6 Réponses :
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)
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.
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.
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 ();
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.
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>
Veuillez vérifier votre code, PlayerView setPlayer plus d'un peut conduire au problème ...
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);