本文为您提供了使用Android端播放器功能的操作步骤及SDK示例,通过本文内容您可以快速了解如何通过SDK使用Android端播放器功能。

播放功能

  1. 创建播放器

    通过AliPlayerFactory类创建播放器,可以创建两种播放器:

    • AliPlayer
    • AliListPlayer
    单个播放功能使用AliPlayer。创建方法示例如下:
    AliPlayer aliyunVodPlayer;
    .....
    aliyunVodPlayer = AliPlayerFactory.createAliPlayer(getApplicationContext());
    如果播放的视频是通过播放器SDK安全下载后的本地文件,那么还需要设置一个加密校验信息(建议在Application中配置一次即可),示例如下:
    PrivateService.initService(getApplicationContext(), "encryptedApp.dat的本地路径");
    创建加密文件的方式,请参见安全文件获取问题
    说明 如果没有设置正确的校验文件,播放安全下载后的文件会报错:ERROR_DEMUXER_OPENSTREAM。
  2. 设置播放器监听事件
    播放器提供了多种监听事件,比如:onPrepared,onCompletion等事件。示例如下:
    aliyunVodPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
        @Override
        public void onCompletion() {
            //播放完成事件
        }
    });
    aliyunVodPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
        @Override
        public void onError(ErrorInfo errorInfo) {
            //出错事件
        }
    });
    aliyunVodPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
        @Override
        public void onPrepared() {
            //准备成功事件
        }
    });
    aliyunVodPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() {
        @Override
        public void onVideoSizeChanged(int width, int height) {
            //视频分辨率变化回调
        }
    });
    aliyunVodPlayer.setOnRenderingStartListener(new IPlayer.OnRenderingStartListener() {
        @Override
        public void onRenderingStart() {
            //首帧渲染显示事件
        }
    });
    aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
        @Override
        public void onInfo(int type, long extra) {
            //其他信息的事件,type包括了:循环播放开始,缓冲位置,当前播放位置,自动播放开始等
        }
    });
    aliyunVodPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
        @Override
        public void onLoadingBegin() {
            //缓冲开始。
        }
        @Override
        public void onLoadingProgress(int percent, float kbps) {
            //缓冲进度
        }
        @Override
        public void onLoadingEnd() {
            //缓冲结束
        }
    });
    aliyunVodPlayer.setOnSeekCompleteListener(new IPlayer.OnSeekCompleteListener() {
        @Override
        public void onSeekComplete() {
            //拖动结束
        }
    });
    aliyunVodPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() {
        @Override
        public void onSubtitleShow(long id, String data) {
            //显示字幕
        }
        @Override
        public void onSubtitleHide(long id) {
            //隐藏字幕
        }
    });
    aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
        @Override
        public void onChangedSuccess(TrackInfo trackInfo) {
            //切换音视频流或者清晰度成功
        }
        @Override
        public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
            //切换音视频流或者清晰度失败
        }
    });
    aliyunVodPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
        @Override
        public void onStateChanged(int newState) {
            //播放器状态改变事件
        }
    });
    aliyunVodPlayer.setOnSnapShotListener(new IPlayer.OnSnapShotListener() {
        @Override
        public void onSnapShot(Bitmap bm, int with, int height) {
            //截图事件
        }
    });
    说明 具体回调参数的详细说明,请参见接口说明
  3. 创建DataSource,准备播放
    播放器支持4种播放源:
    • VidSts播放
    • VidAuth播放
    • VidMps播放
    • UrlSource播放
    说明 UrlSource是直接的URL播放,其余的三种是通过vid进行播放:VidSts,VidAuth点播用户使用;VidMps仅限MPS用户使用。
    以VidSts举例,示例如下:
    //创建VidSts
     VidSts aliyunVidSts = new VidSts();
     aliyunVidSts.setVid(视频vid);
     aliyunVidSts.setAccessKeyId(临时akId);
     aliyunVidSts.setAccessKeySecret(临时akSecret);
     aliyunVidSts.setSecurityToken(安全token);
     aliyunVidSts.setRegion(接入区域);
     //设置播放源
     aliyunVodPlayer.setDataSource(aliyunVidSts);
     ......
     //准备播放
     aliyunVodPlayer.prepare();
    说明

    MPS视频播放的流程与概念,请参见视频播放

    通过播放凭证VidAuth播放的流程,请参见通过播放凭证播放

    接入区域Region的设置,请参见点播中心和访问域名

  4. 设置显示的view
    如果播放源有画面,那么需要设置显示的view到播放器中,用来显示画面,支持SurfaceView和TextureView。以SurfaceView举例,示例如下:
    surfaceView = (SurfaceView) findViewById(R.id.playview);
    surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            aliyunVodPlayer.setDisplay(holder);
        }
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            aliyunVodPlayer.redraw();
        }
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            aliyunVodPlayer.setDisplay(null);
        }
    });

    surfaceChanged方法中需要调用播放器的redraw方法,是用来刷新视频画面的。如果view的大小变化了,调用此方法将会更新画面大小,保证视频画面与View的变化一致。

  5. 播放控制
    您可以自行创建播放器的播放控制按钮,在按钮事件里面实现播放器控制接口。基本控制功能有播放、停止、暂停、拖动(Seek),其中Seek功能仅对点播有效,直播使用暂停功能时会使画面停留在当前画面,使用恢复后会开始播放当前画面。示例如下:
    // 开始播放。
    aliyunVodPlayer.start();
    //暂停播放
    aliyunVodPlayer.pause();
    //停止播放
    aliyunVodPlayer.stop();
    // 跳转到。不精准。
    aliyunVodPlayer.seekTo(long position);
    // 重置
    aliyunVodPlayer.reset();
    //释放。释放后播放器将不可再被使用。
    aliyunVodPlayer.release();
  6. 切换多码率
    播放器SDK支持HLS多码率地址播放。在prepare成功之后,通过getMediaInfo可以获取到各个码流的信息,即TrackInfo。示例如下:
    List<TrackInfo> trackInfos  = aliyunVodPlayer.getMediaInfo().getTrackInfos();
    在播放过程中,可以通过调用播放器的selectTrack方法切换播放的码流。示例如下:
    int index = trackInfo.getIndex();
    aliyunVodPlayer.selectTrack(index);
    切换的结果会在OnTrackChangedListener监听之后会回调(在调用selectTrack之前设置)。示例如下:
    aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
        @Override
        public void onChangedSuccess(TrackInfo trackInfo) {
            //切换成功
        }
        @Override
        public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
            //切换失败。失败原因通过errorInfo.getMsg()获取
        }
    });
  7. 自动播放
    播放器SDK支持自动播放视频的设置。在prepare之前调用setAutoPlay即可设置。示例如下:
    aliyunVodPlayer.setAutoPlay(true);
    设置自动播放之后,prepare成功之后,将会自动播放视频。示例如下:
    aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
        @Override
        public void onInfo(InfoBean infoBean) {
            if (infoBean.getCode() == InfoCode.AutoPlayStart){
                //自动播放开始事件。
            }
        }
    });
    注意 自动播放的时候将不会回调onPrepared回调,而会回调onInfo回调。
  8. 循环播放
    播放器SDK提供了循环播放视频的功能。调用setLoop开启循环播放,播放完成后,将会自动从头开始播放视频。示例如下:
    aliyunVodPlayer.setLoop(true);
    同时循环开始的回调将会使用onInfo中通知。示例如下:
    aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
        @Override
        public void onInfo(InfoBean infoBean) {
            if (infoBean.getCode() == InfoCode.LoopingStart){
                //循环播放开始事件。
            }
        }
    });
  9. 画面旋转、填充、镜像操作
    播放器SDK提供过了多种设置,可以对画面进行精确的控制。包括设置画面旋转模式,设置画面缩放模式,设置镜像模式。示例如下:
    //设置画面的镜像模式:水平镜像,垂直镜像,无镜像。
    aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
    //设置画面旋转模式:旋转0度,90度,180度,270度
    aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_0);
    //设置画面缩放模式:宽高比填充,宽高比适应,拉伸填充
    aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);

    画面的旋转模式包括:

    说明
    ROTATE_0 顺时针旋转0度
    ROTATE_90 顺时针旋转90度
    ROTATE_180 顺时针旋转180度
    ROTATE_270 顺时针旋转270度

    画面的缩放模式包括:

    说明
    SCALE_ASPECT_FIT 宽高比适应(将按照视频宽高比等比缩小到view内部,不会有画面变形)
    SCALE_ASPECT_FILL 宽高比填充(将按照视频宽高比等比放大,充满view,不会有画面变形)
    SCALE_TO_FILL 拉伸填充(如果视频宽高比例与view比例不一致,会导致画面变形)

    镜像模式包括:

    说明
    MIRROR_MODE_NONE 无镜像
    MIRROR_MODE_HORIZONTAL 水平镜像
    MIRROR_MODE_VERTICAL 垂直镜像
  10. 静音、音量控制
    播放器SDK提供了对视频的音量控制功能。调用setMute设置播放器静音,调用setVolume控制音量大小,范围是0~1。示例如下:
    //设置播放器静音
    aliyunVodPlayer.setMute(true);
    //设置播放器音量,范围0~1.
    aliyunVodPlayer.setVolume(1f);
  11. 倍速播放
    播放器SDK提供了倍速播放视频的功能,通过设置setSpeed方法,能够以0.5倍~2倍速去播放视频。同时保持变声不变调。示例如下:
    //设置倍速播放:支持0.5~2倍速的播放
    aliyunVodPlayer.setSpeed(1.0f);
  12. 截图功能
    播放器SDK提供了对当前视频截图的功能snapshot。截取的是原始的数据,并转为bitmap返回。回调接口为OnSnapShotListener。示例如下:
    //设置截图回调
    aliyunVodPlayer.setOnSnapShotListener(new OnSnapShotListener(){
        @Override
        public void onSnapShot(Bitmap bm, int with, int height){
            //获取到的bitmap。以及图片的宽高。
        }
    });
    //截取当前播放的画面
    aliyunVodPlayer.snapshot();
  13. 边播边缓存
    播放器SDK提供了边播边缓存的功能,能够让用户重复播放视频时,达到省流量的目的。只需在prepare之前给播放器配置CacheConfig即可实现此功能。示例如下:
    CacheConfig cacheConfig = new CacheConfig();
    //开启缓存功能
    cacheConfig.mEnable = true;
     //能够缓存的单个文件最大时长。超过此长度则不缓存
    cacheConfig.mMaxDurationS =100;
    //缓存目录的位置
    cacheConfig.mDir = "缓存的文件目录";
     //缓存目录的最大大小。超过此大小,将会删除最旧的缓存文件
    cacheConfig.mMaxSizeMB = 200;
    //设置缓存配置给到播放器
    mAliyunVodPlayer.setCacheConfig(cacheConfig);
    缓存成功之后,以下情况将会利用缓存文件(必须已经设置了setCacheConfig
    • 如果设置了循环播放,即setLoop(true),那么第二次播放的时候,将会自动播放缓存的文件。
    • 缓存成功后,重新创建播放器,播放同样的资源,也会自动使用缓存文件。
      说明 vid的缓存文件是通过vid等信息定位的,所以对于vid的缓存文件,将需要网络请求信息之后才能确定使用哪个缓存文件。
    播放器提供了获取缓存文件路径的接口:
    API接口 描述 参数 返回值
    public String getCacheFilePath(String URL) 根据URL获取缓存的文件名。必须先调用setCacheConfig才能获取到。 URL 最终缓存的文件绝对路径。
    public String getCacheFilePath(String vid, String format, String definition, int previewTime) 根据vid获取缓存的文件名。必须先调用setCacheConfig才能获取到。
    • vid:视频ID
    • format:视频格式
    • definition:视频清晰度
    • previewTime:试看时长
    最终缓存的文件绝对路径。
    边播边缓存并不是所有的视频都会缓存,有些情况是不会缓存的。示例如下:
    • 对于直接播放URL的方式,即UrlSource。如果是HLS(即M3U8)地址,将不会缓存。如果是其他支持的格式,则根据缓存配置进行缓存。
    • 对于VID的方式播放,将会根据缓存配置进行缓存。
    • 播放器读取完全部的数据则视为缓存成功。如果在此之前,调用stop,或者出错onError,则缓存将会失败。
    • cache内的seek的操作不会影响缓存结果。cache外的seek会导致缓存失败。
    • 如果视频源是加密的,此时如果加密文件与App信息不一致,将会缓存失败。
    • cache的结果回调,会通过onInfo回调。
    -(void)onPlayerEvent:(AliPlayer*)player eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description {
        if (eventWithString == EVENT_PLAYER_CACHE_SUCCESS) {
            //缓存成功事件。
        }else if (eventWithString == EVENT_PLAYER_CACHE_ERROR) {
            //缓存失败事件。
        }
    }
  14. 试看功能

    当设置试看的时长,通过播放器SDK播放视频时,服务端将不会返回完整的视频内容,而是返回试看时间段的内容。

    播放器SDK通过配合点播服务配置,可以实现试看功能,支持VidSts和VidAuth两种方式。如何配置和使用试看功能,请参见点播试看

    配置试看功能之后,通过SDK的VidPlayerConfigGen.setPreviewTime()方法设置播放器的试看时长。以VidSts为例,示例如下:
    VidSts vidSts = new VidSts;
    ....
    VidPlayerConfigGen configGen = new VidPlayerConfigGen();
    configGen.setPreviewTime(20);//20秒试看
    vidSts.setPlayConfig(configGen);//设置给播放源
    ...
    说明
    • VidPlayerConfigGen支持设置服务端支持的请求参数。请参见请求参数说明
    • FLV和MP3暂时不支持试看。
  15. 硬解开关
    播放器SDK提供了H.264,H.265的硬解码能力,同时提供了enableHardwareDecoder提供开关。默认开,并且在硬解初始化失败时,自动切换为软解,保证视频的正常播放。示例如下:
    //开启硬解。默认开启
    mAliyunVodPlayer.enableHardwareDecoder(true);
    如果从硬解自动切换为软解,将会通过onInfo回调,示例如下:
    mApsaraPlayerActivity.setOnInfoListener(new IPlayer.OnInfoListener() {
        @Override
        public void onInfo(InfoBean infoBean) {
            if (infoBean.getCode() == InfoCode.SwitchToSoftwareVideoDecoder) {
                //切换到软解
            }
        }
    });
  16. 设置黑名单
    播放器SDK提供了硬解的黑名单机制。对于明确不能使用硬解播放的机器,可以直接使用软解,避免了无效的操作。示例如下:
    DeviceInfo deviceInfo = new DeviceInfo();
    deviceInfo.model="Lenovo K320t";
    AliPlayerFactory.addBlackDevice(BlackType.HW_Decode_H264 ,deviceInfo );

    退出App之后,黑名单自动失效。

  17. 设置Referer
    播放器SDK提供了PlayerConfig用来设置请求referer。配合控制台的黑白名单referer,可以控制访问权限。播放器SDK的设置示例如下:
    //先获取配置
    PlayerConfig config = mAliyunVodPlayer.getConfig();
    //设置referer,示例:http://example.aliyundoc.com。(注意:设置referer时,需要加上前面的协议部分。)
    config.mReferrer = referrer;
    ....//其他设置
      //设置配置给播放器
    mAliyunVodPlayer.setConfig(config);
  18. 设置UserAgent
    播放器SDK提供了PlayerConfig用来设置请求UA。设置之后,播放器请求的过程中将会带上UA信息。播放器SDK的设置示例如下:
    //先获取配置
    PlayerConfig config = mAliyunVodPlayer.getConfig();
    //设置UA
    config.mUserAgent = "需要设置的UserAgent";
    ....//其他设置
      //设置配置给播放器
    mAliyunVodPlayer.setConfig(config);
  19. 配置网络重试时间和次数
    通过PlayerConfig,用户可以设置播放器SDK的网络超时的时间和重试次数。播放器SDK的设置,示例如下:
    //先获取配置
    PlayerConfig config = mAliyunVodPlayer.getConfig();
    //设置网络超时时间,单位ms
    config.mNetworkTimeout = 5000;
    //设置超时重试次数。每次重试间隔为networkTimeout。networkRetryCount=0则表示不重试,重试策略app决定,默认值为2
    config.mNetworkRetryCount=2;
    ....//其他设置
      //设置配置给播放器
    mAliyunVodPlayer.setConfig(config);
    说明
    • 如果设置了NetworkRetryCount:如此时发生网络问题,导致出现loading后,那么将会重试NetworkRetryCount次,每次的间隔时间为mNetworkTimeout。
    • 如果重试多次之后,还是loading的状态,那么就会回调onError事件,此时,ErrorInfo.getCode()=ErrorCode.ERROR_LOADING_TIMEOUT。
    • 如果NetworkRetryCount设置为0,当网络重试超时的时候,播放器就会回调onInfo事件,事件的InfoBean.getCode()=InfoCode.NetworkRetry。 此时,可以调用播放器的reload方法进行重新加载网络,或者进行其他的处理。这块的逻辑可以由App自己来处理。
  20. 配置缓存和延迟控制
    播放器SDK通过PlayerConfig提供了设置缓存和延迟的控制接口。示例如下:
    //先获取配置
    PlayerConfig config = mAliyunVodPlayer.getConfig();
    //最大延迟。注意:直播有效。当延时比较大时,播放器sdk内部会追帧等,保证播放器的延时在这个范围内。
    config.mMaxDelayTime = 5000;
    // 最大缓冲区时长。单位ms。播放器每次最多加载这么长时间的缓冲数据。
    config.mMaxBufferDuration = 50000;
    //高缓冲时长。单位ms。当网络不好导致加载数据时,如果加载的缓冲时长到达这个值,结束加载状态。
    config.mHighBufferDuration = 3000;
    // 起播缓冲区时长。单位ms。这个时间设置越短,起播越快。也可能会导致播放之后很快就会进入加载状态。
    config.mStartBufferDuration = 500;
    ....//其他设置
    //设置配置给播放器
    mAliyunVodPlayer.setConfig(config);
    注意 三个缓冲区时长的大小关系必须为:mStartBufferDuration<=mHighBufferDuration<=mMaxBufferDuration。
  21. 支持HTTP Header设置
    播放器通过PlayerConfig参数,可以给播放器中的请求加上HTTP的header参数。示例如下:
    //先获取配置
    PlayerConfig config = mAliyunVodPlayer.getConfig();
    //定义header
    String[] headers = new String[1];
    headers[0]="Host:xxx.com";//比如需要设置Host到header中。
    //设置header
    config.setCustomHeaders(headers);
    ....//其他设置
      //设置配置给播放器
    mAliyunVodPlayer.setConfig(config);

列表播放功能

当前短视频列表播放比较流行。阿里播放器提供了完整的列表播放功能,内部包含预加载机制,大幅提高了视频的起播速度。

  1. 创建播放器
    创建播放器通过AliPlayerFactory类创建播放器。可以创建两种播放
    • AliPlayer
    • AliListPlayer
    AliListPlayerAliPlayer多了列表播放的功能,其余功能是一致的。列表播放请使用AliListPlayer创建。示例如下:
    AliListPlayer aliyunListPlayer;
    .....
    aliyunListPlayer = AliPlayerFactory.createAliListPlayer(getApplicationContext());
  2. 设置预加载个数
    合理设置预加载个数,能够有效的提高起播的速度。示例如下:
    //设置预加载个数。总共加载的个数为: 1 + count*2。
    aliyunListPlayer.setPreloadCount(int count);
  3. 添加/移除多个播放源
    列表播放支持多种播放源:VidSts和url。url为直接的播放地址,vid为点播视频id。示例如下:
    //添加vid源
    aliyunListPlayer.addVid(String videoId, String uid);
    //添加URL源
    aliyunListPlayer.addUrl(String url, String uid);
    //移除某个源
    aliyunListPlayer.removeSource(String uid);
    说明
    • 不支持VidAuth和VidMps的方式。
    • uid是视频的唯一标志。用于区分视频是否一样。如果uid一样,则认为是一样的。如果播放出现串流的情况,请注意查看是不是在不同的界面设置了同一个uid。uid没有格式限制,任意字符串都行。
  4. 播放视频源
    添加了一个或多个播放源之后,调用moveTo便可以自动播放某个源。示例如下:
    //url时使用此接口
    aliyunVodPlayer.moveTo(String uid);
    //vid的时候使用此接口,需要传递stsInfo,保证不会失效
    aliyunVodPlayer.moveTo(String uid, StsInfo info);
  5. 播放上一个、下一个视频
    播放器提供了moveToPrevmoveToNext接口用于播放上一个,下一个视频。示例如下:
    //移动到下一个视频。 注意:只能用于url的源。这个方法不适用于vid的播放。
    aliyunVodPlayer.moveToNext();
    //移动到上一个视频。注意:只能用于url的源。这个方法不适用于vid的播放。
    aliyunVodPlayer.moveToPrev();
    //移动到下一个视频。注意:只能用于vid的播放。
    aliyunVodPlayer.moveToNext(StsInfo info);
    // 移动到上一个视频。注意:只能用于vid的播放。
    aliyunVodPlayer.moveToPrev(StsInfo info);

视频下载功能

阿里云SDK提供了点播服务视频的下载功能,能够通过VidSts和VidAuth下载点播服务上的视频。同时,下载的方式提供了安全下载和普通下载的模式(在控制台设置)。
  • 普通下载

    下载后的视频数据未经过阿里云加密,用户可以用第三方播放器播放。

  • 安全下载

    下载后的视频数据经过阿里云加密。第三方播放器无法播放。仅支持使用阿里云的播放器进行播放。

  1. 创建并设置下载器创建下载器,通过 AliDownloaderFactory创建。示例如下:
    AliMediaDownloader mAliDownloader = null;
    ......
    //创建下载器
    mAliDownloader = AliDownloaderFactory.create(getApplicationContext());
    //配置下载保存的路径
    mAliDownloader.setSaveDir("保存的文件夹地址");
    下载SDK支持私有加密的下载。为了保证安全性,需要配置一个加密校验文件到SDK。(建议在Application中配置一次即可)。示例如下:
    PrivateService.initService(getApplicationContext(),  "encryptedApp.dat所在的文件路径");
    注意 如果是安全下载,并且加密校验文件与App信息不一致,会导致下载失败。
  2. 设置监听事件
    下载器提供了多个事件监听。示例如下:
    mAliDownloader.setOnPreparedListener(new AliMediaDownloader.OnPreparedListener() {
       @Override
       public void onPrepared(MediaInfo mediaInfo) {
           //准备下载项成功
       }
    });
    mAliDownloader.setOnProgressListener(new AliMediaDownloader.OnProgressListener() {
       @Override
       public void onDownloadingProgress(int percent) {
           //下载进度百分比
       }
       @Override
       public void onProcessingProgress(int percent) {
           //处理进度百分比
       }
    });
    mAliDownloader.setOnErrorListener(new AliMediaDownloader.OnErrorListener() {
       @Override
       public void onError(ErrorInfo errorInfo) {
           //下载出错
       }
    });
    mAliDownloader.setOnCompletionListener(new AliMediaDownloader.OnCompletionListener() {
       @Override
       public void onCompletion() {
           //下载成功
       }
    });
  3. 准备下载源
    通过preapre方法准备下载源。下载源支持VidSts和VidAuth两种。以VidSts举例,示例如下:
    //创建VidSts
    VidSts aliyunVidSts = new VidSts();
    aliyunVidSts.setVid(视频vid);
    aliyunVidSts.setAccessKeyId(临时akId);
    aliyunVidSts.setAccessKeySecret(临时akSecret);
    aliyunVidSts.setSecurityToken(安全token);
    aliyunVidSts.setRegion(接入区域);
    //准备下载源
    mAliDownloader.prepare(aliyunVidSts)
  4. 准备成功后选择下载项
    准备成功后,会回调OnPreparedListener方法。选择某个Track进行下载,示例如下:
    public void onPrepared(MediaInfo mediaInfo) {
        //准备下载项成功
        List<TrackInfo> trackInfos = mediaInfo.getTrackInfos();
        //比如:下载第一个TrackInfo
        mAliDownloader.selectItem(trackInfos.get(0).getIndex());
    }
  5. 更新下载源并开始下载
    为了防止VidSts和VidAuth过期,建议更新下载源的信息后开始下载。示例如下:
    //更新下载源
    mAliDownloader.updateSource(mVidSts);
    //开始下载
    mAliDownloader.start();
  6. 下载成功或失败后,释放下载器
    下载成功后,调用release释放下载器。在onCompletion或者onError回调中。示例如下:
    mAliDownloader.stop();
    mAliDownloader.release();
  7. 删除下载的文件
    下载过程中,或者下载完成后,可以删除下载的文件。示例如下:
    //通过对象删除文件
    mAliDownloader.deleteFile();
    //通过静态方法删除
    AliDownloaderFactory.deleteFile("下载文件夹路径",vid, format,index);

加密直播播放功能

阿里云播放器支持加密直播的播放。播放器的创建与使用方式,具体操作请参见播放功能

  1. 设置播放源

    需传递AVPLiveStsSource作为播放源。示例如下:

    //创建LiveSts
     LiveSts liveSts = new LiveSts();
     liveSts.setUrl("加密直播url");
     liveSts.setAccessKeyId("临时akId");
     liveSts.setAccessKeySecret("临时akSecret");
     liveSts.setSecurityToken("安全token");
     liveSts.setDomain("url播流域名");
     liveSts.setApp("播流应用名");
     liveSts.setStream("播流流名");
     //设置播放源
     aliyunVodPlayer.setDataSource(liveSts);
     ......
     //准备播放
     aliyunVodPlayer.prepare();
  2. 监听STS是否无效
    加密直播播放过程中可能会有换加密Key的过程,换Key时则会通过STS去请求到最新的Key。开发者需要监听STS是否有效。如果无效则会影响加密直播流的播放。监听设置示例如下:
    mAliyunVodPlayer.setOnVerifyStsCallback(new IPlayer.OnVerifyStsCallback() {
        @Override
        public IPlayer.StsStatus onVerifySts(StsInfo info) {
            if(info 可以使用){
                return IPlayer.StsStatus.Valid;
            }
    
            if(可以获取有效的STS){
                获取STS();//异步同步均可。
                return IPlayer.StsStatus.Pending;
            }
            //如果info无效,且无法获取到最新的STS,那么建议停止播放。防止出现花屏。
            mAliyunVodPlayer.stop();
            return IPlayer.StsStatus.Invalid;
        }
    });
    获取STS成功之后,需要调用updateStsInfo方法去更新STS。如果获取失败,则建议停止播放。
    mAliyunVodPlayer.updateStsInfo(stsInfo);
    说明 如果不调用,超时之后播放器会继续使用之前的STS去获取Key。如果STS失效,则可能会出现花屏或者播放失败。