Spotify的Android SDK无法可靠地播放短时间的歌曲

时间:2018-02-24 16:37:15

标签: android spotify

TL; DR

我正在尝试使用Spotify Android SDK播放持续时间小于 10 40(极难辨别)秒的歌曲。我正在使用按钮开始播放。这样做的时候大部分时间都没有声音。垃圾按钮会导致偶尔播放声音(几乎不会发生)。 PlayerEvent的{​​{1}}&如果没有声音,kSpPlaybackNotifyTrackChanged会丢失。

描述

我正在使用Spotify's Android SDKDocs)。我正在尝试使用kSpPlaybackEventAudioFlush播放歌曲。即使到达playUri(...)的{​​{1}},某些歌曲在致电playUri(...)后也不会播放任何声音。在另一个更复杂的测试环境中,我发现当出现此行为时,Player.OperationCallback甚至没有被调用。非工作轨道的一个共同点是它们很短(持续时间小于 10 40(非常难以辨别)秒)。 我正在使用Android SDK版本onSuccess并在运行Android操作系统版本Player.AudioDeliveredCallback的设备上进行调试spotify-player-24-noconnect-2.20b

我还在Spotify Android SDK中列出了这个问题,可以找到here

重现步骤

我使用this作为起点。我删除了所有与身份验证相关的代码,因为我只是使用Web API自行抓取OAuth令牌。我也忽略了Android软件包名称&应该在Spotify应用程序中提供的SHA1指纹对似乎甚至没有被服务检查。播放器正在初始化,我可以告诉它,因为有些歌曲没有任何问题。因此,4.4.2的{​​{1}}会在短时间内被调用。调试日志消息确认登录过程成功。登录成功后7.0已准备好通过使用Spotify URI调用它来使用。 ConnectionStateCallback onLoggedIn()方法的以下实现用于五个不同的playUri(...),它们使用View.OnClickListener一个工作(按钮5)和一些非工作(按钮) 1-4)Spotify URI。

onClick(...)

实际行为

按钮1,2,3和4应该开始播放短歌。 按钮5应该开始播放长歌。

  • 按下其中一个按钮1,2,3或4会导致无法播放声音。
  • 多次按下其中一个按钮1,2,3或4很少会导致声音播放。
  • 按下按钮5会一直播放声音。

预期行为

  • 按下其中一个按钮1,2,3,4或5将始终播放声音。

日志

以下日志主要显示Button的{​​{1}}来电。

按下按钮5:

playUri(...)

按下按钮1,2,3或4:

public void onButtonClickedPlaySong1(View view) {
  Log.d("MainActivity", "Playing short song");
  mPlayer.playUri(null, "spotify:track:5vN4teJoROMQoadL4IzejG", 0, 0);
}

public void onButtonClickedPlaySong2(View view) {
  Log.d("MainActivity", "Playing short song");
  mPlayer.playUri(null, "spotify:track:46O6QtxuzX3iZn9hMXoeqo", 0, 0);
}

public void onButtonClickedPlaySong3(View view) {
  Log.d("MainActivity", "Playing short song");
  mPlayer.playUri(null, "spotify:track:770fJdqw14GUyCe2SMEgvP", 0, 0);
}

public void onButtonClickedPlaySong4(View view) {
  Log.d("MainActivity", "Playing short song");
  mPlayer.playUri(null, "spotify:track:4JjsoAKOZZCZuC0kiYwkTL", 0, 0);
}

public void onButtonClickedPlaySong5(View view) {
  Log.d("MainActivity", "Playing long song");
  mPlayer.playUri(null, "spotify:track:3CCCpjbs3uW018OkSguRFk", 0, 0);
}

按下之前按下按钮1,2,3或4:

Player.NotificationCallback

1 个答案:

答案 0 :(得分:1)

我实际上找到了解决问题的方法。 playUri(...)的最后一个参数是一个整数,在文档中称为“positionInMs”。将其设置为1而非0时,无论播放歌曲的持续时间如何,我都不会遇到任何问题。

从技术上讲,这首歌似乎被缩短了1毫秒,这让我认为这是一个非常糟糕的修复。但实际上它根本不明显,这就是为什么我很酷。