Java “如何修复错误”;Can';“我不能播放这个视频吗?”;?(m3u8)文件

Java “如何修复错误”;Can';“我不能播放这个视频吗?”;?(m3u8)文件,java,android,exoplayer,m3u8,Java,Android,Exoplayer,M3u8,我正在使用ExoPlayer和m3u8文件。每次我运行我的应用程序时,它都会这样说 无法播放此视频 也许一切都应该是对的,但我不知道为什么会这样说 XML文件: <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ap

我正在使用ExoPlayer和m3u8文件。每次我运行我的应用程序时,它都会这样说

无法播放此视频

也许一切都应该是对的,但我不知道为什么会这样说

XML文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".MainActivity">


<VideoView
    android:id="@+id/video_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

提前谢谢

这有很多原因

1.如果您的视频已损坏,则videoplayer将显示该对话框

2.如果您的视频已完成且未损坏,请尝试此操作

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        videoView.start();
        progressDialog.dismiss();
    }
});
3.Exoplayer是android studio中videoview的最佳选择

只需在几个地方实现这种依赖性

repositories {
   mavenCentral()
   jcenter()
}


dependencies {
...
compile 'com.google.android.exoplayer:exoplayer:2.8.0'
}

你做到了。。。 请查看此以了解更多信息

 https://github.com/google/ExoPlayer

希望这对你有帮助

要播放.m3u8文件,请在初始化Exoplayer时使用以下代码:-

BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();

TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);

TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);

videoPlayer = ExoPlayerFactory.newSimpleInstance(context,trackSelector);

Handler mHandler = new Handler();

String userAgent = Util.getUserAgent(context, "APPLICATION_NAME");

DataSource.Factory dataSourceFactory = new DefaultHttpDataSourceFactory(
                userAgent, null,
                DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
                1800000,
                true);

HlsMediaSource mediaSource = new HlsMediaSource(Uri.parse(mediaUrl),dataSourceFactory, 1800000,mHandler, null);

if (mediaUrl != null) {
    videoPlayer.prepare(mediaSource);
    videoPlayer.setPlayWhenReady(true);
}

exoplayer代码在哪里?我删除了它,因为它不工作。我使用普通媒体播放器进行了删除。检查
VLC player中的链接
Stream
,我已经这样做了,它工作得很好。实际上,我对exoplayer有依赖性。但我不知道如何处理这个问题。你能写简单的代码吗?我已经在github上创建了一个项目,请参考:-Watchvideo类包含你的答案…希望这对你有用…别忘了说出答案。!!!这对我不起作用。我在watchvideo.java中编写了代码,但是没有任何东西可以像我在manifest中那样在manifest和xml中添加网络配置。。?您还必须在res目录中创建xml文件。
DataSource.Factory dataSourceFactory=new DefaultHttpDataSourceFactory(userAgent,null,DefaultHttpDataSource.DEFAULT\u CONNECT\u TIMEOUT\u MILLIS,1800000,true)它是2.11.3 exoplayer吗?它在trackSelector上有错误(它说exoplayer中的不能应用于'com.google.android.exoplayer2.trackselection.trackSelector),然后Adnroid Studio在HlsMediaSource下划红色下划线。上面写着“'HlsMediaSource(android.net.Uri、com.google.android.exoplayer2.source.hls.HlsDataSourceFactory、com.google.android.exoplayer2.source.hls.HlsExtractorFactory、com.google.android.exoplayer2.drm.DrmSessionManager、com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy、com.google.andro)id.exoplayer2.source.hls.playlist.HlsPlaylistTracker,…)在“com.google.android.exoplayer2.source.hls.HlsMediaSource”中具有私人访问权限
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();

TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);

TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);

videoPlayer = ExoPlayerFactory.newSimpleInstance(context,trackSelector);

Handler mHandler = new Handler();

String userAgent = Util.getUserAgent(context, "APPLICATION_NAME");

DataSource.Factory dataSourceFactory = new DefaultHttpDataSourceFactory(
                userAgent, null,
                DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
                1800000,
                true);

HlsMediaSource mediaSource = new HlsMediaSource(Uri.parse(mediaUrl),dataSourceFactory, 1800000,mHandler, null);

if (mediaUrl != null) {
    videoPlayer.prepare(mediaSource);
    videoPlayer.setPlayWhenReady(true);
}