您可以集成基于阿里云播放器SDK封装的UI组件,快速开发出顺滑的短视频流体验业务场景。本文为您介绍沉浸式短视频的两种模式。

效果展示

标准模式

标准模式使用AliListPlayer的方式实现短视频列表播放,结合内置预加载和本地缓存机制可以达到更好的体验。

特点与适用场景

适用于多个点播短视频源连续切换,并且同一时刻只有一个视频播放的场景。标准模式主要特点如下:
  • 适用于简单的业务封装,可以满足大部分的列表播放场景。
  • 内置预加载机制(预加载时长固定为1秒),控制预加载个数(最多5个)。
  • 内部只有一个播放器实例。
说明 标准模式使用限制如下:
  • AliListPlayer全局唯一,不支持创建多个。
  • 不支持长视频源、直播场景。
  • 如果需要播放HLS格式的视频,需要开启本地缓存。
  • 支持STS和URL方式播放,不支持Auth方式播放。

安装包及Demo下载

播放器SDK安装包及Demo源码Demo源码说明
Android播放器SDK可参考Demo文件目录下的类:
  • AlivcAIODemo/PlayerDemo/AUIVideoList/AUIVideoStandradList:沉浸式播放(标准)功能封装Model。
  • AlivcAIODemo/PlayerDemo/AUIVideoList/AUIVideoListCommon:沉浸式播放公共Model。
iOS播放器SDK可参考Demo文件目录下的类:
  • AUIVideoListCommon/Managers/AUIVideoListDataManager:视频源文件数据处理。
  • AUIVideoListCommon/Models/AUIVideoCachePreloadTool:本地缓存管理类。
  • AUIVideoStandradList/Views/AUIVideoStandradScrollView:自定义滑动播放控件。
  • AUIVideoStandradList/AUIVideoStandradListView:列表播放UI页面。

Android接口调用说明

  1. 在播放页面布局的xml文件中引入沉浸式播放View控件。
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <com.alivc.player.videolist.auivideostandradlist.AUIVideoStandardListView
            android:id="@+id/aui_video_list_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </FrameLayout>
  2. 在跳转播放View页面之前,调用如下示例代码添加数据源。
    AUIVideoStandardListView mVideoStandardListView = findViewById(R.id.aui_video_list_view);
    //清理并重新加载数据
    mVideoStandardListView.loadSources(List<VideoInfo> list);
    //追加数据源
    mVideoStandardListView.addSources(List<VideoInfo> list);
  3. (可选)在跳转播放View页面之后,调用如下示例代码进行播放相关配置。
    //单视频循环播放
    mVideoStandardListView.openLoopPlay(boolean enable);
    //视频播放完成后是否自动播放下一个视频(需要关闭循环播放)
    mVideoStandardListView.autoPlayNext(boolean enable);
    //是否显示进度条
    mVideoStandardListView.showPlayProgressBar(boolean enable);
    //是否显示播放标题展示文案
    mVideoStandardListView.showPlayTitleContent(boolean enable);
    //是否开启屏幕上点击切换播放状态暂停/继续
    mVideoStandardListView.showPlayStatusTapChange(boolean enable);
说明 您也可以按需进行如下配置:
  • 设置预加载个数。
    AliListPlayer在起播前可通过设置preloadCount值(默认值是2)修改预加载个数。具体计算实际的预加载数的规则是:1 + preloadCount * 2。示例代码如下:
    // 设置预加载个数。设置2时代表实际的预加载数为5条。
    mVideoStandardListView.setPreloadCount(int count);
  • 开启本地缓存。
    在播放起播前可以开启本地缓存功能。示例代码如下:
    /*
        enable -- 是否开启本地缓存
        path -- 本地缓存路径
    */
    mVideoStandardListView.enableLocalCache(boolean enable,String path);

iOS接口调用说明

  1. 引入播放View控件。
    #pragma mark -- AUIVideoStandradListView.h
    
    AUIVideoStandradListView *mVideoStandardListView = [[AUIVideoStandradListView alloc] init];
    [self.navigationController pushViewController:mVideoStandardListView animated:YES];
  2. 在跳转播放View页面之前,调用如下示例代码添加数据源方法。
    #pragma mark -- AUIVideoStandradListView.h
    
    // 添加数据源
    // sources是数组,装载AUIVideoInfo类型的数据,具体类型可参考AUIVideoListCommon/Models/AUIVideoInfo.h文件
    NSArray<AUIVideoInfo *> *sources = xxxx;
    [mVideoStandardListView loadSources:sources];
  3. (可选)在跳转播放View页面之前,调用如下示例代码进行播放相关配置。
    #pragma mark -- AUIVideoStandradListView.h
    
    // 是否开启页面上的播放进度条,默认开启
    [mVideoStandardListView showPlayProgressBar:YES];
    // 是否开启页面上的播放标题展示文案,默认开启
    [mVideoStandardListView showPlayTitleContent:YES];
    // 是否开启屏幕上点击切换播放状态暂停/继续,默认开启
    [mVideoStandardListView showPlayStatusTapChange:YES];
    // 是否开启自动单个视频循环播放, 默认开启。需要在开启画面前调用。
    [mVideoStandardListView openLoopPlay:YES];
    // 是否开启自动切换到下一个播放。需要在openLoopPlay:关闭的基础上开启或关闭。默认关闭。需要在开启画面前调用。
    [mVideoStandardListView autoPlayNext:YES];
  4. (可选)在跳转播放View页面之后,调用如下示例代码进行播放相关配置。
    #pragma mark -- AUIVideoStandradScrollView.m
    
    // 追加数据源
    // sources是数组,装载AUIVideoInfo类型的数据,具体类型可参考AUIVideoListCommon/Models/AUIVideoInfo.h文件
    NSArray<AUIVideoInfo *> *sources = xxxx;
    [mVideoStandardListView addSources:sources];
说明 您也可以按需进行如下配置:
  • 设置预加载个数。
    AliListPlayer在起播前可通过设置preloadCount值(默认值是2)修改预加载个数。具体计算实际的预加载数的规则是:1 + preloadCount * 2。示例代码如下:
    // 设置预加载个数。设置2时代表实际的预加载数为5条。
    self.listPlayer.preloadCount = 2;
  • 开启本地缓存。
    在播放起播前可以开启本地缓存功能。示例代码如下:
    #pragma mark -- AUIVideoListCommon/Models/AUIVideoCachePreloadTool.h
    
    [AUIVideoCachePreloadTool setLocalCacheConfig];
    
    #pragma mark -- AUIVideoStandradScrollView.m
    // 建议在AliListPlayer起播前配置开启单实例缓存功能,防止HLS流因不开启单实例缓存无法播放问题
    AVPConfig *config = [self.listPlayer getConfig];
    config.enableLocalCache = true;
    [self.listPlayer setConfig:config];

性能模式(推荐)

性能模式使用多个播放器实例(AliPlayer)+ 预加载(MediaLoader)+ 预渲染的方式实现短视频列表播放,结合本地缓存可以达到更好体验。相比标准模式,性能模式支持播放器所有功能,更为灵活,功能更为强大。

特点与适用场景

适用于多个点播、直播视频源连续切换,并且同一时刻只有一个或多个视频播放的场景,以及点播+直播连续切换的场景。性能模式的主要特点如下:
  • 支持多个AliPlayer实例,弱网播放切换时更加顺滑。
  • 不限制播放方式和格式。
  • 支持预加载自定义策略,支持预渲染。
说明 完整的实现逻辑及代码请参见Demo,下文仅对关键节点作出说明详解。

安装包及Demo下载

播放器SDK安装包及Demo源码Demo源码说明
Android播放器SDK可参考Demo文件目录下的类:
  • AlivcAIODemo/PlayerDemo/AUIVideoList/AUIVideoFunctionList :沉浸式播放(性能)功能封装Model。
  • AlivcAIODemo/PlayerDemo/AUIVideoList/AUIVideoListCommon:沉浸式播放公共 Model。
iOS播放器SDK可参考Demo文件目录下的类:
  • AUIVideoListCommon/Managers/AUIVideoListDataManager:视频源文件数据处理。
  • AUIVideoListCommon/Models/AUIVideoCachePreloadTool:本地缓存和预加载(MediaLoader)管理类。
  • AUIVideoFunctionList/View/AUIVideoFunctionPlayCell:自定义播放列表cell。
  • AUIVideoStandradList/AUIVideoStandradListView:列表播放UI页面。

Android接口调用说明

  1. 在播放界面布局的xml文件中引入沉浸式播放的View控件。
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <com.alivc.player.videolist.auivideofunctionlist.AUIVideoFunctionListView
            android:id="@+id/aui_video_list_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </FrameLayout>
  2. 在跳转播放View页面之前,调用如下示例代码添加数据源。
    AUIVideoFunctionListView mVideoFunctionListView = findViewById(R.id.aui_video_list_view);
    //清理并重新加载数据
    mVideoFunctionListView.loadSources(List<VideoInfo> list);
    //追加数据源
    mVideoFunctionListView.addSources(List<VideoInfo> list);
  3. (可选)在跳转播放View页面之后,调用如下示例代码进行播放相关配置。
    //单视频循环播放
    mVideoFunctionListView.openLoopPlay(boolean enable);
    //视频播放完成后是否自动播放下一个视频(需要关闭循环播放)
    mVideoFunctionListView.autoPlayNext(boolean enable);
    //是否显示进度条
    mVideoFunctionListView.showPlayProgressBar(boolean enable);
    //是否显示播放标题展示文案
    mVideoFunctionListView.showPlayTitleContent(boolean enable);
    //是否开启屏幕上点击切换播放状态暂停/继续
    mVideoFunctionListView.showPlayStatusTapChange(boolean enable);
说明 您也可以按需进行如下配置:
  • 性能模式组件已经实现本地缓存,您可以自定义修改缓存路径等代码。
  • 性能模式组件提供了基于AliMediaLoader实现的预加载功能,示例代码请参考Demo中的AliPlayerPreload。

iOS接口调用说明

  1. 引入播放View控件。
    #pragma mark -- AUIVideoFunctionListView.h
    
    AUIVideoFunctionListView *mVideoFunctionListView = [[AUIVideoFunctionListView alloc] init];
    [self.navigationController pushViewController:mVideoFunctionListView animated:YES];
  2. 在跳转播放View页面之前,调用如下示例代码添加数据源方法。
    #pragma mark -- AUIVideoFunctionListView.h
    
    // 添加数据源
    // sources是数组,装载AUIVideoInfo类型的数据,具体类型可参考AUIVideoListCommon/Models/AUIVideoInfo.h文件
    NSArray<AUIVideoInfo *> *sources = xxxx;
    [mVideoFunctionListView loadSources:sources];
  3. (可选)在跳转播放View页面之前,调用如下示例代码播放相关配置。
    #pragma mark -- AUIVideoFunctionListView.h
    
    // 是否开启页面上的播放进度条,默认开启
    [mVideoFunctionListView showPlayProgressBar:YES];
    // 是否开启页面上的播放标题展示文案,默认开启
    [mVideoFunctionListView showPlayTitleContent:YES];
    // 是否开启屏幕上点击切换播放状态暂停/继续,默认开启
    [mVideoFunctionListView showPlayStatusTapChange:YES];
    // 是否开启自动单个视频循环播放, 默认开启。需要在开启画面前调用。
    [mVideoFunctionListView openLoopPlay:YES];
    // 是否开启自动切换到下一个播放。需要在openLoopPlay:关闭的基础上开启或关闭。默认关闭。需要在开启画面前调用。
    [mVideoFunctionListView autoPlayNext:YES];
  4. (可选)在跳转播放View页面之后,调用如下示例代码进行播放相关配置。
    #pragma mark -- AUIVideoFunctionListView.h
    
    // 追加数据源
    // sources是数组,装载AUIVideoInfo类型的数据,具体类型可参考AUIVideoListCommon/Models/AUIVideoInfo.h文件
    NSArray<AUIVideoInfo *> *sources = xxxx;
    [mVideoFunctionListView addSources:sources];
说明 您也可以按需进行如下配置:
  • 性能模式组件已经实现本地缓存,您可以自定义修改缓存路径等代码。
  • 配置视频预加载。

    性能模式组件提供了基于AliMediaLoader实现的预加载功能,示例Demo请参考AUIVideoCachePreloadTool类。AUIVideoFunctionListView中默认开启预加载。