音频播放器
<h3>概述</h3>
<p>该文档是<strong>音频播放器</strong>接口文档,主要用于<strong>控制音频的暂停、播放、停止等操作</strong>,开发者需要继承虚类VTMediaPlayerAbs并实现其方法。
音频播放器控制着绘本APP的声音播放。但具体的实现方式在各平台上会有差异,因此需要开发人员根据具体的平台实现这些虚函数。方法是自定义一个播放器类,继承这个接口类,之后为每个函数定义具体的实现方式。</p>
<h3>注意:</h3>
<p><strong><em>我们的通知回调不能处理太多业务,否则会造成识别线程阻塞</em></strong></p>
<hr />
<h4>1. 类声明</h4>
<p>音频播放器接口类的声名如下:
``` c++
typedef int vt_status_t;
class VTMediaPlayerAbs
{
public:
VTMediaPlayerAbs() {printf("Create VTMediaPlayerAbs.\n");}
virtual ~VTMediaPlayerAbs() {printf("Destroy VTMediaPlayerAbs.\n");}
virtual vt_status_t init(const std::string &url);//初始化播放URL
virtual vt_status_t play();//播放
virtual vt_status_t reset();//暂停
virtual vt_status_t stop();//停止
virtual vt_status_t pause();//暂停
virtual vt_status_t resume();//恢复播放
virtual vt_status_t release();//释放内存,一般不需要
virtual bool isPlaying();//是否正在播放
virtual vt_status_t setLooping(bool looping);//设置循环播放
virtual bool isLooping();//是否正在循环播放
virtual vt_status_t enableEncrypt(bool enable);//设置加密播放,如果是加密资源,SDK会调用此接口传入TRUE支持播放加密MP3,如果是非加密调用传入FALSE
virtual void setOnCompletionCallBack(VTCompletionCallBack <em>pCallBack);//设置播放完成回调
virtual void setOnErrorCallBack(VTPlayerErrorCallBack </em>pCallBack);//设置出错回调
virtual void setOnStateCallBack(VTPlayerStateCallBack *pCallBack); //设置播放状态回调
};</p>
<pre><code>#### 2. 接口说明
该接口实例会被绘本sdk内部调用,用于将下载解压状态通知给sdk外部的应用。
**接口原型:**</code></pre>
<p>void onUpdateState(int status, int params);</p>
<pre><code>**参数:**
| 参数 | 类型 | 说明 |
| ------------ | ------------ | ---- |
| status | int | 状态值 |
| params | int | 进度值 范围:0~100,只有status=DOWNLOAD_STATUS_PROGRESS时有效 |
**返回值:** 无
| 返回值 | 类型 | 说明 |
| ------------ | ------------ | ----- |
| - | - | - |
音频播放器控制着绘本APP的声音播放。但具体的实现方式在各平台上会有差异,因此需要开发人员根据具体的平台实现这些虚函数。方法是自定义一个播放器类,继承这个接口类,之后为每个函数定义具体的实现方式。
### 接口方法介绍
#### 构造函数与析构函数
自定义的播放器类继承接口类后,在构造和析构时会自动调用接口类的构造函数和析构函数,只要注意内存的申请和释放即可。
#### init
**简要描述:**
初始化播放器到初始状态,并且设置待播放的文件路径。
**参数:**
|参数名|必选|类型|说明|
|:----|:---|:-----|-----|
|url|是|const string&|音频文件路径|
**返回值:**
|类型|说明|
|:-----|-----|
|vt_status_t|初始化成功:0;失败:-1|
#### play
**简要描述:**
播放音频文件(该文件已经在init()中被设置)
**参数:**
|参数名|必选|类型|说明|
|:----|:---|:-----|-----|
|-|-|-|-|
**返回值:**
|类型|说明|
|:-----|-----|
|vt_status_t|播放成功:0;失败:-1|
#### reset
**简要描述:**
重置播放器,不论播放器在什么状态,都可以将它恢复到空闲状态
**参数:**
|参数名|必选|类型|说明|
|:----|:---|:-----|-----|
|-|-|-|-|
**返回值:**
|类型|说明|
|:-----|-----|
|vt_status_t|重置成功:0;失败:-1|
#### stop
**简要描述:**
停止播放。如果播放器处于播放状态,则打断当前播放的音频;如果播放器已经处于停止状态,则什么都不做。
**参数:**
|参数名|必选|类型|说明|
|:----|:---|:-----|-----|
|-|-|-|-|
**返回值:**
|类型|说明|
|:-----|-----|
|vt_status_t|停止成功:0;失败:-1|
**说明:**
有些平台底层音频接口的stop方法会将播放器销毁,因此在不确定的情况下推荐使用reset()来实现stop()函数
#### pause
**简要描述:**
暂停播放。当播放器正在播放时暂停当前的文件,否则就什么都不做
**参数:**
|参数名|必选|类型|说明|
|:----|:---|:-----|-----|
|-|-|-|-|
**返回值:**
|类型|说明|
|:-----|-----|
|vt_status_t|暂停成功:0;失败:-1|
#### resume
**简要描述:**
恢复已暂停的文件播放。当播放器处于暂停状态时有效,否则就什么都不做
**参数:**
|参数名|必选|类型|说明|
|:----|:---|:-----|-----|
|-|-|-|-|
**返回值:**
|类型|说明|
|:-----|-----|
|vt_status_t|恢复成功:0;失败:-1|
#### release
**简要描述:**
释放播放器,清理播放器所占用的资源。
**参数:**
|参数名|必选|类型|说明|
|:----|:---|:-----|-----|
|-|-|-|-|
**返回值:**
|类型|说明|
|:-----|-----|
|vt_status_t|释放成功:0;失败:-1|
#### isPlaying
**简要描述:**
返回播放器是否正在播放
**参数:**
|参数名|必选|类型|说明|
|:----|:---|:-----|-----|
|-|-|-|-|
**返回值:**
|类型|说明|
|:-----|-----|
|bool|正在播放:true;其他:false|
#### setLooping
**简要描述:**
设置播放器是否循环播放
**参数:**
|参数名|必选|类型|说明|
|:----|:---|:-----|-----|
|looping|是|bool|true表示循环播放,false表示单次播放|
**返回值:**
|类型|说明|
|:-----|-----|
|vt_status_t|设置成功:0;失败:-1|
#### isLooping
**简要描述:**
返回播放器的循环方式
**参数:**
|参数名|必选|类型|说明|
|:----|:---|:-----|-----|
|-|-|-|-|
**返回值:**
|类型|说明|
|:-----|-----|
|bool|循环播放:true;单次播放:false|
#### setOnCompletionCallBack
**简要描述:**
设置播放器的回调类,当音频播放完成时会调用该类的方法,通知上层“播放完毕”
**参数:**
|参数名|必选|类型|说明|
|:----|:---|:-----|-----|
|pCallback|是|VTCompletionCallBack\*|回调类指针|
**返回值:**
|类型|说明|
|:-----|-----|
|void|-|
**说明:**
回调类VTCompletionCallBack的定义如下:
```c++
class VTCompletionCallBack
{
public:
VTCompletionCallBack() {printf("Create VTCompletionCallBack.\n");}
virtual ~VTCompletionCallBack() {printf("Destroy VTCompletionCallBack.\n");}
virtual void OnCompletion(VTMediaPlayerAbs *pBMP) {}
};</code></pre>
<p>该类也是一个虚类,要用户自行实现其中的方法。
另外,在语音播放器类中要声名一个类型为 <em>VTCompletionCallBack*</em> 的变量,用于接收参数的赋值。</p>
<h3>注意:我们的通知回调不能处理太多业务,否则会造成识别线程阻塞</h3>