【问题标题】:How to fix error "Can't play this video"? (m3u8) file如何修复错误“无法播放此视频”? (m3u8) 文件
【发布时间】:2020-03-16 09:21:03
【问题描述】:

我正在使用 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();
        }
    });
 }
} 

提前致谢!

【问题讨论】:

  • exoplayer 代码在哪里?
  • 我删除了,因为它不起作用
  • 我是用普通媒体播放器完成的
  • VLC player中检查您的链接Stream
  • 我已经这样做了,效果很好

标签: java android exoplayer m3u8


【解决方案1】:

有很多原因..

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'

}

Bam 你完成了... 请检查此以获取更多信息,

 https://github.com/google/ExoPlayer

希望这会对你有所帮助..!!!

【讨论】:

  • 其实我有 ExoPlayer 依赖。但我不知道如何使用它。你会写简单的代码吗?
  • 我在 github 上创建了项目,请参考:-github.com/kashyap0001/SimpleExoplayer.git Watchvideo 类包含您的答案...希望这对您有用...不要忘记投票回答。!!!
  • 它对我不起作用。我从 watchvideo.java 写了代码,但是什么都没有
  • 您是否像我在清单中所做的那样在清单和 xml 中添加网络配置..?您还必须在 res 目录中创建 xml 文件。
【解决方案2】:

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

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

【讨论】:

  • DataSource.Factory dataSourceFactory = new DefaultHttpDataSourceFactory( userAgent, null, DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_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.source。 CompositeSequenceableLoaderFactory, com.google.android.exoplayer2.drm.DrmSessionManager>, com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy, com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistTracker, ...)'在“com.google.android.exoplayer2.source.hls.HlsMediaSource”中有私人访问权限
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多