设备移植 SDK 后,绑定在腾讯连连小程序后,可在腾讯连连小程序授权设备接入酷狗音乐的权限;
通过酷狗音乐小程序可控制设备播放酷狗音乐的音频资源。
小程序通过数据模板下发歌单,待播放歌曲ID;控制播放/暂停/下一首/前一首;设置播放进度/播放音质等;
设备通过数据模板上报播放信息,当前歌曲ID/播放音质/播放进度等;;
$thing/up/property/{product_id}/{device_name}
$thing/down/property/{product_id}/{device_name}
$thing/up/service/{product_id}/{device_name}
$thing/down/service/{product_id}/{device_name}
歌曲信息查询
{
"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 等信息"}]
}
}
参考文档 docs/数据模板开发
,酷狗音乐数据模板从腾讯云物联网开发平台产品获取。
int QCLOUD_IOT_kgmusic_enable(void *mqtt_client, char *product_id, char *device_name, QCLOUD_IOT_KGMUSIC_T *kgmusic)
开启设备查询歌曲与歌单信息的功能;需要设置歌曲查询与歌单查询的回调处理函数
int QCLOUD_IOT_kgmusic_syncquery_song(void *client, char *song_id, QCLOUD_IOT_KGMUSIC_T *kgmusic, int timeout_s);
通过 song_id 查询,阻塞等待获取歌曲信息,调用设置的歌曲查询回调处理函数处理查询到的歌曲信息;成功查询返回 0,否则为失败
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 字段;
samples/kgmusic/kgmusic_data_template_sample.c
适配 _player 开头的函数
拿到 url 时需要自行播放器 http 下载音乐
- 编译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
- 执行 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