c++ - linux下Deezer原生API : Unanble to create simple app

标签 c++ linux deezer

我尝试创建简单的应用程序,它将连接到 deezer 并播放单首歌曲。我获得了访问 token 并编写了这个程序。
目标机器:linux x86_64
API版本:v1.0.1

#include <iostream>
#include <deezer-api.h>
#include <deezer-player.h>

#define ACCESS_TOKEN "ACCESS TOKEN HERE"

int main(int argc, char **argv)
{
    dz_connect_configuration cfg = {0};
    cfg.app_id = "APP ID HERE";
    cfg.product_id = "product_id";
    cfg.product_build_id = "0.0.0";

    dz_connect_handle dz_handle = dz_connect_new(&cfg);
    if (dz_handle == nullptr)
    {
        return 100;
    }

    auto err_code = dz_connect_activate(dz_handle, nullptr);
    if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
    {
        return err_code;
    }

    err_code = dz_connect_set_access_token(dz_handle, nullptr, nullptr, ACCESS_TOKEN);
    if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
    {
        return err_code;
    }

    auto dz_player_handle = dz_player_new(dz_handle);
    if (dz_player_handle == nullptr)
    {
        return 200;
    }

    err_code = dz_player_activate(dz_player_handle, nullptr);
    if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
    {
        return err_code;
    }

    err_code = dz_player_load(dz_player_handle, nullptr, nullptr, "dzmedia:///track/3135556");
    if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
    {
        return err_code;
    }

    err_code = dz_player_play(dz_player_handle, nullptr, nullptr, DZ_PLAYER_PLAY_CMD_START_TRACKLIST, DZ_TRACKLIST_AUTOPLAY_MANUAL, DZ_INDEX_IN_PLAYLIST_CURRENT);
    if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
    {
        return err_code;
    }
    std::cin.get();
    return 0;
}

突然我遇到了问题。 第一次运行显示了这个输出:

398748:201417 dz_bufferevent: [dz_bufferevent_on_activation:561] could not open /var/tmp/settings.dat

我创建了这个文件,但我怀疑它不应该是空的。 在创建了/var/tmp/settings.dat 的第二次运行后,我得到了这个输出:

399206:328658 dz_crash_handler: [dz_crash_handler_init:284] Crash Handler available
399206:329404 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329533 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329590 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329664 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329726 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329736 dzcrashreport-sender: [dz_crash_report_sender_retrieve_server_url_on_result:213] Error - couldn't read URL server err:0
399206:336505 pulseaudio-engine: [dz_audioengine_set_output_gain:1184] not init
399206:336520 pulseaudio-engine: [dz_audioengine_set_output_gain:1184] not init
399206:336577 player: [dz_player_play_licence:1756] unknown error 131079

我不明白,我做错了什么?

更新:
Deezer native API:v1.0.1-v00349200

仍然没有运气。尝试了 "user_profile_path" 的不同变体:

  • >。
  • ./
  • ./user - 在具有 777 权限的工作目录中创建
  • /变量/tmp

API 创建的文件夹中没有文件。

仍然有错误:

[dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
[dz_crash_report_sender_retrieve_server_url_on_result:213] Error - couldn't read URL server err:0

添加回调实现后我看到了这个:

  1. dz_connect_set_access_token 调用回调 dz_activity_operation_callback 状态为 DZ_ERROR_CONNECT_SESSION_OFFLINE_MODE
  2. dz_player_play 使用事件 DZ_PLAYER_EVENT_PLAYLIST_TRACK_NO_RIGHT 调用回调 dz_player_onevent_cb

嗯,我检查过我有权播放这首轨道。

最佳答案

"could not open"消息只是提供信息。 该文件将自动创建(或在检测到损坏时更新)。 这个问题似乎更多地与 dz_connect_configuration 有关,您必须设置 "user_profile_path"到一个有效的路径。这是存储用户临时文件的地方。 问候, 西里尔

更新:

一些小贴士也有帮助:

  • 我的错误,一个电话似乎丢失了: dz_connect_cache_path_set(dz_handle, NULL, NULL, <user_profile_path>);

  • DZ_INDEX_IN_PLAYLIST_CURRENT必须替换为 0 .我同意这个并不明显......

  • 检查您创建的 access_token 在调用 https://connect.deezer.com/oauth/auth.php?app_id=YOUR_APP_ID&redirect_uri=YOUR_REDIRECT_URI&perms=basic_access,email,offline_access 时是否启用了offline_access (参见:http://developers.deezer.com/api/oauthhttp://developers.deezer.com/api/permissions)

更新 2: 自上次回答以来,我在 Github 上发布了示例代码: https://github.com/deezer/native-sdk-samples

我建议你快速看一下:)

我在您私下发给我的完整代码中注意到:

  • 您没有调用 dz_connect_offline_mode(...,false);它实际上会触发Native SDK的登录过程。

  • 您不是在等待 DZ_CONNECT_EVENT_USER_LOGIN_OK加载并播放轨道。

最好的问候,

西里尔

关于c++ - linux下Deezer原生API : Unanble to create simple app,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37098241/

相关文章:

javascript - 通过 https 加载 Deezer Javascript SDK 超时

c++ - 物理工具包的可移植性

c++ - std::vector 的指针 std::vector

c++ - vector 中 ‘.’ 标记之前的预期不合格 ID

linux - 将 ftp 文件发送到 Google Cloud debian 9

python - 为什么在 python 控制台中的 SQLAlchemy base.metadata.create_all(engine) 中不显示表?

python - 在 Python 中使用 BeautifulSoup 从脚本标签中提取数据

java - "findLibrary returned null"在 Android 上连接到 deezer 的播放器模块时

c++ - 有人在为 C++ 开发高级标准库吗

linux - 多线程中的socket fd