本文提供Android播放器基础功能的使用示例。
创建播放器
本节介绍如何用简单的方式通过Android播放器SDK播放视频,按照播放方式的不同可以分为手动播放和自动播放。
控制播放
Android播放器SDK支持从指定时间点播放、开始、暂停、停止播放等操作。
开始播放
指开始播放视频,由
start
接口实现。示例如下:aliyunVodPlayer.start();
从指定时间开始播放
指跳转到某个时刻进行播放,由
seekTo
接口实现。适用于用户拖拽进度条,或续播等需要从指定时间点开始播放的场景。示例如下://posotion为指定的时间,单位:毫秒。
aliyunVodPlayer.seekTo(long position);
暂停播放
指暂停播放视频,由
pause
接口实现。示例如下:aliyunVodPlayer.pause();
停止播放
指停止播放视频,由
stop
接口实现。示例如下:aliyunVodPlayer.stop();
设置显示模式
Android播放器SDK支持填充、旋转、镜像等显示设置。
填充
支持设置宽高比适应、宽高比填充和拉伸填充这3种画面填充模式,由
setScaleMode
接口实现。示例如下://设置宽高比适应(将按照视频宽高比等比缩小到view内部,不会有画面变形)
aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);
//设置宽高比填充(将按照视频宽高比等比放大,充满view,不会有画面变形)
aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FILL);
//设置拉伸填充(如果视频宽高比例与view比例不一致,会导致画面变形)
aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_TO_FILL);
旋转
指画面按指定角度旋转,由
setRotateMode
接口实现。设置后还可查询旋转角度。示例如下://设置画面顺时针旋转0度
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_0);
//设置画面顺时针旋转90度
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_90);
//设置画面顺时针旋转180度
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_180);
//设置画面顺时针旋转270度
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_270);
//获取旋转角度
aliyunVodPlayer.getRotateMode();
镜像
支持水平镜像、垂直镜像和无镜像,由
setMirrorMode
接口实现。示例如下://设置无镜像
aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
//设置水平镜像
aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_HORIZONTAL);
//设置垂直镜像
aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_VERTICAL);
获取播放信息
Android播放器SDK支持获取当前的播放进度、播放时长和缓冲进度等信息。
获取当前播放进度
指获取当前的播放时刻,需要在onInfo回调中获取,由
getExtraValue
接口实现。示例如下:mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.CurrentPosition){
//extraValue为当前播放进度,单位为毫秒
long extraValue = infoBean.getExtraValue();
}
}
});
获取播放时长
指获取视频总时长。需要在视频加载完成以后才可以获取到,可以在onPrepared事件后获取。由
getDuration
接口实现。示例如下:long duration = mAliPlayer.getDuration();
获取缓冲进度
指获取视频当前的缓冲进度,需要在onInfo回调中获取,由
getExtraValue
接口实现。示例如下:mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.BufferedPosition){
////extraValue为当前缓冲进度,单位为毫秒
long extraValue = infoBean.getExtraValue();
}
}
});
获取实时渲染帧率、音视频码率、网络下行码率
示例如下:
//获取当前渲染的帧率,数据类型为Float。
mAliPlayer.getOption(IPlayer.Option.RenderFPS);
//获取当前播放的视频码率,数据类型为Float,单位为bps。
mAliPlayer.getOption(IPlayer.Option.VideoBitrate);
//获取当前播放的音频码率,数据类型为Float,单位为bps。
mAliPlayer.getOption(IPlayer.Option.AudioBitrate);
//获取当前的网络下行码率,数据类型为Float,单位为bps。
mAliPlayer.getOption(IPlayer.Option.DownloadBitrate);
监听播放状态
指监听播放器的状态,onStateChanged回调参数为当前播放器状态。示例如下:
mAliPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
@Override
public void onStateChanged(int newState) {
/*
int idle = 0;
int initalized = 1;
int prepared = 2;
int started = 3;
int paused = 4;
int stopped = 5;
int completion = 6;
int error = 7;
*/
}
});
设置音量
设置音量包括音量调节和静音设置。
音量调节
指调节音量大小,支持0~2倍,当音量大于1时,可能出现噪音,不推荐使用。由
setVolume
接口实现。设置后还可获取音量信息。示例如下://volume的值为0~2之间的实数。
aliyunVodPlayer.setVolume(1f);
//获取音量信息。
aliyunVodPlayer.getVolume();
静音设置
指将播放中的视频设置为静音状态,由
setMute
接口实现。示例如下:aliyunVodPlayer.setMute(true);
倍速播放
Android播放器SDK提供了倍速播放视频的功能,通过设置
setSpeed
方法,能够以0.5倍~5倍速去播放视频。同时保持变声不变调。示例如下://设置倍速播放:支持0.5~5倍速的播放,通常按0.5的倍数来设置,例如0.5倍、1倍、1.5倍等
aliyunVodPlayer.setSpeed(1.0f);
多清晰度设置
如果使用VID方式(VidAuth及VidSts)播放,无需额外设置。Android播放器SDK会从点播服务获取清晰度列表。Android播放器SDK支持获取和切换清晰度,UrlSource方式暂不支持此设置。
获取清晰度
当视频加载完成后,可以获取视频的清晰度。
//获取媒体所有的流信息
List<TrackInfo> trackInfos = mAliPlayer.getMediaInfo().getTrackInfos();
//遍历并获取清晰度
for (TrackInfo trackInfo : trackInfos) {
if(trackInfo.getType() == TrackInfo.Type.TYPE_VOD){
//获取视频清晰度
String vodDefinition = trackInfo.getVodDefinition();
}
}
切换清晰度
通过selectTrack
方法切换清晰度,传递对应TrackInfo的index即可。
mAliPlayer.selectTrack(index);
清晰度切换通知
清晰度切换成功与失败回调。
mAliPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
@Override
public void onChangedSuccess(TrackInfo trackInfo) { }
@Override
public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { }
});
循环播放
Android播放器SDK提供了循环播放视频的功能。调用
setLoop
开启循环播放,播放完成后,将会自动从头开始播放视频。示例如下:aliyunVodPlayer.setLoop(true);
同时循环开始的回调将会使用
onInfo
中通知。示例如下:aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if (infoBean.getCode() == InfoCode.LoopingStart){
//循环播放开始事件。
}
}
});