【问题标题】:Spotify's Android SDK can't play songs with short duration reliablySpotify 的 Android SDK 无法可靠地播放持续时间短的歌曲
【发布时间】:2018-02-24 16:37:14
【问题描述】:

TL;DR

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

说明

我正在使用Spotify's Android SDK (Docs)。我正在尝试使用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() 在很短的时间后被调用。调试日志消息确认登录过程成功。成功登录后,playUri(...) 可以通过使用 Spotify URI 调用它来使用。 View.OnClickListeneronClick(...) 方法的以下实现用于五个不同的 Button 使用 playUri(...) 与工作(按钮 5)和一些非工作(按钮 1-4)Spotify URI。

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

【问题讨论】:

    标签: android spotify


    【解决方案1】:

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

    从技术上讲,这首歌似乎被缩短了 1 毫秒,这使得我认为这是一个非常肮脏的修复。但实际上它根本不引人注意,这就是我喜欢它的原因。

    【讨论】:

      猜你喜欢
      • 2017-02-09
      • 2019-05-15
      • 2018-07-19
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 2016-08-01
      • 2017-03-26
      • 2016-07-13
      相关资源
      最近更新 更多