@xmly-fem/web-jssdk
Version:
喜马拉雅开放平台 · H5 网页应用接入 JSSDK
404 lines (390 loc) • 15.2 kB
TypeScript
/**
* 播放模式
*/
type PLAY_MODE =
| 'order' // 顺序播放(同列表循环,到最后一个会切到第一个继续播)
| 'loop' // 单曲循环播放
| 'random' // 随机播放(到最后一个会切到第一个继续播)
| 'single' // 单个播放(播完即止)
/**
* 播放器状态
*/
type PLAY_STATE =
| 'ready' // 初始状态
| 'advertising' // 广告中
| 'loading' // 加载中(1.播放,2.恢复播放,3.seek)引起的声音加载
| 'playing' // 播放中
| 'paused' // 暂停
| 'stoped' // 停止
| 'finished' // 结束,完整播放结束时触发
| 'loaderror' // 下载资源发生错误(不包含接口请求喜马拉雅声音出错的情形)
/**
* 播放相关事件
*/
type PLAY_EVENT =
| 'ready' // 播放器准备就绪时触发
| 'unlock' // 当用户在网页任意位置第一次触摸或点击时,解锁浏览器播放限制时触发
| 'play' // 播放
| 'pause' // 暂停
| 'resume' // 续播
| 'stop' // 停止
| 'end' // 播放结束
| 'next' // 点击下一首| 或自动切换下一首
| 'prev' // 点击上一首
| 'mute' // 静音
| 'unmute' // 恢复音量
| 'loading' // 音频加载时触发
| 'timeupdate' // 播放进度更新
| 'initlast' // 从缓存恢复最近一次播放信息
| 'change.volume' // 音量变化时触发
| 'change.sound' // 声音切换
| 'change.playlist' // 播放列表切换
| 'change.playState' // 播放状态切换
| 'change.playMode' // 切换播放模式
| 'change.playbackRate' // 播放速率切换
| 'loaderror' // 音频加载发生错误
| 'notAllowedError' // 浏览器阻止音频播放
| 'accessTokenError' // access_token 过期、失效、不存在事件
| 'sound.needPay' // 需要购买
| 'sound.notExist' // 喜马拉雅的声音不存在
| 'sound.usable' // 喜马拉雅的声音可用
| 'sound.unusable' // 喜马拉雅的声音不可用
/**
* 播放速率
*/
type PLAY_BACKRATE = 0.5 | 1 | 2 | 3 | 4
/**
* 播放器通用声音, 可直接播放(用户传入的第三方声音、喜马声音解析后生成)
*/
interface Sound {
/** 音频 id */
id: number
/** 播放地址(目前支持 m4a, aac, mp3, wav 格式),喜马拉雅的音频地址会被加密 */
src: string
/** 音频标题 */
title?: string
/** 音频时长(单位: 秒) */
duration?: number
}
/**
* 声音集合
*/
interface Sounds<T> {
[k: number]: T
}
/**
* 播放列表
*/
type PlayList = number[]
/**
* 初始化参数
*/
interface ConfigOptions {
/** 喜马拉雅开放平台应用公钥 */
app_key: string
/** js 函数(标准登录授权、第三方账号登录授权模式下,必传),JSSDK 内部每一次请求开放平台接口时,都会执行传入的函数,获取访问令牌 access_token */
get_access_token?: () => Promise<string> | string
/** 返回 signature 的接口 URL 地址, 此接口由开发者服务端开发(免登录授权模式下,必传)*/
sig_url?: string
/** 用户设备 ID,必须保证唯一性;可以不传,JSSDK 内部默认会自动生成 */
device_id?: string
/** 请求超时时间(单位:毫秒,默认 10S) */
timeout?: number
/** 是否开启 debug 模式,开启后可以在 console 控制台查看 */
debug?: boolean
}
/**
* 播放器配置参数
*/
interface PlayerOptions extends Partial<ConfigOptions> {
/** 播放列表,数组的元素为 Number 类型的声音 ID ,通常 ID 需要是喜马拉雅声音 ID;若非喜马拉雅声音,则必须是 sounds 属性中该声音已存在,[播放非喜马拉雅声音示例] (https://openact.ximalaya.com/web-jssdk/doc/#/content/player/no-xmly) */
playlist: number[]
/** 播放模式 */
playMode?: PLAY_MODE
/** 是否从localStorage中读取最近播放信息,加载时(如:刷新页面、关闭页面重新打开)恢复,包括:声音id、playlist、volume、position、sound、playmode、mute等 */
initLast?: boolean
/** 断点续播,即从上一次播放的位置续播,低版本ios不支持,备注:页面关闭时,会触发stop,播放位置回到了0,所以关闭页面后恢复播放是从头播,而刷新页面可以从之前的位置续播 */
breakpoint?: boolean
/** 声音不可播时,自动跳过播放下一个[自动跳过说明] (https://openact.ximalaya.com/web-jssdk/doc/#/content/player/params?id=%e8%87%aa%e5%8a%a8%e8%b7%b3%e8%bf%87) */
autoSkip?: boolean
/** 开启时,会在加载后尝试解锁浏览器对音频自动播放的限制(大多数浏览器都限制了音频自动播放);并在用户首次触摸、点击页面时,触发 unlock 事件,关闭后将不会触发 unlock 事件。默认开启,如果此功能在使用时造成了影响,可以配置为 false 关闭。 */
autoUnlock?: boolean
/** 播放器的声音集合,通常不需要设置此项,[查看示例](https://openact.ximalaya.com/web-jssdk/doc/#/content/player/params?id=%e8%ae%be%e7%bd%aesounds) */
sounds?: Record<number, Sound>
}
/**
* 初始化方法,一次性配置 JSSDK 内部所有模块的参数
* @param options 初始化参数
*/
export function config(options: ConfigOptions): void
export class XMplayer {
/**
* 版本号
*/
static version: string
/**
* 用于配置 XMplayer 参数,入参由播放器参数、应用参数两部分组成。因为在 config 初始化方法被调用后,应用相关的参数已经全局配置好,通常你不需要注入应用参数
*/
static setup(options: PlayerOptions): void
/**
* 初始化播放器
* @param options
*/
constructor(options: PlayerOptions)
/**
* 播放音频
* @param id 声音 ID | 空 | 完整的声音信息
*/
play(option?: number | Sound): void
/**
* 按播放列表索引播放
* @param index playlist 数组列表中的索引(从0开始,必须是0或正整数,列表范围内的有效值)
*/
playByIndex(index: number): void
/**
* 判断是否正在播放
*/
isPlaying(): boolean
/**
* 暂停
*/
pause(): void
/**
* 停止,重新播放会从头播。
*/
stop(): void
/**
* 上一个/上一曲
* (自动切到最后一个)
*/
prev(): void
/**
* 下一个/下一曲
* (自动切到第一个)
*/
next(): void
/**
*获取播放列表,返回原始的 playlist,与播放模式无关。
*/
getPlaylist(): PlayList
/**
* 获取当前的播放列表,与播放模式有关,例如:当前是”随机播放“,此时想获取当前播放列表,必须是 getCurrentPlaylist。大部分时候,getPlaylist 和 getCurrentPlaylist 返回的结果相同。
*/
getCurrentPlaylist(): PlayList
/**
* 设置播放列表,如果当前处于随机播放模式,会被重置为 order 模式
* @param playlist 播放列表,数组的元素值为声音的 ID,Number 类型
*/
setPlaylist(playlist?: PlayList): void
/**
* 获取当前播放声音在播放列表中的索引
*/
getCurrentIndex(): number
/**
* 获取当前 sound
* - 当前播放器加载的,未必是正在播放
*/
getSound(): Sound | undefined
/**
* 获取 sounds
*/
getSounds(): Sounds<Sound>
/**
* 设置 sounds
* @param sounds 声音集合
*/
setSounds(sounds: Sounds<Sound>)
/**
* 跳往(拖动)到某播放位置,或返回当前播放位置。
* 如果当前播放声音是部分试听的付费声音,拖动到超过试听长度时,只能拖到试听长度结束前5秒的位置,例如:当前播放的是付费声音,且部分试听,* 仅允许试听180秒,player.seek(300) 操作拖动到300秒位置,因超出了180秒,所以仅会被拖动到175秒位置,并继续播放。
*
* @param position 指定的播放位置,单位:秒。若参数缺省,返回当前播放位置(单位:秒)
*/
seek(position?: number): void
/**
* 前进,向后(向结束位置)拖动
* @param dif 间距,正数(单位:秒), 若参数缺省,默认值为1,即前进1秒
*/
seekForward(dif?: number): void
/**
* 后退,向前(向开始位置)拖动
* @param dif 间距,正数(单位:秒),若参数缺省,默认值为1,即后退1秒
*/
seekBack(dif?: number): void
/**
* 获取正在播放音频的总播放时长(单位:秒)
* - 只有在有合法 src 时返回
*/
getDuration(): number
/**
* 获取当前音量(即使静音,也会返回当前音量)
*/
getVolume(): number
/**
* 设置音量。IOS 移动设备无法从 js 操控音量,所以 setVolume、upVolume、downVolume、mute、unmute 在 IOS 移动设备上都是不能正常工作的
* @param volume 音量,0~1之间的数值
*/
setVolume(volume: number): void
/**
* 音量增大,增大到1即不再继续增大
* @param dif 增大的音量步长,0~1 之间的数值,若参数缺省,默认为0.1
*/
upVolume(dif?: number): void
/**
* 音量减小,减小到1即不再继续减小
* @param dif 减小的音量步长,0~1 之间的数值,若参数缺省,默认为0.1
*/
downVolume(dif?: number): void
/**
* 静音
*/
mute(): void
/**
* 恢复音量
*/
unmute(): void
/**
* 获取当前播放速率
*/
getPlaybackRate(): PLAY_BACKRATE
/**
* 设置播放速率
*
* @param playbackRate 播放速度,可选值:0.5、1、2、3、4
*/
setPlaybackRate(playbackRate: PLAY_BACKRATE): void
/**
* 获取播放模式,[播放模式](https://openact.ximalaya.com/web-jssdk/doc/#/content/player/params?id=%e6%92%ad%e6%94%be%e6%a8%a1%e5%bc%8f)
*/
getPlayMode(): PLAY_MODE
/**
* 设置播放模式
* @param playMode 播放模式, [查看](https://openact.ximalaya.com/web-jssdk/doc/#/content/player/params?id=%e6%92%ad%e6%94%be%e6%a8%a1%e5%bc%8f)
*/
setPlayMode(playMode: PLAY_MODE): void
/**
* 获取当前播放器状态,如果想要判断当前是否正在播放,请使用 isPlaying 方法
* [播放器状态查看](https://openact.ximalaya.com/web-jssdk/doc/#/content/player/params?id=%e6%92%ad%e6%94%be%e5%99%a8%e7%8a%b6%e6%80%81)
*/
getPlayState(): PLAY_STATE
/**
* 预加载声音
* @param id 声音id
* @param success 成功的回调函数
* @param error 失败的回调函数
*/
preloadSound(id: number, success?: Function, error?: Function): void
/**
* 绑定自定义事件
* @param name 自定义事件名称,[事件列表](https://openact.ximalaya.com/web-jssdk/doc/#/content/player/event?id=%e4%ba%8b%e4%bb%b6%e5%88%97%e8%a1%a8)
* @param callback 回调函数,接收emit触发所有参数
* @param ctx 回调函数的执行上下文
* @returns 返回this,支持链式调用
*/
on(name: PLAY_EVENT, callback: (...args: any) => void): this
/**
* 绑定自定义事件(仅一次)
* @param name 自定义事件名称,[事件列表](https://openact.ximalaya.com/web-jssdk/doc/#/content/player/event?id=%e4%ba%8b%e4%bb%b6%e5%88%97%e8%a1%a8)
* @param callback 回调函数,接收emit触发所有参数
* @param ctx 回调函数的执行上下文
* @returns 返回this,支持链式调用
*/
once(name: PLAY_EVENT, callback: (...args: any) => void): this
/**
* 解除绑定的自定义事件
* 1.funcInQueue参数缺省时,该自定义事件对应的整个回调队列都会被清空,否则仅移除事件的回调队列中的某一函数;
*
* @param name 自定义事件名称,[事件列表](https://openact.ximalaya.com/web-jssdk/doc/#/content/player/event?id=%e4%ba%8b%e4%bb%b6%e5%88%97%e8%a1%a8)
* @param funcInQueue 自定义事件对应的回调函数队列中某一函数
* @returns 返回this,支持链式调用
*/
off(name: PLAY_EVENT, funcInQueue?: (...args: any) => void): this
}
/**
* API 请求参数
*/
interface RequestParams {
/** 请求 url */
url: string
/** 请求类型 */
type?: 'get' | 'post'
/** 业务参数, 不需要公共参数 */
params?: Record<string, any>
}
/**
* API 返回值
*/
interface RequestResponse {
/** 错误码,[详细介绍](https://openact.ximalaya.com/web-jssdk/doc/#/content/error-no) */
code: number
/** 错误提示 */
message: string
/** 返回数据 */
data: any
}
export class XMLY {
/**
* 版本号
*/
static version: string
/**
* 用于配置 XMLY 参数,与 config 初始化方法的参数完全相同,通常不需要这个方法
*/
static setup(options: ConfigOptions): void
/**
* 和初始化参数完全相同
* @param options
*/
constructor(options: ConfigOptions)
/**
* 通用请求方法,支持开放平台对外输出的所有接口请求,[接口列表](https://open.ximalaya.com/doc/api)
* @param opts 请求参数
*/
request({ url, type, params }: RequestParams): Promise<RequestResponse>
/**
* 通用请求方法 - get,支持开放平台对外输出的所有接口请求,[接口列表](https://open.ximalaya.com/doc/api)
* @param url 请求 url
* @param params 业务参数
*/
get(url: string, params?: Record<string, any>): Promise<RequestResponse>
/**
* 通用请求方法 - post,支持开放平台对外输出的所有接口请求,[接口列表](https://open.ximalaya.com/doc/api)
* @param url 请求 url
* @param params 业务参数
*/
post(url: string, params?: Record<string, any>): Promise<RequestResponse>
/**
* 发起用户授权
* @param opts 授权参数
*/
authorize(opts: {
/** 登录成功后的回跳地址(直接传地址字符串即可,不需要 encodeURIComponent,JSSDK 内部会自行处理)*/
redirect_uri?: string
/** 用户需要携带的数据(必须是字符串)*/
state?: string
/** 指定需要禁用的第三方登录方式,传true禁用全部,或者以数组形式传入qq、weixin、weibo中的一个或多个 */
hide_third_login_modes?: string[] | false
})
/**
* 下单购买
* @param opts 下单参数
*/
prepareOrder(opts: {
/** 商品类型,目前支持:1-声音,2-专辑,3-会员,4-小喜马会员,5-小喜马付费专辑,6-企业版会员商品,7-实体商品, 8-亲子独立会员 */
distribute_item_type: number
/** 需要购买的声音 id 或专辑 id;多个 id 以英文逗号分隔 */
pay_content: string
/** 支付完成后的回跳地址(直接传地址字符串即可,不需要 encodeURIComponent,JSSDK 内部会自行处理) */
return_url?: string
/** 下单账户类型:1-access_token, 2-手机号,3-第三方账户( JSSDK 暂不支持手机号、第三方账号下单) */
access_account_type?: number
/** 是否隐藏收银台巅峰会员引导,true:隐藏;false,不隐藏(默认) */
hide_vip_guide?: boolean
/** 促销活动ID */
promotion_id?: string
/** 促销活动类型 */
promotion_type?: string
/** 规定哪种方式打开收银台页面(_self、_blank、_parent、_top),同 a 标签的 target 值 */
target?: string
})
}