gpt4 book ai didi

android - 为什么 MediaPlayer prepare() 不与流一起使用?

转载 作者:太空宇宙 更新时间:2023-11-03 13:30:38 28 4
gpt4 key购买 nike

MediaStream 方法 prepareAsync() 的文档说:

Prepares the player for playback, asynchronously. After setting the datasource and the display surface, you need to either call prepare() or prepareAsync(). For streams, you should call prepareAsync(), which returns immediately, rather than blocking until enough data has been buffered.

如果我们使用 prepare() 来播放流,什么会出错?我一直在使用 prepare() 并且从未遇到任何麻烦。

相反,在我自己的情况下,当我使用“prepareAsync()”时,流永远不会开始。当我使用“prepare()” 时,流会在缓冲期 (1s-2s) 后开始播放,并且播放效果很好。为什么异步方法会发生这种情况?异步准备的形式是否与 prepare() 相同?

    mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource(STREAM_URL);
mPlayer.prepareAsync();
mPlayer.start();

最佳答案

prepare() 的问题在于它阻塞了 UI 线程。如果准备媒体的时间太长,您的应用将因 ANR 错误而终止。

Event 然后,阻塞 UI 线程 1 到 2 秒并不是很酷。如果您正在访问 Web 服务器,您迟早会被杀死,这是肯定的。

要使 prepareAsync 正常工作,您必须调用 MediaPlayer.setOnPreparedListener,然后在处理程序中调用 MediaPlayer.start()

关于android - 为什么 MediaPlayer prepare() 不与流一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13762834/

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