簡體   English   中英

Android Exoplayer 只播放音頻不播放視頻

[英]Android Exoplayer only playing audio without video

我正在訪問 web 上的一個 mp4 文件——它在瀏覽器中運行良好,但出於某種原因,我似乎只能讓音頻部分在我的應用程序中工作。 任何幫助,將不勝感激。

相關Gradle:

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

就我而言,硬件加速在清單中設置為 false。

exoplayer 中的紋理視圖需要android:hardwareAccelerated="true"才能工作。

你介意嘗試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"

哦,男孩,這是一個奇怪的...所以事實證明,問題是為應用程序設置背景主題會導致 exoplayer 顯示被隱藏...

所以即使只是定義了這個就足夠了。 如果我從這里刪除背景,一切正常。 我仍然不知道如何同時顯示此視頻設置背景,但是...

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

我希望在這里有這個可以幫助其他人將來避免這個問題。

我的情況很奇怪。 我試圖避免棄用的方法,我正在使用:

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

我已將其更改為:

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

這解決了我的問題。

請檢查您的代碼,PlayerView setPlayer 不止一個可能會導致問題...

我遇到了同樣的問題。 我忘了添加下面的代碼,添加時已修復。

playerView.setPlayer(player);

就我而言,我有這種風格

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

我的問題解決了

問題是清單中使用的主題的背景定義為

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

這使得視頻有點不可見,而是顯示一個白色的屏幕。 刪除此行解決了問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM