Skip to content

Latest commit

 

History

History
209 lines (183 loc) · 15.2 KB

设备接入酷狗音乐.md

File metadata and controls

209 lines (183 loc) · 15.2 KB

一、 概述

设备移植 SDK 后,绑定在腾讯连连小程序后,可在腾讯连连小程序授权设备接入酷狗音乐的权限;

通过酷狗音乐小程序可控制设备播放酷狗音乐的音频资源。

二、 交互流程

时序图

三、 设备协议

1. 数据模板

小程序通过数据模板下发歌单,待播放歌曲ID;控制播放/暂停/下一首/前一首;设置播放进度/播放音质等;

设备通过数据模板上报播放信息,当前歌曲ID/播放音质/播放进度等;;

1.1 topic

$thing/up/property/{product_id}/{device_name}
$thing/down/property/{product_id}/{device_name}

2. 歌曲与歌单查询

2.1 topic

$thing/up/service/{product_id}/{device_name}
$thing/down/service/{product_id}/{device_name}

2.2 数据格式

歌曲信息查询
{
	"method": "kugou_query_song",
	"clientToken": "与之前不重复的字符串",
	"params": {
		 "song_id": "xxxxx",	
	}
}
{
	"method": "kugou_query_song_reply",
	"clientToken": "与上行消息的保持一致",
	"code": 0,
	"status": "",
    "data":{"song_info"}
}

歌单查询
{
	"method": "kugou_user_command",
	"clientToken": "与之前不重复的字符串",
	"timestamp": 1594108563000
	"params": {"album_id/playlist_id/top_id":"歌单ID","page":请求歌单的第几页歌曲从1开始, "size":每页几首歌曲,"kugou_command":"歌单查询命令"}
}
{
  "method": "kugou_user_command_reply",
  "clientToken": "20a4ccfd-d308-11e9-86c6-5254008a4f10",
  "code": 0,
  "status": "",
  "data": {
    "歌单信息"
	"total": 歌单总共多少首歌曲,
    "songs": [{"song_id 等信息"},{"song_id 等信息"},{"song_id 等信息"}]
  }
}

四、 SDK 适配

1. 数据模板

参考文档 docs/数据模板开发,酷狗音乐数据模板从腾讯云物联网开发平台产品获取。

2. 歌曲查询与歌单查询

2.1 查询功能开启

int QCLOUD_IOT_kgmusic_enable(void *mqtt_client, char *product_id, char *device_name, QCLOUD_IOT_KGMUSIC_T *kgmusic)

开启设备查询歌曲与歌单信息的功能需要设置歌曲查询与歌单查询的回调处理函数

2.2 歌曲查询

int QCLOUD_IOT_kgmusic_syncquery_song(void *client, char *song_id, QCLOUD_IOT_KGMUSIC_T *kgmusic, int timeout_s);

通过 song_id 查询阻塞等待获取歌曲信息调用设置的歌曲查询回调处理函数处理查询到的歌曲信息成功查询返回 0否则为失败

2.3 歌单查询

int QCLOUD_IOT_kgmusic_syncquery_songlist(void *client, QCLOUD_IOT_KGMUSIC_SONGLIST_PARAMS_T *list_query_params, QCLOUD_IOT_KGMUSIC_T *kgmusic, int timeout_s);

通过 list_type list_id 查询歌单列表信息阻塞等待获取歌单信息调用设置的歌单查询回调处理函数处理查询到的歌单信息成功查询返回 0否则为失败
通过设置 except_fields 可过滤不希望返回的歌单信息 json key 字段

3. 参考例子

samples/kgmusic/kgmusic_data_template_sample.c
适配 _player 开头的函数
拿到 url 时需要自行播放器 http 下载音乐

五、 编译运行示例程序

  1. 编译SDK
    修改CMakeLists.txt确保以下选项存在(以密钥认证设备为例)
    set(BUILD_TYPE                   "release")
    set(COMPILE_TOOLS                "gcc") 
    set(PLATFORM 	                 "linux")
    set(FEATURE_MQTT_COMM_ENABLED ON)
    set(FEATURE_AUTH_MODE "KEY")
    set(FEATURE_AUTH_WITH_NOTLS OFF)
    set(FEATURE_DEBUG_DEV_INFO_USED  OFF)
    set(FEATURE_DEBUG_DEV_INFO_USED  OFF)
    set(FEATURE_KGMUSIC_ENABLED  ON)

执行编译脚本 c ./cmake_build.sh 示例输出位于output/release/bin文件夹中。 2. 填写设备信息 将上面在腾讯云物联网开发平台 IoT Explorer 创建的设备的设备信息(以密钥认证设备为例)填写到 device_info.json 中 c { "auth_mode":"KEY", "productId":"XXX", "deviceName":"xxx", "key_deviceinfo":{ "deviceSecret":"xxxxxxxx" } } 3. ubuntu linux 环境安装 mplayer sudo apt install mplayer windows 平台 'http://mplayerwin.sourceforge.net/downloads.html' 下载 mplayer for windows 解压至程序运行目录下形成目录 mplayer/mplayer.exe

  1. 执行 kgmusic_data_template_sample 示例程序
./output/release/bin/kgmusic_data_template_sample 
INF|2021-07-19 13:01:23|qcloud_iot_device.c|iot_device_info_set(55): SDK_Ver: 3.1.6, Product_ID: CJTPB68RMZ, Device_Name: teda_rtos
INF|2021-07-19 13:01:23|HAL_TCP_linux.c|HAL_TCP_Connect(111): connected with TCP server: CJTPB68RMZ.iotcloud.tencentdevices.com:1883
INF|2021-07-19 13:01:25|mqtt_client.c|IOT_MQTT_Construct(125): mqtt connect with id: t4K4s success
DBG|2021-07-19 13:01:25|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(147): topicName=$thing/down/property/CJTPB68RMZ/teda_rtos|packet_id=40623
DBG|2021-07-19 13:01:25|data_template_client.c|_template_mqtt_event_handler(277): template subscribe success, packet-id=40623
INF|2021-07-19 13:01:25|kgmusic_data_template_sample.c|event_handler(169): subscribe success, packet-id=40623
INF|2021-07-19 13:01:25|data_template_client.c|IOT_Template_Construct(885): Sync device data successfully
INF|2021-07-19 13:01:25|kgmusic_data_template_sample.c|main(1581): Cloud Device Construct Success
DBG|2021-07-19 13:01:25|kgmusic_data_template_sample.c|_usr_init(202): add your init code here
INF|2021-07-19 13:01:25|kgmusic_data_template_sample.c|_register_data_template_property(1213): data template property=pause_play registered.
INF|2021-07-19 13:01:25|kgmusic_data_template_sample.c|_register_data_template_property(1213): data template property=cur_play_list registered.
INF|2021-07-19 13:01:25|kgmusic_data_template_sample.c|_register_data_template_property(1213): data template property=pre_next registered.
INF|2021-07-19 13:01:25|kgmusic_data_template_sample.c|_register_data_template_property(1213): data template property=play_mode registered.
INF|2021-07-19 13:01:25|kgmusic_data_template_sample.c|_register_data_template_property(1213): data template property=volume registered.
INF|2021-07-19 13:01:25|kgmusic_data_template_sample.c|_register_data_template_property(1213): data template property=play_position registered.
INF|2021-07-19 13:01:25|kgmusic_data_template_sample.c|_register_data_template_property(1213): data template property=cur_song_id registered.
INF|2021-07-19 13:01:25|kgmusic_data_template_sample.c|_register_data_template_property(1213): data template property=control_seq registered.
INF|2021-07-19 13:01:25|kgmusic_data_template_sample.c|_register_data_template_property(1213): data template property=recommend_quality registered.
INF|2021-07-19 13:01:25|kgmusic_data_template_sample.c|_register_data_template_property(1213): data template property=song_index registered.
INF|2021-07-19 13:01:25|kgmusic_data_template_sample.c|main(1605): Register data template propertys Success
DBG|2021-07-19 13:01:25|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(147): topicName=$thing/down/service/CJTPB68RMZ/teda_rtos|packet_id=40624
DBG|2021-07-19 13:01:26|data_template_client.c|_template_mqtt_event_handler(277): template subscribe success, packet-id=40624
INF|2021-07-19 13:01:26|kgmusic_data_template_sample.c|event_handler(169): subscribe success, packet-id=40624
DBG|2021-07-19 13:01:26|service_mqtt.c|_service_mqtt_sub_event_handler(166): resource topic subscribe success
DBG|2021-07-19 13:01:26|mqtt_client_publish.c|qcloud_iot_mqtt_publish(346): publish packetID=0|topicName=$thing/up/property/CJTPB68RMZ/teda_rtos|payload={"method":"report_info", "clientToken":"CJTPB68RMZ-0", "params":{"module_hardinfo":"ESP8266","module_softinfo":"V1.0","fw_ver":"3.1.6","imei":"11-22-33-44","lat":"22.546015","lon":"113.941125", "device_label":{"append_info":"your self define info"}}}
DBG|2021-07-19 13:01:26|data_template_client.c|_reply_ack_cb(194): replyAck=0
DBG|2021-07-19 13:01:26|data_template_client.c|_reply_ack_cb(197): Received Json Document={"method":"report_info_reply","clientToken":"CJTPB68RMZ-0","code":0,"status":"success"}
DBG|2021-07-19 13:01:27|mqtt_client_publish.c|qcloud_iot_mqtt_publish(346): publish packetID=0|topicName=$thing/up/property/CJTPB68RMZ/teda_rtos|payload={"method":"get_status", "clientToken":"CJTPB68RMZ-1"}
DBG|2021-07-19 13:01:27|data_template_client_manager.c|_handle_template_reply_callback(457): control data from get_status_reply
INF|2021-07-19 13:01:27|kgmusic_data_template_sample.c|OnControlMsgCallback(1192): Property=song_index changed
INF|2021-07-19 13:01:27|kgmusic_data_template_sample.c|OnControlMsgCallback(1192): Property=recommend_quality changed
INF|2021-07-19 13:01:27|kgmusic_data_template_sample.c|OnControlMsgCallback(1192): Property=control_seq changed
INF|2021-07-19 13:01:27|kgmusic_data_template_sample.c|OnControlMsgCallback(1192): Property=cur_song_id changed
INF|2021-07-19 13:01:27|kgmusic_data_template_sample.c|OnControlMsgCallback(1192): Property=play_position changed
INF|2021-07-19 13:01:27|kgmusic_data_template_sample.c|OnControlMsgCallback(1192): Property=volume changed
INF|2021-07-19 13:01:27|kgmusic_data_template_sample.c|OnControlMsgCallback(1192): Property=play_mode changed
INF|2021-07-19 13:01:27|kgmusic_data_template_sample.c|OnControlMsgCallback(1192): Property=pre_next changed
INF|2021-07-19 13:01:27|kgmusic_data_template_sample.c|OnControlMsgCallback(1192): Property=cur_play_list changed
INF|2021-07-19 13:01:27|kgmusic_data_template_sample.c|OnControlMsgCallback(1192): Property=pause_play changed
DBG|2021-07-19 13:01:27|data_template_client.c|_get_status_reply_ack_cb(211): replyAck=0
DBG|2021-07-19 13:01:27|data_template_client.c|_get_status_reply_ack_cb(215): Received Json Document={"method":"get_status_reply","clientToken":"CJTPB68RMZ-1","code":0,"status":"success","data":{"reported":{"cur_play_list":"{\"play_type\":\"xxxxxx\",\"play_params\":{},\"play_img\":\"xxxxxx\",\"play_name\":\"xxxxx\"}","song_index":7,"pre_next":2,"play_position":0,"recommend_quality":0,"control_seq":xxxxxx,"play_mode":0,"pause_play":1,"cur_song_id":"xxxxx","volume":70}}}
DBG|2021-07-19 13:01:27|mqtt_client_publish.c|qcloud_iot_mqtt_publish(346): publish packetID=0|topicName=$thing/up/property/CJTPB68RMZ/teda_rtos|payload={"method":"clear_control", "clientToken":"CJTPB68RMZ-1"}
DBG|2021-07-19 13:01:27|kgmusic_data_template_sample.c|main(1648): Get data status success
DBG|2021-07-19 13:01:27|kgmusic_data_template_sample.c|deal_down_stream_user_logic(257): someting about your own product logic wait to be done
DBG|2021-07-19 13:01:27|data_template_client.c|IOT_Template_ControlReply(716): Report Document: {"code":0, "clientToken":"CJTPB68RMZ-1"}
DBG|2021-07-19 13:01:27|mqtt_client_publish.c|qcloud_iot_mqtt_publish(346): publish packetID=0|topicName=$thing/up/property/CJTPB68RMZ/teda_rtos|payload={"method":"control_reply", "code":0, "clientToken":"CJTPB68RMZ-1"}
DBG|2021-07-19 13:01:27|kgmusic_data_template_sample.c|main(1674): Contol msg reply success
DBG|2021-07-19 13:01:27|mqtt_client_publish.c|qcloud_iot_mqtt_publish(346): publish packetID=0|topicName=$thing/up/property/CJTPB68RMZ/teda_rtos|payload={"method":"report", "clientToken":"CJTPB68RMZ-2", "params":{"pause_play":1,"cur_play_list":"{\"play_type\":\"xxxxxx\",\"play_params\":{},\"play_img\":\"xxxxxx\",\"play_name\":\"xxxxx\"}","play_mode":0,"volume":70,"play_position":0,"cur_song_id":"xxxxxx","control_seq":xxxxxx,"recommend_quality":0,"song_index":7}}
INF|2021-07-19 13:01:27|kgmusic_data_template_sample.c|main(1691): data template reporte success
DBG|2021-07-19 13:01:27|kgmusic_data_template_sample.c|_kgmusic_parse_curr_play_list(844): parse play list data: {\"play_type\":\"xxxxxx\",\"play_params\":{},\"play_img\":\"xxxxx.jpg\",\"play_name\":\"xxxxx\"}
DBG|2021-07-19 13:01:27|mqtt_client_publish.c|qcloud_iot_mqtt_publish(346): publish packetID=0|topicName=$thing/up/service/CJTPB68RMZ/teda_rtos|payload={"method":"kugou_user_command","clientToken":"kugoumusic-CJTPB68RMZ-0","params":{"kugou_command":"xxxxxx","except_fields":"songs.*.has_accompany|singer_img|mv_id|album_id|album_img_mini|singer_name|album_img_small|album_img_medium|album_img_large|album_name|album_img|singer_id"}}
INF|2021-07-19 13:01:27|kgmusic_data_template_sample.c|OnReportReplyCallback(248): recv report reply response, reply ack: 0
DBG|2021-07-19 13:01:28|service_mqtt.c|_service_mqtt_cb(116): topic=$thing/down/service/CJTPB68RMZ/teda_rtos
DBG|2021-07-19 13:01:28|service_mqtt.c|_service_mqtt_cb(117): len=2713, topic_msg={"method":"kugou_user_command_reply","clientToken":"kugoumusic-CJTPB68RMZ-0","code":0,"status":"OK","data":{"songs":[{"is_vip_song":0,"playable_code":0,"song_id":"xxxxxx","song_name":"xxxxxx"},{"is_vip_song":0,"playable_code":0,"song_id":"xxxxx","song_name":"xxxxx"},{"is_vip_song":0,"playable_code":0,"song_id":"xxxxx","song_name":"xxxxx"},{"is_vip_song":0,"playable_code":0,"song_id":"xxxxx","song_name":"xxxxx"},{"is_vip_song":0,"playable_code":0,"song_id":"xxxxx","song_name":"xxxxx (Natural)"},{"is_vip_song":0,"playable_code":0,"song_id":"xxxxx","song_name":"xxxxx"},{"is_vip_song":0,"playable_code":0,"song_id":"xxxxx","song_name":"xxxxxx"},{"is_vip_song":0,"playable_code":0,"song_id":"xxxxx","song_name":"xxxxx"},{"is_vip_song":0,"playable_code":0,"song_id":"xxxxx","song_name":"xxxxx"},{"is_vip_song":0,"playable_code":0,"song_id":"xxxxx","song_
DBG|2021-07-19 13:01:28|kgmusic_data_template_sample.c|_kgmusic_query_songlist_callback(517): song list id:, total:30, cunrr_count:5, name:
DBG|2021-07-19 13:01:28|kgmusic_data_template_sample.c|_kgmusic_downmsg_proc_songid(1452): play song id xxxxx, -1
DBG|2021-07-19 13:01:28|kgmusic_data_template_sample.c|_kgmusic_downmsg_proc_playpause(1405): play song
DBG|2021-07-19 13:01:28|mqtt_client_publish.c|qcloud_iot_mqtt_publish(346): publish packetID=0|topicName=$thing/up/service/CJTPB68RMZ/teda_rtos|payload={"method":"kugou_query_song","clientToken":"kugoumusic-CJTPB68RMZ-1","params":{"song_id":"xxxxx"}}
DBG|2021-07-19 13:01:29|service_mqtt.c|_service_mqtt_cb(116): topic=$thing/down/service/CJTPB68RMZ/teda_rtos
DBG|2021-07-19 13:01:29|service_mqtt.c|_service_mqtt_cb(117): len=690, topic_msg={"method":"kugou_query_song_reply","clientToken":"kugoumusic-CJTPB68RMZ-1","code":0,"status":"OK","data":{"song_size_hq":xxxxx,"song_id":"xxxxxx","try_begin":0,"try_end":0,"song_url":"xxxxx.mp3","song_name":"xxxxxx","song_url_sq":"","song_size_sq":0,"singer_name":"xxxxx","song_size":xxxxx,"song_url_hq":"","duration":xxxx,"playable_code":0,"support_quality":"HQ,LQ","try_url":"xxxxx.mp3","try_size":xxxx}}
DBG|2021-07-19 13:01:29|kgmusic_data_template_sample.c|_player_play(1084): play song xxxxx-xxxxx.mp3-xxxxx-0
DBG|2021-07-19 13:01:30|kgmusic_data_template_sample.c|main(1679): No control msg received...
DBG|2021-07-19 13:01:30|mqtt_client_publish.c|qcloud_iot_mqtt_publish(346): publish packetID=0|topicName=$thing/up/property/CJTPB68RMZ/teda_rtos|payload={"method":"report", "clientToken":"CJTPB68RMZ-3", "params":{"pause_play":1,"play_position":0,"cur_song_id":"xxxxx","recommend_quality":0}}
INF|2021-07-19 13:01:30|kgmusic_data_template_sample.c|main(1691): data template reporte success