我试图使用ExoPlayer
,而不是MediaPlayer
,我似乎无法理解.
MediaPlayer
有.start()
/ .pause()
命令..。我只需要seekTo(1287)
它就会自动开始播放..。
我如何在ExoPlayer
中做到这一点?我试过做seekTo(1287)
,但它没有在.我也在那之后添加了.setPlayWhenReady(true)
,但仍然没有运气.
我可以.stop()
..。但我不能让它在那之后再开始演奏,除非我再次.prepare()
.但我觉得我不应该在每次暂停和播放之间都这么做。
我使用我自己的控件和方法来反对MediaController
,就像在ExoPlayer演示中.我不太明白控制是如何实现的.
有什么建议吗?
编辑:
好吧,我想出了暂停和开始..。
.setPlayWhenReady(true) // start
.setPlayWhenReady(false) // pause
但我在追踪上还是有问题..。.seekTo
间歇工作..。有时起作用..。但其他时候我会犯这样的错误:
E/AudioTrack: AudioTrack::set : Exit
(它只进入缓冲状态.还没准备好..。
发布于 2015-11-02 09:19:32
PlayerControl
在ExoPlayer源代码中完全按照您的要求执行:
公共类PlayerControl实现MediaPlayerControl {私有最终ExoPlayer exoPlayer;公共PlayerControl(ExoPlayer exoPlayer) { this.exoPlayer = exoPlayer;}@覆盖公共布尔canPause() {返回真;}@覆盖公共布尔值canSeekBackward() {返回真;}}@覆盖公共布尔值canSeekForward() {返回真;}@覆盖公共int getAudioSessionId() {抛新UnsupportedOperationException();}@覆盖公共int getBufferPercentage() {返回exoPlayer.getBufferedPercentage();}@覆盖公共int getCurrentPosition() {返回exoPlayer.getDuration() == ExoPlayer.UNKNOWN_TIME ?0:( int ) exoPlayer.getCurrentPosition();}@覆盖公共int getDuration() {返回exoPlayer.getDuration() == ExoPlayer.UNKNOWN_TIME ?0:(int) exoPlayer.getDuration();}@覆盖公共布尔值isPlaying() {返回exoPlayer.getPlayWhenReady();}@覆盖公共无效启动(){exoPlayer.setPlayWhenReady(真);}@覆盖公共无效暂停(){exoPlayer.setPlayWhenReady(假);}@覆盖公共无效seekTo(int timeMillis) { long seekPosition = exoPlayer.getDuration() == ExoPlayer.UNKNOWN_TIME ?0: Math.min(Math.max(0,timeMillis),getDuration());exoPlayer.seekTo(seekPosition);}
如果在搜索操作中遇到了奇怪的行为,这可能是由于特定的流/文件类型造成的。我可以建议您看一看基本实现 of ExoPlayer,并最终报告任何问题上的Github。
发布于 2018-05-29 11:40:19
https://stackoverflow.com/questions/32926483
复制相似问题