# 1、介绍 ## 概述 本文档介绍了KTV系统的功能以及接口的调用,统一开放三方接口API,能够在oppo、vivo、小米的安卓13.0手机上体验震撼的K歌体验。 KTV系统能满足统一开放API在Android 13.0机器上K歌实现几乎无延时耳返(Mic数字信号直接输入IC,接着直接输出至耳机,(vivo)实验室测试值35ms);搭载多种默认经典混响和EQ均衡器音效,以及各个厂家可额外扩展的音效。 不同手机厂商支持的音效类型:【红色标记为额外扩展的音效】 | 手机 | 混响音效 | EQ均衡器音效 | | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | | oppo | 0:无、1:KTV、2:剧场、3:音乐厅、4:录音棚 | 0:无、1:标准、2:浑厚、3:清脆、4:明亮 | | vivo | 0:无、1:KTV、2:剧场、3:音乐厅、4:录音棚10: 温暖、11: 空灵、12: 3D迷幻、13: 老唱片 | 0:无、1:标准、2:浑厚、3:清脆、4:明亮10: 温暖、11: 空灵、12: 3D迷幻、13: KTV | | 小米 | 0:无、1:KTV、2:剧场、3:音乐厅、4:录音棚 | 0:无、1:标准、2:浑厚、3:清脆、4:明亮 | 另外手机KTV提供非常小的接口库,调用简单,可使三方app快捷使用到卡拉OK效果。 如需在安卓13之前老版本集成该功能,请联系各个厂家提供方提供KTV旧方案,旧方案此前均有开放出来。 ## 名词和缩写 - KTV Karaoke Television(卡拉ok) - OPPO 本文指代OPPO、OnePlus或realme手机设备 ## 文档说明 本文档介绍了怎样使用KTV SDK进行应用程序开发,并给出了完整的例程。 本文是针对具有一些安卓编程经验的安卓应用程序员而写的。以下是文档中的一些约定符号: | | | | ---------- | -------------------------------------------------- | | **符号** | **含义** | | \[in\] | 表明该参数是调用时赋值的参数:输入参数 | | \[out\] | 该参数在函数返回时被赋值:输出参数 | | \[in/out\] | 该参数在函数调用时作为输入、函数返回时作为输出参数 | OPPO平台接入前需要进行鉴权,详情见第4部分OPPO平台鉴权。 1. # 接口说明 1. ## 接口简介 1. ### 接口函数列表 MediaClient客户端类API提供如下函数供调用: | 函数名称 | 功能简介 | | --------------------------- | ------------------------------------------------------------ | | initialize | 初始化并获取KTV MediaClient单例。 | | getVersion | 获取KTV SDK库版本号。 | | isDeviceSupportKaraoke | 判断当前机器设备能否支持KTV。 | | isAppSupportKaraoke | 应用是否支持KTV。【oppo、vivo返回默认值true,小米手机检测】补充说明:小米平台通过应用白名单控制是否支持app使用KTV功能。 若app申请支持KTV功能,请联系小米三方应用外部支持(mi-support-thirdapps@xiaomi.com)。 | | isSupported | 应用是否支持KTV功能使用,注意此为前三个接口组合判断结果,通常来说三方只使用该接口判断是否支持。 | | getKaraokeSupportParameters | 应用获取当前机器支持KTV的JSON参数信息,比如应用设置何种参数(AudioTrack的采样率、flag等,AudioRecord的source等),判断是否可以正常使用KTV功能。 | | openKTVDevice | 打开KTV设备,此动作必须是刚发生在播放伴奏前。 | | closeKTVDevice | 关闭KTV设备。 | | setPlayFeedbackParam | 控制耳返开启/关闭接口,系统默认打开,建议无论怎么app调用都打开调用一次,排除其他app不正确调用的干扰。 | | getPlayFeedbackParam | 获取当前耳返开关状态。 | | setListenRecordSame | 听录一致,选择录音输出数据,建议接口调用动作应发生在openKTVDevice后与录音前。【小米不支持此功能】 | | getListenRecordSame | 听录一致,获取当前音源的输出方式值。【仅vivo支持此功能】 | | setMicVolParam | 设置人声音量大小。 | | getMicVolParam | 获取当前人声音量值。 | | setExtSpeakerParam | 控制外接音响设备开关,这个接口的开出是为了当用户使用大音响或者大功放设备K歌,此情景下啸叫厉害,故开了此接口。【仅vivo支持此功能】 | | getExtSpeakerParam | 获取当前外接音响设备开关状态。【仅vivo支持此功能】 | | setToneMode | 设置变声。【仅oppo支持此功能】 | | setMixerSoundType | 设置混响效果。 | | setEqualizerType | 设置EQ均衡器音效。 | | getExtMixerSoundType | 扩展混响音效。 | | getExtEqualizerType | 扩展EQ均衡器音效。 | MediaClientUtil客户端辅助类API提供如下函数供调用: | 函数名称 | 功能简介 | | ---------------------- | ------------------------------------------------------------ | | isOsVivo | 是否为vivo手机设备 | | isOsOppo | 是否为OPPO手机设备 | | isOsXiaoMi | 是否为小米手机设备 | | isKtvNewApiSupported | 应用是否支持KTV新架构API功能使用,和直接调用MediaClient的【isSupported】结果一致 | | isTargetAudioSupported | 目标客户端AudioRecord或AudioTrack的参数是否能够使用KTV新API功能 | KtvSupportInfo客户端辅助类API,该类信息是从【getKaraokeSupportParameters】的JSON数据解析而来,表示当前机器支持KTV AudioTrack和AudioRecord的JSON参数信息,该类目前不直接提供功能函数给三方使用,只是用于辅助判断目标客户端AudioRecord或AudioTrack的参数是否能够使用KTV新API相关功能。 ### 开发包组件 - Android平台 | 开发组件 | 组件组成 | 说明 | | --------- | :----------------------------------------------------------- | ------------------------------------------------------------ | | 开放API类 | MediaClient.javaMediaClientUtil.javaKtvSupportInfo.java | 接口类声明 | | 运行时库 | gsai.sdk:media-client:1.0.0-SNAPSHOTgsai.sdk:mediastub:1.0.0-SNAPSHOT | SDK依赖 补充:1、添加 URL地址和版本1.0.0根据release最新版本修改2、如何依赖库代码片段请查看第4部分内容 | ### 开发包支持情况 | 系统 | 支持的安卓版本号 | 备注 | | ------- | ---------------- | ------------------------------------------------------------ | | Android | 13.0 | 小米平台支持:小米12S、小米12S Pro、小米12S Ultra和Android T以上版本的高通平台机型 | 1. ## 函数调用 1. ### initialize - 函数原型 public static MediaClient initialize(Context context) - 功能 进程级的初始化操作,初始化并获取KTV MediaClient单例用于功能API调用。 - 参数 - context \[in\] 上下文,必现非空,建议传入全局Context,如使用getApplicationContext()。 - 返回值 静态函数调用,返回KTV MediaClient单例: | 返回值 | 意义 | | --------------- | -------------- | | MediaClient单例 | 函数执行成功。 | - 说明 初始化单例函数必须在调用其他函数之前调用,可多线程调用。 - 示例 MediaClient mc = MediaClient.initialize(getApplicationContext()); - 参见 略 ### getVersion - 函数原型 public int getVersion() - 功能 获取KTV SDK库版本号。 - 参数 无。 - 返回值 如果函数调用成功返回大于或等于10000,表示KTV API版本可用,否则返回-1,可能的值如下: | 返回值 | 意义 | | ------ | -------------------------------------------- | | 10000 | 返回值大于或等于10000,表示KTV API版本可用。 | | -1 | 该KTV API版本不可用 | - 说明 使用该返回值判断KTV API版本是否可用。 - 示例 // KTV sdk版本号 int version = mMediaClient.getVersion(); Log.d(TAG, "version is: " + version); //不支持的版本,三方可选择自行适配(部分接口如果后续进行了拓展需要) if (version \< 10000) { //其他替代方案或界面提示 Log.d(TAG, "KTV version is not supported"); return; } else { Log.d(TAG, " KTV version is supported"); } - 参见 isSupported ### isDeviceSupportKaraoke - 函数原型 public boolean isDeviceSupportKaraoke() - 功能 判断当前机器设备能否支持KTV。 - 参数 无。 - 返回值 可能的值如下: | 返回值 | 意义 | | ------ | ------ | | true | 支持 | | false | 不支持 | - 说明 使用该返回值判断当前机器设备能否支持KTV。 - 示例 // 判断当前机器设备能否支持KTV boolean isSupportedForDevice = mMediaClient.isDeviceSupportKaraoke(); if (isSupportedForDevice) { Log.d(TAG, "KTV is supported for current device"); } else { Log.d(TAG, "KTV is not supported for current device"); return; } - 参见 isSupported ### isAppSupportKaraoke - 函数原型 public boolean isAppSupportKaraoke(String appName) - 功能 应用是否支持KTV。【小米手机检测,OV返回默认值true】 补充说明:小米平台通过应用白名单控制是否支持app使用KTV功能。 若app申请支持KTV功能,请联系小米三方应用外部支持(mi-support-thirdapps@xiaomi.com)。 - 参数 - appName \[in\] APP包名,非空。 - 返回值 可能的值如下: | 返回值 | 意义 | | ------ | ------ | | true | 支持 | | false | 不支持 | - 说明 使用该返回值判断应用是否支持KTV。 - 示例 // 判断KTV是否支持当前APP boolean isSupportedForApp = mMediaClient.isAppSupportKaraoke(getApplicationContext().getPackageName()); if (isSupportedForApp) { Log.d(TAG, "KTV is supported for current APP"); } else { Log.d(TAG, "KTV is not supported for current device"); return; } - 参见 isSupported ### isSupported - 函数原型 public boolean isSupported() - 功能 应用是否支持KTV功能使用,注意此为前三个接口【getVersion】、【isDeviceSupportKaraoke】、【isAppSupportKaraoke】组合判断结果,因此通常来说三方只使用该接口判断是否支持。 - 参数 无 - 返回值 可能的值如下: | 返回值 | 意义 | | ------ | ------ | | true | 支持 | | false | 不支持 | - 说明 使用该返回值判断应用是否支持KTV功能使用,即KTV整个环境是否可用。 - 示例 boolean isNewApiSupported = client.isSupported(); if (DEBUG) { if (isNewApiSupported) { Log.d(TAG, "KTV is supported for the new architecture of KTV APIs, you can use them"); } else { Log.d(TAG, "KTV is not supported for the new architecture of KTV APIs, " + "you CAN NOT use them"); } } - 参见 getVersion、isDeviceSupportKaraoke、isAppSupportKaraoke ### getKaraokeSupportParameters - 函数原型 public String getKaraokeSupportParameters() - 功能 应用获取当前机器支持KTV的JSON参数信息,比如应用设置何种参数(AudioTrack的采样率、flag等,AudioRecord的source等),判断是否可以正常使用KTV功能。 - 参数 无 - 返回值 可能的值如下: | 返回值 | 意义 | | ------------------------------------------------------------ | ------------------------------------------------------------ | | { "audioTrackParam":[ { "streamType":"3", "sampleRate":"48000", "format":"2", "flag":"8" }], "audioRecordParam":[ { "streamType":"default", "sampleRate":"48000", "format":"2", "flag":"0x8", "source":"1" }], "isSupportListenRecordSame":false, "isSupportExtSpeakerParam":false, "isSupportToneMode":false} | 参数格式定义:1、若支持任意参数, value置为"default";2、没有返回的key, value为默认值"default";3、所有value给十进制数值的字符串形式, 例如AUDIO_SOURCE_MIC需要返回"1", AUDIO_OUTPUT_FLAG_DEEP_BUFFER需要返回"8"。若该手机厂商不支持某个接口API则将配置不支持false,例如不支持setToneMode接口则设置isSupportToneMode:false。4、***\*注意:只在此处声明不支持的接口,JSON参数中没有声明的接口都表示支持\**** | | null | 空值,KTV API不支持使用。默认都不会为空值 | - 说明 该返回值JSON信息表示当前机器支持KTV的JSON参数信息,比如应用设置目标参数(AudioTrack的采样率、flag等,AudioRecord的source等),判断是否可以正常使用KTV功能。 **注意:此JSON参数中只声明不支持的接口API,JSON参数中没有声明的接口都表示支持。** - 示例 String ktvSupportInfoJson = mMediaClient.getKaraokeSupportParameters(); Log.d(TAG, "KTV ktvSupportInfoJson: " + ktvSupportInfoJson); KtvSupportInfo supportInfo = new Gson().fromJson(ktvSupportInfoJson, KtvSupportInfo.class); Log.d(TAG, "KTV isSupportListenRecordSame: " + supportInfo.isSupportListenRecordSame); Log.d(TAG, "KTV isSupportExtSpeakerParam: " + supportInfo.isSupportExtSpeakerParam); Log.d(TAG, "KTV isSupportToneMode: " + supportInfo.isSupportToneMode); KtvSupportInfo.TrackSupportInfo targetTrackInfo = new KtvSupportInfo.TrackSupportInfo("3", "48000", "2", "8"); Log.d(TAG, "KTV targetTrackInfo: " + targetTrackInfo.toString()); if (!MediaClientUtil.isTargetAudioSupported(supportInfo, targetTrackInfo)) { return; } // track equals KtvSupportInfo.RecordSupportInfo targetRecordInfo = new KtvSupportInfo.RecordSupportInfo("default", "48000", "2", "8", "1"); Log.d(TAG, "KTV targetRecordInfo: " + targetRecordInfo.toString()); if (!MediaClientUtil.isTargetAudioSupported(supportInfo, targetRecordInfo)) { return; } // record equals // Anything you can do loudly with KTV - 参见 无 ### openKTVDevice - 函数原型 public void openKTVDevice() - 功能 打开KTV设备,此动作必须是刚发生在播放伴奏前。 - 参数 无 - 返回值 无 - 示例 略; - 参见 closeKTVDevice ### closeKTVDevice - 函数原型 public void closeKTVDevice() - 功能 关闭KTV设备。 - 参数 无 - 返回值 无 - 示例 略; - 参见 openKTVDevice ### setPlayFeedbackParam - 函数原型 public void setPlayFeedbackParam(int param) - 功能 控制耳返开启/关闭接口,系统默认打开,建议无论怎么app调用都打开调用一次,排除其他app不正确调用的干扰。 - 参数 - param \[in\] > 设置当前耳返开关状态:0 关闭,1 开启 - 返回值 无 - 说明 控制耳反开关功能,在【openKTVDevice】前后调用均可。 小米仅支持在 openKTVDevice后调用 setPlayFeedbackParam, 否则设置不生效。 - 示例 略 - 参见 > getPlayFeedbackParam - 函数原型 public int getPlayFeedbackParam() - 功能 获取当前耳返开关状态。 - 参数 > 无 - 返回值 可能的值如下: | 返回值 | 意义 | | ------ | ---------------------- | | 0 | 开关未打开 | | 1 | 开关已打开 | | -1 | 当前KTV该API接口不可用 | - 说明 判断当前耳返开关状态 - 示例 略 - 参见 > setPlayFeedbackParam ### setListenRecordSame - 函数原型 public void setListenRecordSame(int param) - 功能 听录一致,选择录音输出数据,建议接口调用动作应发生在openKTVDevice后与录音前。【仅小米不支持此功能】 - 参数 - param \[In\] 传入参数为录音数据输出类型,类型为:【此功能不同手机厂商支持情况不同,如下】 | 手机厂商 | 类型 | 说明 | | ---------- | ---- | ----------------------------------------------------------- | | oppo、vivo | 0 | 录音输出为原始录音数据 | | oppo | 1 | 录音输出为录音+应用playback数据,就是耳返数据(直播场景用) | | vivo | 2 | 录音输出为经过算法音效后的录音数据 | - 返回值 无 - 说明 该函数建议调用动作应发生在openKTVDevice后与录音前。 若设备不支持,则该API接口不可用。 若不支持则2.2.6中JSON支持参数中设置" isSupportListenRecordSame":false - 示例 略 - 参见 > getListenRecordSame ### getListenRecordSame - 函数原型 public int getListenRecordSame() - 功能 听录一致,获取当前音源的输出方式值。【仅vivo支持此功能】 - 参数 无 - 返回值 听录一致,获取当前音源的输出方式值,可能的值如下: 【此功能不同手机厂商支持情况不同】 | 手机厂商 | 返回值 | 意义 | | ---------- | ------ | ----------------------------------------------------------- | | oppo、vivo | 0 | 录音输出为原始录音数据 | | oppo | 1 | 录音输出为录音+应用playback数据,就是耳返数据(直播场景用) | | vivo | 2 | 录音输出为经过算法音效后的录音数据 | | oppo、vivo | -1 | 当前KTV该API接口不可用 | - 说明 若设备不支持,则该API接口不可用 若不支持则2.2.6中JSON支持参数中设置" isSupportListenRecordSame":false - 示例 略 - 参见 > setListenRecordSame ### setMicVolParam - 函数原型 public void setMicVolParam(int param) - 功能 设置人声音量大小。 - 参数 - param \[in\] 设置人声音量大小值范围:0\~15 - 返回值 无 - 说明 设置录音声音音量大小值。 - 示例 略 - 参见 getMicVolParam ### getMicVolParam - 函数原型 public int getMicVolParam() - 功能 获取当前人声音量值。 - 参数 无 - 返回值 可能的值如下: | 返回值 | 意义 | | ------ | ----------------------------------- | | 0~15 | 获取当前设置的KTV录音声音音量大小值 | | -1 | 当前KTV该API接口不可用 | - 说明 获取当前设置的KTV录音声音音量大小值,范围:0\~15 - 示例 略 - 参见 setMicVolParam ### setExtSpeakerParam - 函数原型 public void setExtSpeakerParam(int param) - 功能 控制外接音响设备开关,这个接口的开出是为了当用户使用大音响或者大功放设备K歌,此情景下啸叫厉害,故开了此接口。【仅vivo支持此功能】 - 参数 - param \[in\] 0:关 1:开 - 返回值 无 - 说明 控制外接音响设备开关状态:0:关 1:开。 若设备不支持,则该API接口不可用。 若不支持则2.2.6中JSON支持参数中设置"isSupportExtSpeakerParam":false - 示例 略 - 参见 getExtSpeakerParam ### getExtSpeakerParam - 函数原型 public int getExtSpeakerParam() - 功能 获取当前外接音响设备开关状态。【仅vivo支持此功能】 - 参数 无 - 返回值 可能的值如下: | 返回值 | 意义 | | ------ | ---------------------- | | 0 | 开 | | 1 | 关 | | -1 | 当前KTV该API接口不可用 | - 说明 获取当前外接音响设备开关状态,若设备不支持,则该API接口不可用。 若不支持则2.2.6中JSON支持参数中设置"isSupportExtSpeakerParam":false - 示例 略 - 参见 setExtSpeakerParam ### setToneMode - 函数原型 public void setToneMode(int toneValue) - 功能 设置变声类型。【仅OPPO支持此功能】 - 参数 - toneValue \[in\] 范围( -12 \~ 0 \~ 12 ) - 返回值 无 - 说明 设置变声类型,如果不支持则2.2.6中JSON支持参数中设置"isSupportToneMode":false - 示例 略 - 参见 1. ### setMixerSoundType - 函数原型 public void setMixerSoundType(int param) - 功能 设置混响效果。 - 参数 - param \[in\] 混响音效效果类型: 1. Reverb default type ( 0:无、1:KTV、2:剧场、3:音乐厅、4:录音棚 ) 2. For vivo extensions as bellow: 【vivo设备上额外提供更多的效果类型】 > 10: 温暖, 11: 空灵, 12: 3D迷幻, 13: 老唱片 - 返回值 无 - 说明 设置混响音效效果类型。 **除了默认混响效果0-4类型,vivo设备**上通过调用【getExtMixerSoundType】接口额外获取更多提供的可用效果类型:10: 温暖, 11: 空灵, 12: 3D迷幻, 13: 老唱片。 示例 略 - 参见 > getExtMixerSoundType ### getExtMixerSoundType - 函数原型 public int\[\] getExtMixerSoundType() - 功能 获取扩展混响音效类型ID数组。【可为空】 1. For VIVO extensions as bellow: 【vivo设备上额外提供更多的效果类型】 > 10: 温暖, 11: 空灵, 12: 3D迷幻, 13: 老唱片 - 参数 无 - 返回值 可能的值如下: | 返回值 | 意义 | | ------ | ---------------------------- | | int[] | 扩展混响音效类型ID数组 | | null | 空值,当前KTV该API接口不可用 | - 说明 返回扩展混响音效类型ID数组。 **除了默认混响效果0-4类型,vivo设备上**通过调用该函数接口额外获取更多提供的可用效果类型:10: 温暖, 11: 空灵, 12: 3D迷幻, 13: 老唱片。 - 示例 略 - 参见 setMixerSoundType ### setEqualizerType - 函数原型 public void setEqualizerType(int equalizerType) - 功能 设置EQ均衡器音效类型。 - 参数 - equalizerType \[in\] EQ均衡器音效效果类型: 3. EQ default type ( 0:无、1:标准、2:浑厚、3:清脆、4:明亮 ) 4. For VIVO extensions as bellow: 【vivo设备上额外提供更多的效果类型】 > 10: 温暖, 11: 空灵, 12: 3D迷幻, 13: KTV - 返回值 无 - 说明 设置EQ均衡器音效效果类型。 **除了默认EQ均衡器效果0-4类型,vivo设备**上通过调用【getExtEqualizerType】接口额外获取更多提供的可用效果类型:10: 温暖, 11: 空灵, 12: 3D迷幻, 13: KTV。 - 示例 略 - 参见 > getExtEqualizerType ### getExtEqualizerType - 函数原型 public int\[\] getExtMixerSoundType() - 功能 获取扩展EQ均衡器音效类型ID数组。【可为空】 2. For VIVO extensions as bellow: 【vivo设备上额外提供更多的效果类型】 > 10: 温暖, 11: 空灵, 12: 3D迷幻, 13: KTV - 参数 无 - 返回值 可能的值如下: | 返回值 | 意义 | | ------ | ---------------------------- | | int[] | 扩展EQ均衡器音效类型ID数组 | | null | 空值,当前KTV该API接口不可用 | - 说明 返回扩展EQ均衡器音效类型ID数组。 **除了默认EQ均衡器效果0-4类型,vivo设备上**通过调用该函数接口额外获取更多提供的可用效果类型:10: 温暖, 11: 空灵, 12: 3D迷幻, 13: KTV。 - 示例 略 - 参见 setEqualizerType # 辅助类说明 由于MediaClientUtil和KtvSupportInfo辅助类功能简单,在第二部分的【接口函数列表】中基本已阐述,这里就不详细参数了,参考demo中实现使用即可。 # API使用说明 **1、基本使用流程(推荐流程,也可以根据自己的流程适配)** 1)获取MediaClient单例 2)isSupported判断应用是否支持KTV功能使用 3)演唱开始,先打开KTV系统,openKTVDevice 4)设置相关配置(vivo支持在openKTVDevice前设置) setListenRecordSame 录音数据输出类型 setMixerSoundType 混响音效类型 setEqualizerType EQ音效类型 setPlayFeedbackParam 耳返开关 setMicVolParam 耳返音量大小 setExtSpeakerParam 设置外接设备项 5)再开启播放,最后开启录音 【小米仅支持deep buffer播放方式的KTV效果】 6)演唱结束,先关闭播放、录音 7)再closeKTVDevice 关闭KTV系统 8)该流程具体细节推荐参考Demo KTV中相关代码 **2、KTV统一接口API,可直接使用** 需要应用权限配置: android.permission.MODIFY_AUDIO_SETTINGS android.permission.RECORD_AUDIO OPPO平台需要额外权限: \<uses-permission android:name="com.oplus.ocs.permission.third"/\> \<queries\> > \<package android:name="com.coloros.karaoke"\>\</package\> > > \<package android:name="com.coloros.ocs.opencapabilityservice"\>\</package\> > > \<package android:name="com.oplus.ocs"\>\</package\> \</queries\> **3、OPPO 平台鉴权** 1)登录OPPO开放平台申请鉴权码,请参考[*官方指南*](https://open.oppomobile.com/new/developmentDoc/info?id=11152) 在应用的AndroidManifest.xml的配置如下标签,该标签和activity标签是同级别标签 \<meta-data android:name="com.coloros.ocs.media.AUTH_CODE" android:value="请替换为自身授权码" /\> 2. 在应用开启时注册耳返服务,设定悬浮球显示逻辑;通过 addOnOnConnectionSucceedListener 发起鉴权请求,可在鉴权成功的回调中使用openKTVDevice请求耳返服务。 如果鉴权没有成功,openKTVDevice调用没有效果。例如: **4、Gradle如何依赖aar库** 示例: implementation 'gsai.sdk:media-client:1.0.0-SNAPSHOT' compileOnly 'gsai.sdk:mediastub:1.0.0-SNAPSHOT' 说明:此处为第一个版本示例,版本号1.0.0需根据release最新版本修改 版本更新说明 | 版本号 | 更新内容 | | ------ | --------------- | | 1.0.0 | KTV系统接口统一 |