如何解决错误“无法播放此视频”? (m3u8)文件

时间:2020-03-16 09:21:03

标签: 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: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>

MainActivity文件:

public class MainActivity extends AppCompatActivity {

VideoView videoView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    VideoView videoView = findViewById(R.id.video_view);

    final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
    progressDialog.setMessage("Please Wait");
    progressDialog.setCancelable(false);
    progressDialog.show();

    MediaController mediaController = new MediaController(this);
    mediaController.setAnchorView(videoView);
    videoView.setMediaController(mediaController);



    videoView.setVideoURI(Uri.parse("http://mos.rusiptv.net:8080/live/@celalsonat/784512/94815.m3u8"));
    videoView.start();

    videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            progressDialog.dismiss();
        }
    });
 }
} 

谢谢!

2 个答案:

答案 0 :(得分:0)

有很多原因。

1。如果您的视频已损坏,则视频播放器会显示该对话框。

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

希望这会为您提供帮助.. !!!

答案 1 :(得分:0)

要播放.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);
}