集成微短剧方案-iOS

本文介绍iOS端集成微短剧项目的操作步骤。

源码说明

源码下载

下载地址请参见AUI Kits微短剧场景(iOS端)

源码结构

├── iOS   // iOS平台根目录
│   ├── AUIShortEpisode.podspec           // pod描述文件
│   ├── Source                            // AUI源代码文件
│       ├── API                           // 不含UI的源码文件
│   ├── Resources                         // 资源文件
│   ├── Example                           // Demo代码
│   ├── README.md                         // Readme   
│   ├── AUIBaseKits                       // 基础UI组件   

环境要求

类别

要求

开发环境

Xcode 14.0 及以上版本,推荐使用最新正式版本。

系统版本

iOS 10.0及以上版本的真机。

CocoaPods

CocoaPods 1.9.3 及以上版本。

前提条件

您已获取音视频终端SDK的播放器的License授权和License Key。在选择SDK应用场景时选择音视频播放,获取的详细步骤请参见申请License

image

跑通Demo

  1. 下载Demo源码,进入Example目录。

  2. 打开Podfile文件,将播放器SDK的依赖版本更新为最新版本。版本号请参见iOS播放器SDK

  3. 进入Example目录,执行pod install --repo-update,自动安装所需的SDK依赖。

  4. 打开工程文件AUIShortEpisodeExample.xcworkspace,在Signing & Capabilities中修改Team和Bundle Identifier。

    1. Team是用户添加的开发者Apple ID。

    2. Bundle Identifier也就是包id。

    image

  5. 前提条件中获取的License文件放到Example/目录下,并修改文件名为license.crt。并打开Example/Info.plist,在字段AlivcLicenseKey的值中填写在前提条件中获取的LicenseKey。

  6. 在真机上编译并运行Demo。

集成源码

您可通过以下几个步骤快速集成AUIShortEpisode到您的APP中,让您的APP具备短剧功能。

  1. 导入AUIShortEpisode。

    从仓库下载源代码后,将iOS文件夹复制到您的APP代码目录下,并将其重命名为AUIShortEpisode。请确保这个目录与您的Podfile位于同一层级。此时,您可以安全地删除Example目录。

  2. 修改您项目工程的Podfile文件。按照您的具体需求,引入所需的SDK和UI组件:

    • AliPlayerSDK_iOS:阿里视频云播放器SDK,请使用最新版本,版本号请参见iOS播放器SDK

      如果已经同时使用了阿里视频云的其他SDK(例如短视频SDK、直播推流SDK),则可以替换为音视频终端SDK:AliVCSDK_UGC(播放器+短视频)、AliVCSDK_InteractiveLive(播放器+直播)、AliVCSDK_Standard(全量包),详情请参见iOS端

    • AUIFoundation:基础UI组件。

    • AUIShortEpisode:短剧场景UI组件源码。

    #需要iOS10.0及以上才能支持
    platform :ios, '10.0'
    
    target '您的App target' do
        # 根据自己的业务场景,集成合适SDK,支持:AliPlayerSDK_iOS、AliVCSDK_UGC、AliVCSDK_InteractiveLive、AliVCSDK_Standard等,请使用最新的版本,可以从官网进行查询
        pod 'AliPlayerSDK_iOS', '~> x.x.x'
      
        # 基础UI组件
        pod 'AUIFoundation', :path => "./AUIShortEpisode/AUIBaseKits/AUIFoundation/"
      
        # 短剧UI组件源码
        pod 'AUIShortEpisode/AUI', :path => "./AUIShortEpisode/"
        # 短剧依赖的SDK,需要与集成的SDK对应,支持:AliPlayerSDK_iOS、AliVCSDK_UGC、AliVCSDK_InteractiveLive、AliVCSDK_Standard等
        pod 'AUIShortEpisode/AliPlayerSDK_iOS', :path => "./AUIShortEpisode/"
    end
  3. 执行pod install --repo-update,完成源码集成。

功能开发

  1. 设置微短剧入口页面。

    在当前页面中打开短剧主界面AUIShortEpisodeViewController

    #import "AUIShortEpisodeViewController.h"
    
    AUIShortEpisodeViewController *vc = [[AUIShortEpisodeViewController alloc] init];
    [self.navigationController pushViewController:vc animated:YES];
  2. 加载剧集数据。

    本组件默认使用了内置的剧集数据进行演示,在您集成组件后需要修改此部分的逻辑,对接到您的服务端,通过服务端提供的接口来获取剧集数据。设置方法如下:

    1. 在源码中找到AUIShortEpisodeDataManager类,进入fetchData:completed:方法,修改为通过您的服务端接口获取剧集数据。

      //  AUIShortEpisodeData.m
      
      @implementation AUIShortEpisodeDataManager
      
      + (void)fetchData:(NSString *)eid completed:(void (^)(AUIShortEpisodeData *, NSError *))completed {
          // TODO: 请求服务端返回短剧数据,需要您的服务端提供接口,并在这里请求接口
          // TODO:接口成功返回的数据还需转换为AUIShortEpisodeData,最终通过completed参数回调给业务
          
      }
      
    2. 从服务端获取到的数据,需要根据数据协议转换为剧集模型。剧集模型字段说明如下:

      • 短剧剧集:AUIShortEpisodeData

        字段

        含义

        id

        短剧剧集唯一ID。

        title

        短剧剧集名称。

        list

        短剧剧集视频列表。

      • 单集视频:AUIVideoInfo

        字段

        含义

        videoId

        视频ID,是视频的唯一标识。

        url

        播放源URL。

        duration

        时长。

        coverUrl

        封面。

        author

        作者。

        title

        标题。

        videoPlayCount

        播放次数。

        isLiked

        是否被点赞。

        likeCount

        点赞数。

        commentCount

        评论数。

        shareCount

        分享数。

  3. 开发视频互动功能。

    源码中,点赞、评论、分享仅在视频上透出入口,点击后具体的操作需要由您自行实现,可以通过AUIShortEpisodeViewController类进行对接和设置。

    //  AUIShortEpisodeViewController.m
    
        cell.onLikeBtnClickBlock = ^(AUIShortEpisodePlayCell * _Nonnull cell, AVBaseButton *likeBtn) {
            likeBtn.selected = !likeBtn.selected;
            cell.videoInfo.isLiked = likeBtn.selected;
            cell.videoInfo.likeCount = likeBtn.selected ? (cell.videoInfo.likeCount + 1) : (cell.videoInfo.likeCount - 1);
            [cell refreshUI];
            // TODO: 发送点赞请求给服务端,需要自己实现
        };
        cell.onCommentBtnClickBlock = ^(AUIShortEpisodePlayCell * _Nonnull cell, AVBaseButton *commentBtn) {
            // TODO: 打开评论页面,需要自己实现
        };
        cell.onShareBtnClickBlock = ^(AUIShortEpisodePlayCell * _Nonnull cell, AVBaseButton *shareBtn) {
            // TODO: 打开分享页面,需要自己实现
        };
    

核心功能介绍

本组件功能通过阿里云播放器SDK的AliListPlayer实现。它利用本地缓存、智能预加载和智能预渲染等核心能力,显著降低了播放延迟并提高了播放稳定性,从而提升用户观看体验。

本地缓存

本地缓存可以提高微短剧视频播放的加载速度和稳定性,使用户在网络不稳定或者断网的情况下依然能够流畅观看视频,提升用户的观看体验。具体配置方法,请参见本地缓存

智能预加载

智能预加载可以提前加载视频数据,使视频播放更加流畅,减少加载等待时间,提升用户的观看体验。具体配置方法,请参见预加载

智能预渲染

智能预渲染可以减少视频播放的启动延迟,让用户更快地看到画面,提升视频播放的加载速度和观看体验。具体配置方法,请参见智能预渲染

HTTPDNS

HTTPDNS可以提供更快速和稳定的DNS解析服务,通过替换传统DNS解析,可以减少DNS解析时间,提高视频播放的加载速度和稳定性,从而提升用户的观看体验。更多信息,请参见HTTPDNS

视频加密

微短剧场景的视频通常为1~3分钟的MP4格式视频,音视频终端SDK和播放器SDK从6.8.0版本开始支持MP4私有加密播放能力,为微短剧场景的视频提供安全保障支撑。更多信息,请参见阿里云视频加密(私有加密)

经私有加密的MP4格式视频,需满足以下条件,才可正常播放:

  • 经私有加密的MP4视频传给播放器播放时,业务侧(App侧)需要为视频URL追加etavirp_nuyila=1,例如:原视频URL为https://example.aliyundoc.com/test.mp4,则需要传给播放器播放的视频URL为https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1

  • App的License对应的uid与产生私有加密MP4的uid是一致的。

如何校验私有加密视频是否正确,以私有加密的视频URL为例说明如下:

  • meta信息里面应带有AliyunPrivateKeyUri的tag。

  • ffplay不能直接播放。