如何在android jni中播放Spotify媒体

Posted

技术标签:

【中文标题】如何在android jni中播放Spotify媒体【英文标题】:how to play spotify media in android jni 【发布时间】:2012-10-22 08:55:22 【问题描述】:

我正在尝试按照http://damienradtke.org/playing-with-the-spotify-api/ 的指导在 android 中创建一个简单的播放器,使用它我可以在 ubuntu 中播放来自 spotify 的曲目,但我什至无法在 android 上构建。到目前为止,我能够从 spotify 查询曲目,但是当我尝试使用 ALSA 添加播放功能时,这简直就是一场噩梦。我已经尝试使用 openAl 并且仍然被卡住。 有没有更简单的方法在 jni 中播放流式音频?

在我的 &on_search_complete 回调结束时,我调用了一个函数“play”,如下所示:

void play(sp_session *session, sp_track *track)

if(DEBUG_MODE) __android_log_print(ANDROID_LOG_INFO, "spotify", "attempting to play track...");
sp_error error = sp_session_player_load(session, track);
    if (error != SP_ERROR_OK) 
    if(DEBUG_MODE) __android_log_print(ANDROID_LOG_INFO, "spotify", "Error: %s\n",    sp_error_message(error));
    exit(1);


if(DEBUG_MODE) __android_log_print(ANDROID_LOG_INFO, "spotify", "Playing...");
sp_session_player_play(session, 1);

这会导致 &on_music_delivery 回调被执行,我相信这是我需要添加播放代码的地方。

static int on_music_delivery(sp_session *session, const sp_audioformat *format, const void *frames, int num_frames)

if(DEBUG_MODE) __android_log_print(ANDROID_LOG_INFO, "spotify", "in on_music_delivery");

我在使用 ALSA 构建代码方面收效甚微,有人可以在这里指出正确的方向吗?它令人沮丧,我不想在最后一关放弃。 注意:我是 C 语言的初学者

【问题讨论】:

【参考方案1】:

免责声明:我为 Spotify 工作

首先,我要声明的是,libspotify 附带的 Android 文档远没有它可以做的那么好。我们正在努力改进这一点。在那之前,我可以建议您使用 OpenSL 从本机代码播放音频可能是完成此任务的最简单方法。我建议查看this *** question to find some good OpenSL tutorials。

【讨论】:

以上是关于如何在android jni中播放Spotify媒体的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Android Spotify SDK 在应用程序中直接播放音乐?

如何让 Spotify 和其他 Android 音乐应用根据意图进行搜索和播放?

如何正确跟踪播放位置? [Android 媒体广播通知 Spotify API]

在 android 上的 spotify 中查找正在播放的歌曲

Spotify android 应用程序如何保存当前的音乐播放时间?就像您退出应用程序并在前几天打开它一样?

使用android sdk登录spotify时如何获取帐户类型