gpt4 book ai didi

android - 调用 .prepare() 几秒钟后使用 ExoPlayer 播放音频文件

转载 作者:行者123 更新时间:2023-11-29 00:57:49 54 4
gpt4 key购买 nike

我的应用程序中有一项功能必须多次播放一个简短的音频文件,使用下面的代码我正在准备 ExoPlayer 来播放音频:

SimpleExoPlayer player;
private void readyExoPlayerRaw(int rawSound) {
player = ExoPlayerFactory.newSimpleInstance(this, new DefaultTrackSelector());
DataSpec dataSpec = new DataSpec(RawResourceDataSource.buildRawResourceUri(rawSound));
final RawResourceDataSource rawResourceDataSource = new RawResourceDataSource(this);
try {
rawResourceDataSource.open(dataSpec);
} catch (RawResourceDataSource.RawResourceDataSourceException e) {
e.printStackTrace();
}
MediaSource audioSource =
new ExtractorMediaSource.Factory(
new DefaultDataSourceFactory(this, "appName"))
.createMediaSource(rawResourceDataSource.getUri());

player.prepare(audioSource);
//player.setPlayWhenReady(true);
}

问题是当我取消注释最后一行 (//player.setPlayWhenReady(true);) 时声音播放正常,但是因为我在运行几秒钟后播放声音这个方法,这行代码行不通!我想是因为它等待上一行 (.prepare(...)) 的回调,当它准备好时,它就会播放。所以我想也许我应该在播放器上调用 start() 或类似的方法,但没有这样的方法。

因此,每次我想播放音频时,我都坚持调用 .prepare(),但由于它播放的间隔非常短,因此调用 prepare()导致不合适的延迟。

所以我错过了什么吗?如何在不重新准备的情况下播放准备好的 MediaSource

最佳答案

我认为您的方向是正确的!

setPlayWhenReady 是您暂停和播放音频的方式,但它只会在“准备就绪”时才真正播放,也就是准备就绪。

所以您应该只需要在 onResume 或 onCreate 中调用您的 readyExoPlayerRaw 一次。然后在该方法的末尾,您可以设置 playWhenReady(false) 以便在您告诉它之前它不会开始播放。

然后当你想播放声音时,执行如下操作:

private void playSound() {
// Go to the beginning of the audio (in case it has played before)
player.seekTo(0);
// Tell it to play the sound
exoPlayer. setPlayWhenReady(true);
}

如果可行,请告诉我。

关于android - 调用 .prepare() 几秒钟后使用 ExoPlayer 播放音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53390341/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com