0

我想用 ExoPlayer 播放视频,但不幸的是我找不到任何解决方案。请帮助我,我已经挠了两天的头,但找不到任何东西。

这是我在准备和设置 exoPlayer 属性时的代码。

String path = "asset:///splash_video.mp4";
    Uri uri = Uri.parse(path);
    player = ExoPlayerFactory.newSimpleInstance(new DefaultRenderersFactory(this), new DefaultTrackSelector(), new DefaultLoadControl());
    DataSource.Factory factory = new DefaultHttpDataSourceFactory(Util.getUserAgent(this, getPackageName()));
    simpleExoPlayerView.setPlayer(player);
    ExtractorMediaSource extractorMediaSource = new ExtractorMediaSource(uri, factory, new DefaultExtractorsFactory(), new Handler(), null);
    player.prepare(extractorMediaSource);
    player.setPlayWhenReady(true);

我也一直在关注 youtube 上的这个链接。 https://www.youtube.com/watch?v=vwImlEfitQU

4

4 回答 4

3

这是我的代码适用于音频文件,工作正常且测试正常:您只需传递文件名,应该像 001 是assets\001.mp3中的文件

你应该这样调用函数:

prepareExoPlayerFromAssetResourceFile(001);

代码是:

    private void prepareExoPlayerFromAssetResourceFile(int current_file) {

    exoPlayer = ExoPlayerFactory.newSimpleInstance(this, new DefaultTrackSelector((TrackSelection.Factory) null), new DefaultLoadControl());
    exoPlayer.addListener(eventListener);


    //DataSpec dataSpec = new DataSpec(Uri.parse("asset:///001.mp3"));
    DataSpec dataSpec = new DataSpec(Uri.parse("asset:///" + (current_file))+".mp3");
    final AssetDataSource assetDataSource = new AssetDataSource(this);
    try {
        assetDataSource.open(dataSpec);
    } catch (AssetDataSource.AssetDataSourceException e) {
        e.printStackTrace();
    }

    DataSource.Factory factory = new DataSource.Factory() {
        @Override
        public DataSource createDataSource() {
            //return rawResourceDataSource;
            return assetDataSource;
        }
    };

    MediaSource audioSource = new ExtractorMediaSource(assetDataSource.getUri(),
            factory, new DefaultExtractorsFactory(), null, null);



   /*
    MediaSource audioSource1 = new ExtractorMediaSource(
            Uri.parse("asset:///" + getfileName(current_file)), // file audio ada di folder assets
            new DefaultDataSourceFactory(this, userAgent),
            new DefaultExtractorsFactory  (),
            null,
            null
    );

    */
    exoPlayer.prepare(audioSource);

}
于 2018-10-07T07:08:43.493 回答
1

您可能还需要在 build.gradle(app) 中设置 appt compress config。

android {
  ...
  aaptOptions{
    noCompress "mp4" // file extesion
  }
}
于 2019-09-03T08:34:02.407 回答
0

您应该使用 DefaultDataSourceFactory 而不是 DefaultHttpDataSourcFactory:

new ExtractorMediaSource(
    Uri.parse("asset://splash_video.mp4"),
    new DefaultDataSourceFactory(context, userAgent),
    new DefaultExtractorsFactory(),
    null,
    null);
于 2018-01-02T19:39:08.890 回答
0

在应用程序的“res”文件夹中创建一个文件夹“raw”并将文件复制到新创建的文件夹并替换,

   ExtractorMediaSource audioSource = new ExtractorMediaSource(
            Uri.parse("asset:///" + current_file), // file audio ada di folder assets
            new DefaultDataSourceFactory(this, userAgent),
            new DefaultExtractorsFactory(),
            null,
            null
    );

这段代码,

   Uri uri = Uri.parse("android.resource://Your Package Name/" + R.raw.welcome_video);
   ExtractorMediaSource audioSource = new ExtractorMediaSource(
            Uri.parse("uri ), // file audio ada di folder assets
            new DefaultDataSourceFactory(this, userAgent),
            new DefaultExtractorsFactory(),
            null,
            null
    );
于 2018-10-07T07:25:46.760 回答