Android Exoplayer 只播放音频而不播放视频

问题描述 投票:0回答:9

我正在网络上访问 mp4 文件 - 它在浏览器中运行得很好,但由于某种原因,我似乎只能让音频部分在我的应用程序中工作。任何帮助将不胜感激。

相关等级:

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"
}

布局视图:

<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"
     />

Fragment内相关代码:

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);
android video version exoplayer
9个回答
3
投票

天哪,这是一个奇怪的...所以事实证明,问题是为应用程序设置背景主题导致 exoplayer 显示被隐藏...

所以即使只定义这个就足够了。如果我从这里删除背景,一切都会正常。我仍然不知道如何同时显示此视频有背景设置,但是......

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

我希望这里能帮助其他人将来避免这个问题。


3
投票

就我而言,硬件加速在清单中设置为 false。

exoplayer 中的纹理视图需要

android:hardwareAccelerated="true"
才能工作。


2
投票

我也遇到过同样的问题。我忘了添加下面的代码,添加后就修复了。

playerView.setPlayer(player);

1
投票

你介意尝试一下吗

HlsMediaSource
?这通常对我有用

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)

另外,将其添加到您的

gradle
的依赖项中

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

1
投票

请检查您的代码,PlayerView setPlayer 超过一个可能会导致问题...


0
投票

我的情况很奇怪。我试图避免不推荐使用的方法,并且我正在使用:

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

我已将其更改为:

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

这解决了我的问题。


0
投票

就我而言,我有这种风格

 <style name="Theme.EnglishApp" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
    <item name="colorPrimary">@color/red700</item>
    <item name="colorPrimaryDark">@color/red900</item>
    <item name="colorAccent">@color/red700</item>
    <item name="android:forceDarkAllowed" tools:targetApi="q">false</item>
    <!-- the problem is this item -->
    <item name="android:background">@color/black</item>
    <!-- the problem is this item -->
</style>

当我删除这个项目时

<item name="android:background">@color/black</item>

我的问题已解决


0
投票

问题是清单中使用的主题的背景定义为

<item name="android:background">@color/white</item>

这使得视频变得不可见,而是显示白屏。删除这一行解决了问题


0
投票

就我而言,我设置了

android:layerType="hardware"
。我正在测试如何提高回收器视图性能。这就是问题所在。把它从各处删除,我就恢复了我的视觉效果。

© www.soinside.com 2019 - 2024. All rights reserved.