本文提供iOS播放器基础功能的使用示例。
创建播放器
本节介绍如何用最简单的方式让iOS播放器SDK播放视频,按照播放方式的不同可以分为手动播放和自动播放。
说明 5.4.7.1及之后版本的iOS播放器SDK,在配置License后,需要在播放器实例初始化前主动调用初始化证书服务。代码示例如下:
[AliPrivateService initLicenseService];
控制播放
iOS播放器SDK支持开始、暂停、从指定时间点播放等主流操作。
开始播放
开始播放视频,由
start
接口实现。示例如下: [self.player start];
从指定时间开始播放
跳转到某个时刻进行播放,由
seekToTime
接口实现。适用于用户拖拽进度条,或续播等需要从指定时间点开始播放的场景。示例如下:// position为指定的时间。单位:毫秒。seekMode可设置为精准模式和非精准模式。
// 精准seek
[self.player seekToTime:position seekMode:AVP_SEEKMODE_ACCURATE];
// 非精准seek
[self.player seekToTime:position seekMode:AVP_SEEKMODE_INACCURATE];
暂停播放
暂停播放视频,由
pause
接口实现。示例如下:[self.player pause];
停止播放
停止播放视频,由
stop
接口实现。示例如下:[self.player stop];
设置显示模式
iOS播放器SDK支持填充、旋转、镜像等显示设置。
填充
支持设置宽高比适应、宽高比填充和拉伸填充这3种画面填充模式,由
scalingMode
接口实现。示例如下://设置宽高比适应(将按照视频宽高比等比缩小到view内部,不会有画面变形)
self.player.scalingMode = AVP_SCALINGMODE_SCALEASPECTFIT;
//设置宽高比填充(将按照视频宽高比等比放大,充满view,不会有画面变形)
self.player.scalingMode = AVP_SCALINGMODE_SCALEASPECTFILL;
//设置拉伸填充(如果视频宽高比例与view比例不一致,会导致画面变形)
self.player.scalingMode = AVP_SCALINGMODE_SCALETOFILL;
旋转
指画面按指定角度旋转,由
rotateMode
接口实现。示例如下://设置画面顺时针旋转0度
self.player.rotateMode = AVP_ROTATE_0;
//设置画面顺时针旋转90度
self.player.rotateMode = AVP_ROTATE_90;
//设置画面顺时针旋转180度
self.player.rotateMode = AVP_ROTATE_180;
//设置画面顺时针旋转270度
self.player.rotateMode = AVP_ROTATE_270;
镜像
支持水平镜像、垂直镜像和无镜像,由
mirrorMode
接口实现。示例如下://设置无镜像
self.player.mirrorMode = AVP_MIRRORMODE_NONE;
//设置水平镜像
self.player.mirrorMode = AVP_MIRRORMODE_HORIZONTAL;
//设置垂直镜像
self.player.mirrorMode = AVP_MIRRORMODE_VERTICAL;
获取播放信息
iOS播放器SDK支持获取当前的播放进度、播放时长和缓冲进度信息。
获取当前播放进度
指获取当前的播放时刻,需要在onCurrentPositionUpdate回调中获取position。示例如下:
- (void)onCurrentPositionUpdate:(AliPlayer*)player position:(int64_t)position {
//position为当前播放进度,单位为毫秒
NSString *position = [NSString stringWithFormat:@"%lld, position"];
}
获取播放时长
指获取视频总时长。需要在视频加载完成以后才可以获取到,比如在 onPrepared 回调之后再获取。单位:毫秒。示例如下:
-(void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType {
switch (eventType) {
case AVPEventPrepareDone: {
if (self.player.duration >= 0) {
NSString *duration = self.player.duration;
}
}
break;
default:
break;
}
}
获取缓冲进度
指获取视频当前的缓冲进度,需要在onBufferedPositionUpdate回调中获取position。示例如下:
- (void)onBufferedPositionUpdate:(AliPlayer*)player position:(int64_t)position {
NSString *bufferPosition = position;
}
获取实时渲染帧率、音视频码率、网络下行码率
示例如下:
//获取当前渲染的帧率,数据类型为Float。
[self.player getOption:AVP_OPTION_RENDER_FPS]
//获取当前播放的视频码率,数据类型为Float,单位为bps。
[self.player getOption:AVP_OPTION_VIDEO_BITRATE]
//获取当前播放的音频码率,数据类型为Float,单位为bps。
[self.player getOption:AVP_OPTION_AUDIO_BITRATE]
//获取当前的网络下行码率,数据类型为Float,单位为bps。
[self.player getOption:AVP_OPTION_DOWNLOAD_BITRATE]
监听播放状态
指监听播放器的状态,onPlayerStatusChanged回调参数为当前播放器状态。示例如下:
- (void)onPlayerStatusChanged:(AliPlayer*)player oldStatus:(AVPStatus)oldStatus newStatus:(AVPStatus)newStatus {
switch (newStatus) {
case AVPStatusIdle:{
// 空转,闲时,静态
}
break;
case AVPStatusInitialzed:{
// 初始化完成
}
break;
case AVPStatusPrepared:{
// 准备完成
}
break;
case AVPStatusStarted:{
// 正在播放
}
break;
case AVPStatusPaused:{
// 播放暂停
}
break;
case AVPStatusStopped:{
// 播放停止
}
break;
case AVPStatusCompletion:{
// 播放完成
}
break;
case AVPStatusError:{
// 播放错误
}
break;
default:
break;
}
}
设置音量
设置音量包括音量调节和静音设置。
音量调节
指调节音量大小,支持0~2倍,当音量大于1时,可能出现噪音,不推荐使用。由
volume
接口实现。设置后还可获取音量信息。示例如下://volume的值为0~2之间的实数。
self.player.volume = 1.0f;
//获取音量信息。
self.player.volume
静音设置
指将播放中的视频设置为静音状态,由
muted
接口实现。示例如下:self.player.muted = YES;
倍速播放
iOS播放器SDK提供了倍速播放视频的功能,通过设置
rate
方法,能够以0.5倍~5倍速去播放视频。同时保持变声不变调。示例如下://设置倍速播放:支持0.5~5倍速的播放,通常按0.5的倍数来设置,例如0.5倍、1倍、1.5倍等
self.player.rate = 1.0f;
多清晰度设置
如果使用VID方式(VidAuth及VidSts)播放,无需额外设置。iOS播放器SDK会从点播服务获取清晰度列表。iOS播放器SDK支持获取和切换清晰度,UrlSource方式暂不支持此设置。
获取清晰度
当视频加载完成后,可以获取视频的清晰度。可以使用onTrackReady监听回调返回info信息,获取清晰度trackBitrate。
- (void)onTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
for (int i=0; i<info.count; i++) {
AVPTrackInfo* track = [info objectAtIndex:i];
switch (track.trackType) {
case AVPTRACK_TYPE_VIDEO: {
int trackBitrate = track.trackBitrate;
}
break;
}
}
}
切换清晰度
切换清晰度通过selectTrack
方法,传递对应TrackInfo的index即可。
[self.player selectTrack:index];
清晰度切换通知
清晰度切换完成回调onTrackChanged。
- (void)onTrackChanged:(AliPlayer*)player info:(AVPTrackInfo*)info {
// 切换完成
}
循环播放
iOS播放器SDK提供了循环播放视频的功能。调用
loop
开启循环播放,播放完成后,将会自动从头开始播放视频。示例如下:self.player.loop = YES;
同时循环开始的回调将会使用
AVPEventLoopingStart
中通知。示例如下:- (void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType {
switch (eventType) {
case AVPEventLoopingStart:
break;
}
}