Android: MediaPlayer.setDataSource(FileDescriptor fd) vs MediaPlayer.setDataSource(FileDescriptor fd, long offset, long length)

Android: MediaPlayer.setDataSource(FileDescriptor fd) vs MediaPlayer.setDataSource(FileDescriptor fd, long offset, long length)

我已经创建了 3 个声音的 3 个资产文件描述符(放入 res/raw)

AssetFileDescriptor afd1 = mContext.getResources().openRawResourceFd(R.raw.mp3_file_1);

AssetFileDescriptor afd2 = mContext.getResources().openRawResourceFd(R.raw.mp3_file_2);

AssetFileDescriptor afd3 = mContext.getResources().openRawResourceFd(R.raw.mp3_file_3);

然后我把它们放到一个数组中:

    array.add(afd1);
    array.add(afd2);
    array.add(afd3);

然后我创建一个 MediaPlayer 实例,让它只播放数组中的第一个声音

MediaPlayer mp = new MediaPlayer();
mp.setDataSource(array.get(0).getFileDescriptor());
mp.prepare();
mp.start()

但是,数组中的3个声音都播放了。 然后我尝试使用 setDataSource(FileDescriptor, long, long) 而不是 setDataSource(FileDescriptor fd),mp 只播放我想要的数组中的第一个声音。

AssetFileDescriptor afd = array.get(0);

mp.setDataSource(afd.getFileDescriptor(),
                afd.getStartOffset(), afd.getLength());

我的问题是上面的两个 setDataSource 方法有什么区别?使用我在此处包含的代码,为什么 setDataSource(array.get(0)) 播放数组中的所有 3 种声音?

非常感谢。

第二个被告知长度(和偏移量),而第一个播放只要文件描述符 returns 一些数据。资源通常存储在存档中,因此从文件描述符中继续读取第一首歌曲,然后找到第二首歌曲,然后是第三首歌曲。