代码之家  ›  专栏  ›  技术社区  ›  Bee

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

  •  2
  • Bee  · 技术社区  · 7 年前

    TL;博士

    我正在尝试播放持续时间小于 10 使用Spotify Android SDK 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中的一个问题,该SDK可以找到 here .

    复制步骤

    我正在使用 this 作为起点。我删除了所有与身份验证相关的代码,因为我只是自己使用Web API获取OAuth令牌。同样,我忽略了Android软件包名称&Spotify应用程序中应提供的SHA1指纹对,因为该服务似乎没有对此进行检查。播放器正在正确初始化,我可以告诉你,因为有些歌曲播放时没有任何问题。因此 ConnectionStateCallback onLoggedIn() 很快就会接到电话。调试日志消息确认登录过程成功。成功登录后 playUri(…) 可以通过使用Spotify URI调用它来使用。以下实现 View.OnClickListener onClick(...) Button 利用的是 带有一个工作(按钮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.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
    

    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
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Bee    7 年前

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

    从技术上讲,这首歌似乎被删减了1毫秒,我认为这是一个相当肮脏的修正。但实际上这一点都不明显,这就是为什么我对它很冷淡。