2014-03-03 93 views
10

我正在使用MediaPlayer从URL流式传输音频。MediaPlayer暂停()行为

根据文档,调用MediaPlayerpause后跟play将从暂停点恢复。

我想知道这是如何与现场音频流的作品。当我拨打pause时,MediaPlayer会创建某种缓冲区中的所有传入数据,并存储它,直到我再次拨打play

如果确实如此,那么这个缓冲区是否有最大尺寸?我主要关心用户暂停MediaPlayer,它在存储传入音频数据时使用大量内存。

+0

不,暂停直播并再次播放只会从直播状态恢复。自暂停以来,它不会保留所有信息的缓冲区。 – whizzle

+0

这不是我在测试时看到的行为。我同时从我的应用程序和我的电脑(供参考)流式传输。我暂停了手机上的数据流,等待了几分钟,当我恢复时,肯定不像我的电脑那样(我从来没有暂停过)。 – Tyler

+0

我已经做了很多流媒体hls。流并不总是完全在同一个位置(例如,在Android和桌面上查看Twitch),但MediaPlayer在暂停时不会缓存25分钟的视频。嗯......现在你让我想知道我是否做了一些特别的事情。 – whizzle

回答

6

因为我知道您使用Mediaplayer从网址流式传输音频......就像无线电频道一样。在这个过程中,你正在使用缓冲区。所以,你得到的行为是非常明显的。当你暂停时,你的数据将继续存储,并在恢复流时,它将从暂停点开始。

但是,与存储的音频从暂停点开始不同,流式传输不应以这种方式运行。流式音频应始终从当时的实时流式传输开始。所以,onPause,你应该释放缓冲区。当用户再次恢复时,您可以像第一次那样重新启动流。这就是行为应该如何。

如果您签出,在大多数广播流应用程序中实现正常的广播流。

+0

所以你说有一个缓冲区,我可以手动释放它? – Tyler

+0

如果您在开始播放之前在应用程序中定义了自己的缓冲区以存储某些数据,则需要释放该缓冲区。否则,如果你只是使用MediaPlayer实例,那么释放资源和onResume重启Mediaplayer就像你第一次做的那样。我知道在这种情况下,恢复第一次使用的方式需要很少的时间,但这应该没问题,因为它会再次连接到实时流。 – Sushil

+1

@TylerAndFriends ..我的意思是,而不是暂停流,停止流。下次重新创建并播放流。 – Sushil