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);