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"
/>
片段中的相关代码:
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);
你介意试试 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>
我希望这里有这个可以帮助其他人将来避免这个问题。
就我而言,清单中的硬件加速设置为 false。
android:hardwareAccelerated="true"
需要 exoplayer 中的纹理视图才能工作。
我的情况很奇怪。我试图避免弃用的方法,我使用的是:
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>
这使得视频有点不可见,而是显示一个白色屏幕。删除这一行解决了问题
我正在访问 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"
/>
片段中的相关代码:
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);
你介意试试 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>
我希望这里有这个可以帮助其他人将来避免这个问题。
就我而言,清单中的硬件加速设置为 false。
android:hardwareAccelerated="true"
需要 exoplayer 中的纹理视图才能工作。
我的情况很奇怪。我试图避免弃用的方法,我使用的是:
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>
这使得视频有点不可见,而是显示一个白色屏幕。删除这一行解决了问题