文档

基础功能

更新时间:

本文提供Windows播放器基础功能的使用示例。

基础播放

创建播放器

本节介绍如何用最简单的方式让Windows播放器SDK播放视频,按照播放方式的不同可以分为手动播放和自动播放。

  1. 创建播放器。

    创建AliPlayer播放器。

    using namespace alivc_player;
    AliPlayer* mPlayerPtr = AliPlayer::CreatePlayer();
  2. 设置监听器。

    Windows播放器SDK提供了各种事件回调,比如:onPlayerEvent、onError等事件。使用时需要一个类继承IAVPListener,并实现里面的纯虚函数。示例如下:

    mPlayerPtr->setListener(new AVPListenerImpl);
  3. 创建播放源。

    • Windows播放器SDK支持3种点播播放方式,包括:UrlSource播放、VidAuth播放(视频点播用户推荐使用)、VidSts播放。

    • Windows播放器SDK仅支持1种直播播放方式,为UrlSource播放。

    点播视频播放

    点播UrlSource播放

    使用点播UrlSource播放方式播放点播视频,需要将播放器的setUrl属性设置为播放地址。播放地址可以是第三方点播地址或阿里云点播服务中的播放地址。

    阿里云播放地址可以调用获取音视频播放地址接口获取。建议您集成点播服务端SDK来获取音视频播放地址,免去自签名的麻烦。调用接口获取音视频播放地址的示例请参见开发者门户

    AVPUrlSource urlSource;
    urlSource.setUrl("media url");  //播放地址,可以是第三方点播地址,或阿里云点播服务中的播放地址。
    mPlayerPtr->setSource(urlSource);

    点播VidAuth播放(推荐)

    使用VidAuth播放方式播放点播视频,需要将播放器的vid属性设置为音视频ID,将playauth属性设置为音视频播放凭证。

    • 音视频ID可以在音视频上传完成后通过控制台(路径:媒资库>音/视频。)或服务端接口(SearchMedia)获取。

    • 音视频播放凭证可以调用获取音视频播放凭证接口获取。建议您集成点播服务端SDK来获取音视频播放凭证,免去自签名的麻烦。调用接口获取音视频播放凭证的示例请参见开发者门户

    推荐视频点播用户采用此播放方式。相比STS播放方式,PlayAuth播放方式在易用性和安全性上更有优势,对比详情请参见凭证方式与STS方式对比

    AVPVidAuthSource authSource;
    authSource.initWithVid("Vid信息",
        "playAuth信息",  // 播放凭证
         "接入地域");  // 点播服务的接入地域,默认为cn-shanghai
    mPlayerPtr->setSource(authSource);

    点播VidSts播放

    使用点播VidSts播放方式播放点播视频是指用STS临时凭证而非点播音视频播放凭证播放。STS临时Token需要提前获取,获取方式请参见创建RAM角色并进行STS临时授权

    播放时需要将播放器的securityToken属性设置为STS临时Token,同时设置为STS临时Token生成的临时AK对(accessKeyId和accessKeySecret)。

    AVPVidStsSource vidSource;
    vidSource.initWithVid("Vid信息",   //视频ID(VideoId)
    "<yourAccessKeyId>",   //鉴权ID
    "<yourAccessKeySecret>",  //鉴权密钥
     	"<yourSecurityToken>",   //安全token
    "region",   //接入地域
    nullptr);
    mPlayerPtr->setSource(vidSource);

    直播视频UrlSource播放

    使用UrlSource播放方式播放直播视频,需要将播放器的setUrl属性设置为直播拉流地址。播放地址可以是第三方直播地址或阿里云直播服务中的拉流地址。

    阿里云直播拉流地址可以通过直播控制台的地址生成器生成。详情请参见阿里云直播地址生成器

    AVPUrlSource urlSource;
    urlSource.setUrl("media url");  //播放地址可以是第三方直播地址,或阿里云直播服务中的拉流地址。
    mPlayerPtr->setSource(urlSource);
  4. 设置显示View。

    如果播放源有画面,那么需要设置显示的view到播放器中,用来显示画面。示例如下:

    mPlayerPtr->setView((void *)显示区域的HWND);
  5. 准备播放。

    调用prepare()方法准备播放。

    mPlayerPtr->prepare();
  6. 可选:开启自动播放,默认为关闭状态。

    mPlayerPtr->setAutoPlay(true);
  7. 开始播放。

    • 如果未开启自动播放,需要在OnPrepard回调中调用mPlayerPtr->start();开始播放视频。

    • 如果开启了自动播放,则不需要调用mPlayerPtr->start();,数据解析完成后将开始自动播放视频。

    mPlayerPtr->start();

控制播放

Windows播放器SDK支持开始、暂停、从指定时间点播放等主流操作。

开始播放

开始播放视频,由start接口实现。示例如下:

mPlayerPtr->start();

从指定时间开始播放

跳转到某个时刻进行播放,由seekToTime接口实现。适用于用户拖拽进度条,或续播等需要从指定时间点开始播放的场景。示例如下:

//跳转到特定时刻的视频画面。
//mode取值:AVP_SEEKMODE_ACCURATE(精确seek)和AVP_SEEKMODE_INACCURATE(非精确seek)。非精确seek会跳转到向前最近的关键帧处。精确seek会跳转到精确的时间,但比非精确seek会慢一些。
mPlayerPtr->seekToTime(int64_t time_in_ms, mode);

暂停播放

暂停播放视频,由pause接口实现。示例如下:

mPlayerPtr->pause();

停止播放

停止播放视频,由stop接口实现。示例如下:

mPlayerPtr->stop();

设置显示模式

Windows播放器SDK支持填充、旋转、镜像等显示设置。

填充

支持设置宽高比适应、宽高比填充和拉伸填充这3种画面填充模式,由setScalingMode接口实现。示例如下:

//设置宽高比适应(将按照视频宽高比等比缩小到view内部,不会有画面变形)
mPlayerPtr->setScalingMode(AVP_SCALINGMODE_SCALEASPECTFIT);
//设置宽高比填充(将按照视频宽高比等比放大,充满view,不会有画面变形)
mPlayerPtr->setScalingMode(AVP_SCALINGMODE_SCALEASPECTFILL);
//设置拉伸填充(如果视频宽高比例与view比例不一致,会导致画面变形)
mPlayerPtr->setScalingMode(AVP_SCALINGMODE_SCALETOFILL);

旋转

画面按指定角度旋转,由setRotateMode接口实现。设置后还可查询旋转角度。示例如下:

//设置画面顺时针旋转0度
mPlayerPtr->setRotateMode(AVP_ROTATE_0);
//设置画面顺时针旋转90度
mPlayerPtr->setRotateMode(AVP_ROTATE_90);
//设置画面顺时针旋转180度
mPlayerPtr->setRotateMode(AVP_ROTATE_180);
//设置画面顺时针旋转270度
mPlayerPtr->setRotateMode(AVP_ROTATE_270);
//获取旋转角度
mPlayerPtr->getRotateMode();

镜像

支持水平镜像、垂直镜像和无镜像,由setMirrorMode接口实现。示例如下:

//设置无镜像
mPlayerPtr->setMirrorMode(AVP_MIRRORMODE_NONE);
//设置水平镜像
mPlayerPtr->setMirrorMode(AVP_MIRRORMODE_HORIZONTAL);
//设置垂直镜像
mPlayerPtr->setMirrorMode(AVP_MIRRORMODE_VERTICAL);       

获取播放信息

Windows播放器SDK支持获取当前的播放进度和播放时长。

获取当前播放进度

获取当前的播放时刻,在onCurrentPositionUpdate回调中获取,单位毫秒。示例如下:

void AlivcLivePlayerMainDlg::onCurrentPositionUpdate(AliPlayer *player, int64_t position)
{
    //position为当前播放进度,单位为毫秒
printf("current position is %lld ms", position);
}

获取播放时长

获取视频总时长。需要在视频加载完成以后才可以获取到,可以在AVPEventPrepareDone事件后获取duration。示例如下:

void AlivcLivePlayerMainDlg::onPlayerEvent(AliPlayer *player, AVPEventType eventType)
{
    if (eventType == AVPEventPrepareDone) {
        int64_t duration = mPlayerPtr->getDuration();
printf("total duration is %lld ms", duration);
    }
}

获取缓冲进度

获取视频当前的缓冲进度,需要在onBufferedPositionUpdate回调中获取position。示例如下:

void AlivcLivePlayerMainDlg::onBufferedPositionUpdate(AliPlayer *player, int64_t position)
{
    printf("buffered position is %lld ms", position);
}

监听播放状态

监听播放器的状态,onPlayerStatusChanged回调参数为当前播放器状态。示例如下:

void AlivcLivePlayerMainDlg::onPlayerStatusChanged(AliPlayer *player, AVPStatus oldStatus, 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;
}
}

设置音量

设置音量包括音量调节和静音设置。

音量调节

调节音量大小,由setVolume接口实现。设置后还可获取音量信息。示例如下:

//volume的值为0~2.0。
mPlayerPtr->setVolume(1.0f);
//获取音量信息。
mPlayerPtr->getVolume();

静音设置

将播放中的视频设置为静音状态,由setMute接口实现。示例如下:

mPlayerPtr->setMute(true);

倍速播放

Windows播放器SDK提供了倍速播放视频的功能,通过设置rate方法,能够以0.5倍~2倍速去播放视频。同时保持变声不变调。示例如下:

//设置倍速播放:支持0.5~2倍速的播放,通常按0.5的倍数来设置,例如0.5倍、1倍、1.5倍等
mPlayerPtr->setRate(1.5);

多清晰度设置

如果使用VID方式(VidAuth(推荐)及VidSts)播放,无需额外设置。Windows播放器SDK会从视频点播服务获取清晰度列表。Windows播放器SDK支持获取和切换清晰度,UrlSource播放方式暂不支持此设置。

获取清晰度

当视频加载完成后,可以获取视频的清晰度。

void AlivcLivePlayerMainDlg::onTrackReady(AliPlayer *player, AVPTrackInfo *info[], int count)
{
    if (count < 0) {
        return;
    }

    for (int i = 0; i < count; i++) {
        AVPTrackInfo *track = info[i];
        switch (track->trackType) {
            case AVPTRACK_TYPE_VIDEO: {
                int trackBitrate = track->trackBitrate;
            } break;
        }
    }
}

切换清晰度

通过selectTrack方法切换清晰度,传递对应TrackInfo的index即可。

mPlayerPtr->selectTrack(trackIndex);

清晰度切换通知

清晰度切换成功回调。

void AlivcLivePlayerMainDlg::onTrackChanged(AliPlayer *player, AVPTrackInfo *info)
{
    // 切换完成
}

循环播放

Windows播放器SDK提供了循环播放视频的功能。调用setLoop开启循环播放,播放完成后,将会自动从头开始播放视频。同时循环开始的回调将会在AVPEventLoopingStart中通知。示例如下:

mPlayerPtr->setLoop(true);