ex

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Committer:
TMBOY
Date:
Tue Jul 18 16:34:48 2017 +0800
Revision:
45:2aa9f933c8d2
?

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TMBOY 45:2aa9f933c8d2 1 /*
TMBOY 45:2aa9f933c8d2 2 * Copyright (c) 2017 Baidu, Inc. All Rights Reserved.
TMBOY 45:2aa9f933c8d2 3 *
TMBOY 45:2aa9f933c8d2 4 * Licensed under the Apache License, Version 2.0 (the "License");
TMBOY 45:2aa9f933c8d2 5 * you may not use this file except in compliance with the License.
TMBOY 45:2aa9f933c8d2 6 * You may obtain a copy of the License at
TMBOY 45:2aa9f933c8d2 7 *
TMBOY 45:2aa9f933c8d2 8 * http://www.apache.org/licenses/LICENSE-2.0
TMBOY 45:2aa9f933c8d2 9 *
TMBOY 45:2aa9f933c8d2 10 * Unless required by applicable law or agreed to in writing, software
TMBOY 45:2aa9f933c8d2 11 * distributed under the License is distributed on an "AS IS" BASIS,
TMBOY 45:2aa9f933c8d2 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
TMBOY 45:2aa9f933c8d2 13 * See the License for the specific language governing permissions and
TMBOY 45:2aa9f933c8d2 14 * limitations under the License.
TMBOY 45:2aa9f933c8d2 15 */
TMBOY 45:2aa9f933c8d2 16 package com.baidu.duer.dcs.systeminterface;
TMBOY 45:2aa9f933c8d2 17
TMBOY 45:2aa9f933c8d2 18 import java.io.InputStream;
TMBOY 45:2aa9f933c8d2 19
TMBOY 45:2aa9f933c8d2 20 /**
TMBOY 45:2aa9f933c8d2 21 * 播放器接口
TMBOY 45:2aa9f933c8d2 22 * <p>
TMBOY 45:2aa9f933c8d2 23 * Created by guxiuzhong@baidu.com on 2017/5/31.
TMBOY 45:2aa9f933c8d2 24 */
TMBOY 45:2aa9f933c8d2 25 public interface IMediaPlayer {
TMBOY 45:2aa9f933c8d2 26 /**
TMBOY 45:2aa9f933c8d2 27 * 播放状态
TMBOY 45:2aa9f933c8d2 28 */
TMBOY 45:2aa9f933c8d2 29 enum PlayState {
TMBOY 45:2aa9f933c8d2 30 ERROR(-1), // 播放错误
TMBOY 45:2aa9f933c8d2 31 IDLE(0), // 播放未开始
TMBOY 45:2aa9f933c8d2 32 PREPARING(1), // 播放准备中
TMBOY 45:2aa9f933c8d2 33 PREPARED(2), // 播放准备就绪
TMBOY 45:2aa9f933c8d2 34 PLAYING(3), // 正在播放
TMBOY 45:2aa9f933c8d2 35 PAUSED(4), // 暂停播放
TMBOY 45:2aa9f933c8d2 36 STOPPED(5), // 停止状态
TMBOY 45:2aa9f933c8d2 37 COMPLETED(6); // 播放完成
TMBOY 45:2aa9f933c8d2 38
TMBOY 45:2aa9f933c8d2 39 private int state;
TMBOY 45:2aa9f933c8d2 40
TMBOY 45:2aa9f933c8d2 41 PlayState(int state) {
TMBOY 45:2aa9f933c8d2 42 this.state = state;
TMBOY 45:2aa9f933c8d2 43 }
TMBOY 45:2aa9f933c8d2 44
TMBOY 45:2aa9f933c8d2 45 public int getState() {
TMBOY 45:2aa9f933c8d2 46 return state;
TMBOY 45:2aa9f933c8d2 47 }
TMBOY 45:2aa9f933c8d2 48 }
TMBOY 45:2aa9f933c8d2 49
TMBOY 45:2aa9f933c8d2 50 /**
TMBOY 45:2aa9f933c8d2 51 * 获取当前的播放状态
TMBOY 45:2aa9f933c8d2 52 *
TMBOY 45:2aa9f933c8d2 53 * @return PlayState
TMBOY 45:2aa9f933c8d2 54 */
TMBOY 45:2aa9f933c8d2 55 PlayState getPlayState();
TMBOY 45:2aa9f933c8d2 56
TMBOY 45:2aa9f933c8d2 57 /**
TMBOY 45:2aa9f933c8d2 58 * 播放
TMBOY 45:2aa9f933c8d2 59 *
TMBOY 45:2aa9f933c8d2 60 * @param mediaResource mediaResource
TMBOY 45:2aa9f933c8d2 61 */
TMBOY 45:2aa9f933c8d2 62 void play(MediaResource mediaResource);
TMBOY 45:2aa9f933c8d2 63
TMBOY 45:2aa9f933c8d2 64 /**
TMBOY 45:2aa9f933c8d2 65 * 暂停
TMBOY 45:2aa9f933c8d2 66 */
TMBOY 45:2aa9f933c8d2 67 void pause();
TMBOY 45:2aa9f933c8d2 68
TMBOY 45:2aa9f933c8d2 69 /**
TMBOY 45:2aa9f933c8d2 70 * 停止播放
TMBOY 45:2aa9f933c8d2 71 */
TMBOY 45:2aa9f933c8d2 72 void stop();
TMBOY 45:2aa9f933c8d2 73
TMBOY 45:2aa9f933c8d2 74 /**
TMBOY 45:2aa9f933c8d2 75 * 调用pause暂停后重新播放
TMBOY 45:2aa9f933c8d2 76 */
TMBOY 45:2aa9f933c8d2 77 void resume();
TMBOY 45:2aa9f933c8d2 78
TMBOY 45:2aa9f933c8d2 79 /**
TMBOY 45:2aa9f933c8d2 80 * 从milliseconds位置开始播放
TMBOY 45:2aa9f933c8d2 81 *
TMBOY 45:2aa9f933c8d2 82 * @param milliseconds 毫秒
TMBOY 45:2aa9f933c8d2 83 */
TMBOY 45:2aa9f933c8d2 84 void seekTo(int milliseconds);
TMBOY 45:2aa9f933c8d2 85
TMBOY 45:2aa9f933c8d2 86 /**
TMBOY 45:2aa9f933c8d2 87 * 释放,销毁播放器
TMBOY 45:2aa9f933c8d2 88 */
TMBOY 45:2aa9f933c8d2 89 void release();
TMBOY 45:2aa9f933c8d2 90
TMBOY 45:2aa9f933c8d2 91 /**
TMBOY 45:2aa9f933c8d2 92 * 设置音量 volume:0-1
TMBOY 45:2aa9f933c8d2 93 *
TMBOY 45:2aa9f933c8d2 94 * @param volume 音量(0-1之间的浮点数)
TMBOY 45:2aa9f933c8d2 95 */
TMBOY 45:2aa9f933c8d2 96 void setVolume(float volume);
TMBOY 45:2aa9f933c8d2 97
TMBOY 45:2aa9f933c8d2 98 float getVolume();
TMBOY 45:2aa9f933c8d2 99
TMBOY 45:2aa9f933c8d2 100 /**
TMBOY 45:2aa9f933c8d2 101 * 设置静音
TMBOY 45:2aa9f933c8d2 102 *
TMBOY 45:2aa9f933c8d2 103 * @param mute 静音开关
TMBOY 45:2aa9f933c8d2 104 */
TMBOY 45:2aa9f933c8d2 105 void setMute(boolean mute);
TMBOY 45:2aa9f933c8d2 106
TMBOY 45:2aa9f933c8d2 107 boolean getMute();
TMBOY 45:2aa9f933c8d2 108
TMBOY 45:2aa9f933c8d2 109 /**
TMBOY 45:2aa9f933c8d2 110 * 获取当前的播放位置
TMBOY 45:2aa9f933c8d2 111 *
TMBOY 45:2aa9f933c8d2 112 * @return 当前的播放位置
TMBOY 45:2aa9f933c8d2 113 */
TMBOY 45:2aa9f933c8d2 114 long getCurrentPosition();
TMBOY 45:2aa9f933c8d2 115
TMBOY 45:2aa9f933c8d2 116 /**
TMBOY 45:2aa9f933c8d2 117 * 获取当前音频文件/流的总时长,单位:ms
TMBOY 45:2aa9f933c8d2 118 *
TMBOY 45:2aa9f933c8d2 119 * @return ms
TMBOY 45:2aa9f933c8d2 120 */
TMBOY 45:2aa9f933c8d2 121 long getDuration();
TMBOY 45:2aa9f933c8d2 122
TMBOY 45:2aa9f933c8d2 123 /**
TMBOY 45:2aa9f933c8d2 124 * 获取当前缓冲到多少 0-100f
TMBOY 45:2aa9f933c8d2 125 *
TMBOY 45:2aa9f933c8d2 126 * @return 0-100f
TMBOY 45:2aa9f933c8d2 127 */
TMBOY 45:2aa9f933c8d2 128 float getBufferPercentage();
TMBOY 45:2aa9f933c8d2 129
TMBOY 45:2aa9f933c8d2 130 /**
TMBOY 45:2aa9f933c8d2 131 * 添加播放器状态回调
TMBOY 45:2aa9f933c8d2 132 *
TMBOY 45:2aa9f933c8d2 133 * @param listener listener
TMBOY 45:2aa9f933c8d2 134 */
TMBOY 45:2aa9f933c8d2 135 void addMediaPlayerListener(IMediaPlayerListener listener);
TMBOY 45:2aa9f933c8d2 136
TMBOY 45:2aa9f933c8d2 137 void removeMediaPlayerListener(IMediaPlayerListener listener);
TMBOY 45:2aa9f933c8d2 138
TMBOY 45:2aa9f933c8d2 139 /**
TMBOY 45:2aa9f933c8d2 140 * 设置播放通道是否处在活跃状态,比如:当用户在语音请求时,对话通道进入活跃状态
TMBOY 45:2aa9f933c8d2 141 *
TMBOY 45:2aa9f933c8d2 142 * @param isActive 是否处在活跃状态
TMBOY 45:2aa9f933c8d2 143 */
TMBOY 45:2aa9f933c8d2 144 void setActive(boolean isActive);
TMBOY 45:2aa9f933c8d2 145
TMBOY 45:2aa9f933c8d2 146 boolean isActive();
TMBOY 45:2aa9f933c8d2 147
TMBOY 45:2aa9f933c8d2 148 /**
TMBOY 45:2aa9f933c8d2 149 * 播放器播放状态回调接口
TMBOY 45:2aa9f933c8d2 150 */
TMBOY 45:2aa9f933c8d2 151 interface IMediaPlayerListener {
TMBOY 45:2aa9f933c8d2 152
TMBOY 45:2aa9f933c8d2 153 /**
TMBOY 45:2aa9f933c8d2 154 * 调用完play方法后回调此方法
TMBOY 45:2aa9f933c8d2 155 */
TMBOY 45:2aa9f933c8d2 156 void onInit();
TMBOY 45:2aa9f933c8d2 157
TMBOY 45:2aa9f933c8d2 158 /**
TMBOY 45:2aa9f933c8d2 159 * 播放器准备完成后回调
TMBOY 45:2aa9f933c8d2 160 */
TMBOY 45:2aa9f933c8d2 161 void onPrepared();
TMBOY 45:2aa9f933c8d2 162
TMBOY 45:2aa9f933c8d2 163 /**
TMBOY 45:2aa9f933c8d2 164 * 播放器销毁后回调
TMBOY 45:2aa9f933c8d2 165 */
TMBOY 45:2aa9f933c8d2 166 void onRelease();
TMBOY 45:2aa9f933c8d2 167
TMBOY 45:2aa9f933c8d2 168 /**
TMBOY 45:2aa9f933c8d2 169 * 正在播放时回调
TMBOY 45:2aa9f933c8d2 170 */
TMBOY 45:2aa9f933c8d2 171 void onPlaying();
TMBOY 45:2aa9f933c8d2 172
TMBOY 45:2aa9f933c8d2 173 /**
TMBOY 45:2aa9f933c8d2 174 * 暂停后回调
TMBOY 45:2aa9f933c8d2 175 */
TMBOY 45:2aa9f933c8d2 176 void onPaused();
TMBOY 45:2aa9f933c8d2 177
TMBOY 45:2aa9f933c8d2 178 void onStopped();
TMBOY 45:2aa9f933c8d2 179
TMBOY 45:2aa9f933c8d2 180 /**
TMBOY 45:2aa9f933c8d2 181 * 播放完成后回调
TMBOY 45:2aa9f933c8d2 182 */
TMBOY 45:2aa9f933c8d2 183 void onCompletion();
TMBOY 45:2aa9f933c8d2 184
TMBOY 45:2aa9f933c8d2 185 /**
TMBOY 45:2aa9f933c8d2 186 * 播放出错
TMBOY 45:2aa9f933c8d2 187 */
TMBOY 45:2aa9f933c8d2 188 void onError(String error, ErrorType errorType);
TMBOY 45:2aa9f933c8d2 189
TMBOY 45:2aa9f933c8d2 190 /**
TMBOY 45:2aa9f933c8d2 191 * 播放器缓冲回调
TMBOY 45:2aa9f933c8d2 192 *
TMBOY 45:2aa9f933c8d2 193 * @param percent 缓冲的进度 0-100
TMBOY 45:2aa9f933c8d2 194 */
TMBOY 45:2aa9f933c8d2 195 void onBufferingUpdate(int percent);
TMBOY 45:2aa9f933c8d2 196
TMBOY 45:2aa9f933c8d2 197 /**
TMBOY 45:2aa9f933c8d2 198 * 开始缓冲时回调
TMBOY 45:2aa9f933c8d2 199 */
TMBOY 45:2aa9f933c8d2 200 void onBufferingStart();
TMBOY 45:2aa9f933c8d2 201
TMBOY 45:2aa9f933c8d2 202 /**
TMBOY 45:2aa9f933c8d2 203 * 结束缓冲时回调
TMBOY 45:2aa9f933c8d2 204 */
TMBOY 45:2aa9f933c8d2 205 void onBufferingEnd();
TMBOY 45:2aa9f933c8d2 206
TMBOY 45:2aa9f933c8d2 207 }
TMBOY 45:2aa9f933c8d2 208
TMBOY 45:2aa9f933c8d2 209 /**
TMBOY 45:2aa9f933c8d2 210 * 播放错误类型信息
TMBOY 45:2aa9f933c8d2 211 */
TMBOY 45:2aa9f933c8d2 212 enum ErrorType {
TMBOY 45:2aa9f933c8d2 213 MEDIA_ERROR_UNKNOWN("An unknown error occurred"),
TMBOY 45:2aa9f933c8d2 214 MEDIA_ERROR_INVALID_REQUEST(
TMBOY 45:2aa9f933c8d2 215 "The server recognized the request as being malformed "
TMBOY 45:2aa9f933c8d2 216 + "(bad request, unauthorized, forbidden, not found, etc)"),
TMBOY 45:2aa9f933c8d2 217 MEDIA_ERROR_SERVICE_UNAVAILABLE("The device was unavailable to reach the service"),
TMBOY 45:2aa9f933c8d2 218 MEDIA_ERROR_INTERNAL_SERVER_ERROR(
TMBOY 45:2aa9f933c8d2 219 "The server accepted the request, but was unable to process it as expected"),
TMBOY 45:2aa9f933c8d2 220 MEDIA_ERROR_INTERNAL_DEVICE_ERROR("There was an internal error on the device");
TMBOY 45:2aa9f933c8d2 221
TMBOY 45:2aa9f933c8d2 222 private final String message;
TMBOY 45:2aa9f933c8d2 223
TMBOY 45:2aa9f933c8d2 224 ErrorType(String message) {
TMBOY 45:2aa9f933c8d2 225 this.message = message;
TMBOY 45:2aa9f933c8d2 226 }
TMBOY 45:2aa9f933c8d2 227
TMBOY 45:2aa9f933c8d2 228 public String getMessage() {
TMBOY 45:2aa9f933c8d2 229 return message;
TMBOY 45:2aa9f933c8d2 230 }
TMBOY 45:2aa9f933c8d2 231 }
TMBOY 45:2aa9f933c8d2 232
TMBOY 45:2aa9f933c8d2 233 /**
TMBOY 45:2aa9f933c8d2 234 * 内部空实现的IMediaPlayerListener,如果你只关心onCompletion,可以用这个
TMBOY 45:2aa9f933c8d2 235 */
TMBOY 45:2aa9f933c8d2 236 class SimpleMediaPlayerListener implements IMediaPlayerListener {
TMBOY 45:2aa9f933c8d2 237 @Override
TMBOY 45:2aa9f933c8d2 238 public void onInit() {
TMBOY 45:2aa9f933c8d2 239
TMBOY 45:2aa9f933c8d2 240 }
TMBOY 45:2aa9f933c8d2 241
TMBOY 45:2aa9f933c8d2 242 @Override
TMBOY 45:2aa9f933c8d2 243 public void onPrepared() {
TMBOY 45:2aa9f933c8d2 244
TMBOY 45:2aa9f933c8d2 245 }
TMBOY 45:2aa9f933c8d2 246
TMBOY 45:2aa9f933c8d2 247 @Override
TMBOY 45:2aa9f933c8d2 248 public void onRelease() {
TMBOY 45:2aa9f933c8d2 249
TMBOY 45:2aa9f933c8d2 250 }
TMBOY 45:2aa9f933c8d2 251
TMBOY 45:2aa9f933c8d2 252 @Override
TMBOY 45:2aa9f933c8d2 253 public void onPlaying() {
TMBOY 45:2aa9f933c8d2 254
TMBOY 45:2aa9f933c8d2 255 }
TMBOY 45:2aa9f933c8d2 256
TMBOY 45:2aa9f933c8d2 257 @Override
TMBOY 45:2aa9f933c8d2 258 public void onPaused() {
TMBOY 45:2aa9f933c8d2 259
TMBOY 45:2aa9f933c8d2 260 }
TMBOY 45:2aa9f933c8d2 261
TMBOY 45:2aa9f933c8d2 262 @Override
TMBOY 45:2aa9f933c8d2 263 public void onStopped() {
TMBOY 45:2aa9f933c8d2 264
TMBOY 45:2aa9f933c8d2 265 }
TMBOY 45:2aa9f933c8d2 266
TMBOY 45:2aa9f933c8d2 267 @Override
TMBOY 45:2aa9f933c8d2 268 public void onCompletion() {
TMBOY 45:2aa9f933c8d2 269
TMBOY 45:2aa9f933c8d2 270 }
TMBOY 45:2aa9f933c8d2 271
TMBOY 45:2aa9f933c8d2 272 @Override
TMBOY 45:2aa9f933c8d2 273 public void onError(String error, ErrorType errorType) {
TMBOY 45:2aa9f933c8d2 274
TMBOY 45:2aa9f933c8d2 275 }
TMBOY 45:2aa9f933c8d2 276
TMBOY 45:2aa9f933c8d2 277 @Override
TMBOY 45:2aa9f933c8d2 278 public void onBufferingUpdate(int percent) {
TMBOY 45:2aa9f933c8d2 279
TMBOY 45:2aa9f933c8d2 280 }
TMBOY 45:2aa9f933c8d2 281
TMBOY 45:2aa9f933c8d2 282 @Override
TMBOY 45:2aa9f933c8d2 283 public void onBufferingStart() {
TMBOY 45:2aa9f933c8d2 284
TMBOY 45:2aa9f933c8d2 285 }
TMBOY 45:2aa9f933c8d2 286
TMBOY 45:2aa9f933c8d2 287 @Override
TMBOY 45:2aa9f933c8d2 288 public void onBufferingEnd() {
TMBOY 45:2aa9f933c8d2 289
TMBOY 45:2aa9f933c8d2 290 }
TMBOY 45:2aa9f933c8d2 291 }
TMBOY 45:2aa9f933c8d2 292
TMBOY 45:2aa9f933c8d2 293 /**
TMBOY 45:2aa9f933c8d2 294 * 需要播放的音频类型
TMBOY 45:2aa9f933c8d2 295 */
TMBOY 45:2aa9f933c8d2 296 final class MediaResource {
TMBOY 45:2aa9f933c8d2 297 public InputStream stream; // 流类型
TMBOY 45:2aa9f933c8d2 298 public String url; // url类型
TMBOY 45:2aa9f933c8d2 299 public boolean isStream; // 是否值流类型
TMBOY 45:2aa9f933c8d2 300
TMBOY 45:2aa9f933c8d2 301 public MediaResource(InputStream stream) {
TMBOY 45:2aa9f933c8d2 302 this.stream = stream;
TMBOY 45:2aa9f933c8d2 303 this.isStream = true;
TMBOY 45:2aa9f933c8d2 304 }
TMBOY 45:2aa9f933c8d2 305
TMBOY 45:2aa9f933c8d2 306 public MediaResource(String url) {
TMBOY 45:2aa9f933c8d2 307 this.url = url;
TMBOY 45:2aa9f933c8d2 308 this.isStream = false;
TMBOY 45:2aa9f933c8d2 309 }
TMBOY 45:2aa9f933c8d2 310
TMBOY 45:2aa9f933c8d2 311 @Override
TMBOY 45:2aa9f933c8d2 312 public String toString() {
TMBOY 45:2aa9f933c8d2 313 if (isStream) {
TMBOY 45:2aa9f933c8d2 314 return "stream";
TMBOY 45:2aa9f933c8d2 315 } else {
TMBOY 45:2aa9f933c8d2 316 return url;
TMBOY 45:2aa9f933c8d2 317 }
TMBOY 45:2aa9f933c8d2 318 }
TMBOY 45:2aa9f933c8d2 319 }
TMBOY 45:2aa9f933c8d2 320 }