TL; DR
我正在尝试使用Spotify Android SDK播放持续时间少于10 40秒(很难说)的歌曲。我正在使用一个按钮开始播放。这样做时大部分时间没有声音。向按钮发送垃圾邮件会导致偶尔播放声音(几乎从未发生过)。如果没有声音,则缺少PlayerEvent
的kSpPlaybackNotifyTrackChanged
和kSpPlaybackEventAudioFlush
。
描述
我正在使用Spotify's Android SDK(Docs)。我正在尝试使用playUri(...)
播放歌曲。调用playUri(...)
后,即使到达Player.OperationCallback
的onSuccess
,某些歌曲也根本不会呈现任何声音。在另一个更复杂的测试环境中,我发现出现此行为时甚至没有调用Player.AudioDeliveredCallback
。非工作磁道的共同点是它们很短(持续时间少于10 40秒(很难说)。
我正在使用Android SDK版本spotify-player-24-noconnect-2.20b
,并在运行Android OS版本4.4.2
和7.0
的设备上进行调试。
我也将此列为Spotify Android SDK中的一个问题,可以在here中找到。
重现步骤
我使用this作为起点。由于我只是自己使用Web API来获取OAuth令牌,因此删除了所有与身份验证相关的代码。我也忽略了应该在Spotify应用程序中提供的Android软件包名称和SHA1指纹对,因为似乎服务甚至没有对此进行检查。我可以告诉播放器正确初始化,因为有些歌曲可以正常播放。因此ConnectionStateCallback
的onLoggedIn()
会在短时间后被调用。一条调试日志消息确认登录过程成功。成功登录后,可以通过使用Spotify URI调用playUri(...)
来使用它。 View.OnClickListener
的onClick(...)
方法的以下实现用于五个不同的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.NotificationCallback
的onPlaybackEvent(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/