TL; DR

我正在尝试使用Spotify Android SDK播放持续时间少于10 40秒(很难说)的歌曲。我正在使用一个按钮开始播放。这样做时大部分时间没有声音。向按钮发送垃圾邮件会导致偶尔播放声音(几乎从未发生过)。如果没有声音,则缺少PlayerEventkSpPlaybackNotifyTrackChangedkSpPlaybackEventAudioFlush

描述

我正在使用Spotify's Android SDKDocs)。我正在尝试使用playUri(...)播放歌曲。调用playUri(...)后,即使到达Player.OperationCallbackonSuccess,某些歌曲也根本不会呈现任何声音。在另一个更复杂的测试环境中,我发现出现此行为时甚至没有调用Player.AudioDeliveredCallback。非工作磁道的共同点是它们很短(持续时间少于10 40秒(很难说)。
我正在使用Android SDK版本spotify-player-24-noconnect-2.20b,并在运行Android OS版本4.4.27.0的设备上进行调试。

我也将此列为Spotify Android SDK中的一个问题,可以在here中找到。

重现步骤

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

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应该开始播放短歌。
按钮5应该开始播放一首长歌。


按下按钮1、2、3或4之一将无法播放声音。
多次按下按钮1、2、3或4之一很少会导致声音播放。
按下按钮5可以一直播放声音。


预期行为


按下按钮1、2、3、4或5之一会一直播放声音。


日志

以下日志主要显示Player.NotificationCallbackonPlaybackEvent(PlayerEvent playerEvent)调用。

按下按钮5:

02-24 13:19:15.500 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playing long song
02-24 13:19:15.516 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyPlay
02-24 13:19:15.574 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyMetadataChanged
02-24 13:19:15.692 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyMetadataChanged
02-24 13:19:15.692 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyMetadataChanged
02-24 13:19:15.692 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyContextChanged
02-24 13:19:15.791 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyTrackChanged
02-24 13:19:15.791 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackEventAudioFlush


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

02-24 13:20:04.286 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playing short song
02-24 13:20:04.307 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyPlay
02-24 13:20:04.357 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyMetadataChanged
02-24 13:20:04.463 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyMetadataChanged
02-24 13:20:04.463 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyMetadataChanged
02-24 13:20:04.463 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyContextChanged


在按下之前先按下按钮1、2、3或4:

02-24 13:20:06.020 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playing short song
02-24 13:20:06.035 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyPlay
02-24 13:20:06.088 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyMetadataChanged
02-24 13:20:06.179 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyMetadataChanged
02-24 13:20:06.179 5766-5766/<YOUR_PACKAGE> D/MainActivity: Playback event received: kSpPlaybackNotifyMetadataChanged

最佳答案

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

从技术上讲,这首歌似乎被削减了1毫秒,这使它成为非常肮脏的修复程序。但是实际上它根本不引人注意,这就是为什么我对此很满意。

关于android - Spotify的Android SDK无法可靠地播放短时间的歌曲,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48965094/

10-11 23:07
查看更多