• 首页
  • 教育培训
    • 双师课堂
    • 直播网校
    • 大班课堂
    • 小班课堂
  • 互动直播
    • 财经直播
    • 网络互动直播
    • 企业培训
    • 年会直播
    • 移动直播
    • 营销直播
    • 网络研讨会
    • 网络市场活动
    • 企业级网络会议
  • 关于我们
    • 公司新闻
    • 关于我们
    • 荣誉资质
    • 联系我们
    • 人才招聘
  • 帮助与下载
    • 工具下载
    • app下载
    • 视频教程
    • FAQ
    • 开发者
    • 开发文档(新)
    • 功能说明
    • SDK下载
  • 销售热线:4006-010-263
  • 免费试用
English
  • 接口使用指引
  • Web接口开发指南
    • Webcast API接口
      • Webcast Json API
      • Webcast URL API
    • Training API接口
      • Training Json API
      • Training URL API
    • Web Flash SDK
      • 直播 SDK
      • 点播 SDK
    • Web H5 SDK
      • 桌面端点播SDK
      • 移动端点播SDK
      • 移动端直播SDK
      • 桌面端直播SDK
  • 实时系统回调接口
  • APP SDK开发指南
    • SDK 快速选择指南
    • Ios 接口开发
      • IOS-VOD SDK
      • IOS-RT SDK
      • IOS-Player SDK
      • IOS-Fast SDK
    • Android 接口开发
      • Android 接口FAQ
      • Android -VOD SDK
      • Android -RT SDK
      • Android-Player SDK
      • Android-Fast SDK
  • 微信小程序接口
    • 微信小程序 SDK
      • 微信小程序 点播SDK
      • 微信小程序 直播SDK

IOS-VOD SDK

1 概述

针对部分客户希望在使用我公司的点播服务的同时,能快速实现自己的app,特别是对于开发人员资源不足的公司,他们希望更快的集成点播模块到app中。为此,特提供iOS VodSDK,以便客户可以快速实现点播功能。

2 SDK 使用准备

2.1 温馨提示

欢迎客户公司开发人员随时和我们沟通,在相互理解的基础上,共同配合完成开发任务。但是为了提高开发效率,恳请客户公司开发人员在开发之前和开发过程中仔细阅读开发文档和查看Demo代码。如果发现文档中有难以理解或者文档中没有记载的问题,请随时找相关负责人沟通。

Demo中的代码用以示范SDK中的接口调用。不保证最符合客户的需求。请勿照抄Demo中的代码,请在理解SDK机制的基础上修改。如果发现任何疑似bug的现象,欢迎及时与相关负责人沟通。

如果在Demo中发现了bug或者发现了SDK的bug,在告知我公司开发人员时,请将系统版本,硬件版本,产生bug的操作流程一并告知我公司开发人员,必要时需要提供日志。

2.2 工程设置

1 请将工程中的AppDelegate.m改成AppDelegate.mm 或在other link flag里设置-lc++

2 支持系统ios8+

2.3 需要添加的库

系统库

OpenAL.framework

libz.dylib

libiconv.dylib

libsqlite3.dylib

GLKit.framework

点播库

VodSDK.framework

2.4 需要添加的其他资源

将com.gensee.VodSDK.docset 文件放到 ~/Library/Developer/Shared/Documentation/DocSets中,这样在开发的过程中就可以用Xcode自带的文档查看器来查看VodSDK详细的接口文档了。可以按快捷键调出文档查看器 shft+command+0。

3 SDK快速入门

考虑到很多用户在看文档时不知道从何开始,现在在这里写一个快速搭建点播的教程。首先我们实现一个将服务端的点播件(录制件)下载到本地的简易Demo

第一步:新建一个工程, 取名为VodSDKDemo

 

 

第二步: 按照文档中使用准备章节中所述,把所有的库和资源添加到工程, 并将AppDelegate.m 改为AppleDelegate.mm

 

 

第三步:创建点播下载管理器实例,添加将要下载的点播件(录制件)

在viewDidLoad 方法中创建VodDownLoader的实例,将它的代理(delegate)设置成该ViewController,用来接受相关操作后产生的回调(我们绝大部分接口都是采用异步+回调的模式)。并且用相应参数连接对应的直播。如图

 

 

这里在真正下载之前会保存一些点播件的参数到本地,所需要的参数为:

1.) domain即域名,不能为空;

2.) serType为服务类型,如果你的站点是webcast那么就要设置为webcast,如果是training,则设置为training。

3.) number即编号

4.) loginName 为登录用户名

5.) vodPassword 即观看密码

6.)loginPassword 为登录密码

7.)vodid 为点播件(录制件)ID

8.)downFlag  标志量表示当前添加的点播件是否需要下载

这些参数都可以在类似于下图这样的页面中找到

 

 

3.上图中有个代理方法onAddItemResult:voditem:,反馈添加结果的。正常情况下,会返回了RESULT_SUCCESS,就表明添加成功了,在添加成功后,就可以进行下载了,如果想监听下载的一些事件,请实现其他的代理,比如开始下载,暂停下载,下载进度,下载出错,下载完成等。

第四步:开始下载

在完成了第三步成功之后,就可以进行下载了,如果想监听下载的一些事件,请实现其他的代理,比如开始下载,暂停下载,下载进度,下载出错,下载完成等。

 

 

第五步:播放点播件(录制件)

播放有两种形式,一种是播放本地的点播件(录制件),即已经下载完成的,还有一种是直接在线播放。控制播放要用到VodPlayer这个类。还有一个类VodManage是管理本地点播件信息的也会用到。你可以在添加成功的回调里开始播放,也可以通过点播件ID在本地找到downItem,然后在播放。

 

4 代码示例

参见SDKDemo,SDKDemo只是示范SDK中接口的使用方式,并不保证使用方式最符合用户的需求,请用户在充分理解SDK机制的前提下,根据自己的情况处理数据。对照抄SDKDemo代码引起的性能问题和其他非SDK bug,不负任何责任。

5 SDK中的类

5.1 VodDownLoader

无论是在线播放点播,还是下载点播,都需要先调用addItem:方法校验权限,添加参数到本地,如果是离线播放,则先用VodManage的findDownItem方法在本地搜索是否已经添加过该点播的参数,如果找到了则直接使用downItem参数用于离线播放。下载的事件从VodDownLoadDelegate中返回。

5.1.1 初始化init

使用默认初始化方法[VodDownLoader alloc]init]

5.1.2 设置代理 @property(nonatomic,weak)id<VodDownLoadDelegate>  delegate;

只有正确设置代理后,下载的回调事件才会正确的从代理方法中返回。

5.1.3 是否采用https接口访问@property (nonatomic, assign) BOOL httpAPIEnabled;

默认为NO,走https接口。

因为Apple的要求,内置http请求全部需要换成https的,现在有两种方案可选:

1. 将此参数设置为YES,强制走http接口,但是在程序的info.plist中将我们的域名加入到白名单中。

2. 设置为NO,全部走https接口。

目前第一种方案更加稳定保险,建议选择方案一。

5.1.4 添加到下载- (void)addItem:(VodParam*)vodParam

这一步将会去服务器校验权限,获取点播的信息并存在本地,addItem的结果将从代理中返回

- (void) onAddItemResult:(RESULT_TYPE)resultType voditem:(downItem*)item;

这是下载和在线播放时需要走的第一步,只有返回成功才能继续下载或者在线观看。

如果是要离线播放,只需要用VodManage类找到本地已经下载完成的点播即可,不需要再调用此方法。

5.1.5 获取即将下载的点播的大小@property (nonatomic, assign) BOOL vodTimeFlag;

如果需要获取点播件的大小信息,需要将此属性设置为YES。

5.1.6 开始下载- (void)download:(downItem*)vodItem chatPost:(BOOL)chatPost

在addItem:成功后,可以正式下载点播,chatPost参数表示要将聊天数据按播放时间顺序推送,点播中的聊天可以使用接口一次性全部获取,也可以按播放时间轴按顺序推送。类似方法:- (void)start:(NSString*)downloadID chatPost:(BOOL)chatPost;

5.1.7 停止下载- (void)stop:(NSString*)downloadID;

不要在任何下载事件代理中调用此方法,此方法一般的用法是让用户点击暂停或者停止下载。

 

5.2 VodDownLoadDelegate

下载中产生的事件回调将从代理中返回,不要在任何回调中调用VodDownLoader的stop:方法

5.2.1 添加到下载- (void) onAddItemResult:(RESULT_TYPE)resultType voditem:(downItem*)item;

addItem:返回的结果,如果成功则继续调用下载,或者在线播放。失败则报错。

Result_TYPE:

RESULT_ROOM_NUMBER_UNEXIST

点播不存在

RESULT_SUCCESS

成功

RESULT_NOT_EXSITE

点播不存在

RESULT_FAIL_WEBCAST

点播不存在

RESULT_FAIL_TOKEN

观看口令错误

RESULT_FAIL_LOGIN

登录失败

RESULT_ISONLY_WEB

只支持web观看

RESULT_ROOM_UNEABLE

点播间不可用

RESULT_OWNER_ERROR

内部错误

RESULT_INVALID_ADDRESS

无效地址

RESULT_ROOM_OVERDUE

点播过期

RESULT_AUTHORIZATION_NOT_ENOUGH

授权不够

RESULT_INIT_DOWNLOAD_FAILED

现在初始化失败

RESULT_FAILED_NET_REQUIRED

网络错误

RESULT_UNSURPORT_MOBILE

不支持移动设备

5.2.2  下载开始回调- (void) onDLStart:(NSString*) downloadID

5.2.3 下载出错回调- (void) onDLError:(NSString*) downloadID Status:(VodDownLoadStatus) errorCode;

VodDownLoadStatus

ERROR_NET

网络错误

FALED_TO_WRITE

写文件失败,一般是手机空间不足

 

5.2.4 下载进度回调- (void) onDLPosition:(NSString*) downloadID percent:(float) percent;

Percent为百分比的纯数值,若返回18.0 ,则表示已经在了18%。

5.2.5 停止下载回调- (void) onDLStop:(NSString*) downloadID;

5.2.6 下载完成- (void) onDLStop:(NSString*) downloadID;

 

5.3 VodManage

管理本地点播项,可以通过接口获取本地各种下载状态的点播项,其中添加的点播是需要下载的还是只用于在线观看的,依据addItem:时的参数vodParam里的downFlag字段

5.3.1 初始化方法+ (id)shareManage;

5.3.2 根据ID找到本地的点播-(downItem*)findDownItem:(NSString*)downLoadId

5.3.3 获取已添加的点播列表- (NSArray *)getListDownItem;

5.3.4 获取未下载完的点播列表- (NSArray *)getListOfUnDownloadedItem;

5.3.5 获取所有需要下载的点播列表- (NSArray*)searchAllNeedDownloadItems;

5.3.6 获取需要下载且未下载完的点播- (NSArray*)searchNeedDownloadAndUnFinishedItems;

5.3.7 获取不需要下载,只用于在线观看的点播- (NSArray*)searchUnNeedDownloadItems;

5.3.8 获取下载完成的点播- (NSArray*)searchFinishedItems;

5.3.9 删除本地所有点播- (BOOL)deleteAllItem;

5.3.10 删除某个点播- (BOOL)deleteItem:(NSString*)DownloadId;

5.3.11 更新某个点播信息- (BOOL)updateItem:(downItem*)item;

5.3.12 更新所有点播信息- (BOOL)updateAllItemState:(DOWNSTATE)oldState  toState:(DOWNSTATE) newState;

 

5.4 VodPlayer

主要管理点播播放,在线播放和本地播放需要使用不同的方法,

1. 创建VodPlayer实例

2. 把需要播放的点播(downItem)设置给VodPlayer实例

3. 创建VodGLView和GSVodDocView实例,设置给VodPlayer,用于显示视频文档

4. 调用对应的播放方法进行播放

5. 获取点播的聊天和问答数据或者设置播放方法的postChat参数,使聊天按时间推送

5.4.1 初始化- (id)init

5.4.2 设置要播放的点播@property(nonatomic,strong)downItem *playItem;

5.4.3 设置播放事件代理@property(nonatomic,weak)id<VodPlayDelegate> delegate;

5.4.4 设置视频视图@property(nonatomic,strong)VodGLView *mVideoView;

5.4.5 设置文档视图@property(nonatomic,strong)GSVodDocView *docSwfView;

5.4.6 设置硬解编码@property (assign, nonatomic) BOOL hardwareAccelerate;

5.4.7 设置是否使用flv格式播放@property (assign, nonatomic) BOOL flvEnabled;

5.4.8 开始在线播放- (void)OnlinePlay:(BOOL)postChat audioOnly:(BOOL)audioOnly;

5.4.9 开始离线播放- (void)OfflinePlay:(BOOL)postChat;

5.4.10 加速播放- (void)SpeedPlay:(SpeedValue)value;

 

SpeedValue

SPEED_NORMAL

正常速度

SPEED_125

1.25倍速率

SPEED_150

1.5倍速率

SPEED_175

1.75倍速率

SPEED_2

2倍速率

SPEED_25

2.5倍速率

SPEED_3

3倍速率

SPEED_35

3.5倍速率

SPEED_4

4倍速率

 

5.4.11 暂停播放- (void)pause;

5.4.12 继续播放- (void)resume

5.4.13 停止播放- (void)stop

5.4.14 定位播放- (int)seekTo:(int)position

5.4.15 开关视频- (void)closeVideo:(BOOL)close;

关闭视频后不再产生视频相关的流量。

5.4.16 获取点播的聊天信息- (void)getChatListWithPageIndex:(int)pageIndex;

5.4.17 获取点播的问答信息- (void)getQaListWithPageIndex:(int)pageIndex;

5.4.18 主动发起重连- (void)reconnect;

在检测到3g/4g wifi切换时,主动调用此方法重连

5.4.19 处理和其他音频App交互- (void)resetAudioPlayer;

监听AudioSeesionInterrupt事件,在打断之前调用此方法,防止程序回来之后没有声音。

相关代码:

    [[NSNotificationCenter defaultCenter] addObserver:self

                                             selector:@selector(_onAudioSessionEvent:)

                                                 name:AVAudioSessionInterruptionNotification

                                               object:nil];

 

- (void)_onAudioSessionEvent:(NSNotification*)notification {

    //Check the type of notification, especially if you are sending multiple AVAudioSession events here

    if ([notification.name isEqualToString:AVAudioSessionInterruptionNotification]) {

        NSLog(@"Audio Interruption notification received!");

        //Check to see if it was a Begin interruption

        if ([[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] isEqualToNumber:[NSNumber numberWithInt:AVAudioSessionInterruptionTypeBegan]]) {

            NSLog (@"Audio Interruption began!");

        } else {

            NSLog (@"Audio Interruption ended!");

        }

    }

}

5.4.20 后台播放- (void)enableBackgroundMode;

首先需要在Xcode工程中设置允许app在后台播放,如果app在其他地方设置了AVAudioSession导致无法在后台播放

需要主动调用此方法把AVAudioSession设置回支持后台播放的模式。

 

5.5 VodPlayDelegate

5.5.1 初始化播放回调- (void) onInit:(int) result haveVideo:(BOOL)haveVideo duration:(int)duration docInfos:(NSArray*)docInfos

初始化VodPlayer代理在调用VodPlayer的OnlinePlay和OfflinePlay时返回。Duration:点播件(录制件)总长度,单位:毫秒。为了优化视频加载速度,不再等文档加载,所以此处的文档有可能还并未下载好,docInfos可能是空,随后会从onDocInfo:回调。

Result:

0

成功

0x0c

并发满

10015

已下载的点播文件不完整

 

5.5.2 文档信息回调- (void)onDocInfo:(NSArray*)docInfos;

如果文档信息在onInit方法中返回时空的,则会从这里返回文档信息。

5.5.3 - (void)onRecordInfo:(NSString*)storage duration:(NSString*)duration startTime:(NSString*)startTime;

点播信息回调,大小,时长,开始时间

5.5.4 播放进度回调- (void) onPosition:(int) position;

5.5.5 播放时当前文档信息回调- (void) onPage:(int) position width:(unsigned int)width height:(unsigned int)height;

如果app需要显示相关文档标题,需要用positton去匹配之前返回的docInfos中的信息

5.5.6 缓冲回调- (void) OnBuffer:(BOOL)bBeginBuffer;

bBeginBuffer代表缓冲开始和缓冲结束

5.5.7 定位播放回调- (void) onSeek:(int) position ;

调用VodPlayer 的seekTo方法会产生此回调

5.5.8 视频开始- (void) onVideoStart;

5.5.9 聊天按播放时序推送- (void) OnChat:(NSArray*)chatArray;

VodPlayer的OnlinePlay和OfflinePlay的chatPost参数设置为YES才会推送

5.5.10 获取聊天列表- (void) vodRecChatList:(NSArray*)chatList more:(BOOL)more  currentPageIndex:(int)pageIndex;

一次性获取所有聊天,如果more=YES,再调用一次获取聊天的接口可获取下一页的聊天

5.5.11 获取问答列表- (void) vodRecQaList:(NSArray*)qaList more:(BOOL)more currentPageIndex:(int)pageIndex;

列表数据 (answer:回答内容 ; answerowner:回答者 ; id:问题id ;qaanswertimestamp:问题回答时间 ;question : 问题内容  ,questionowner:提问者 questiontimestamp:提问时间)

如果more=YES,再调用一次获取聊天的接口可获取下一页的问答

5.5.12 聊天审核信息回调- (void) OnChatCensor:(NSArray*)censorArray;

根据返回的内容,屏蔽掉聊天中对应的数据。

播放结束回调- (void) onStop;

5.5.13 音频电频值- (void) onAudioLevel:(int) level;

 

5.6 VodParam

点播的参数

5.6.1 域名(必填)@property (nonatomic, copy) NSString *domain;

5.6.2 点播ID(必填)@property (nonatomic, copy) NSString *vodID;

5.6.3 点播编号(建议使用ID)@property (nonatomic, copy) NSString *number;

5.6.4 观看密码(必填)@property (nonatomic, copy) NSString *vodPassword;

5.6.5 昵称(必填)@property (nonatomic, copy) NSString *nickName;

5.6.6 登录用户名@property (nonatomic, copy) NSString *loginName;

登录站点用户名,若后台设置为不用登录 也可观看则不需要此参数

5.6.7 登录密码@property (nonatomic, copy) NSString *loginPassword;

登录站点密码,若后台设置为不用登录 也可观看则不需要此参数

5.6.8 是否使用老版本API@property (nonatomic, assign) BOOL oldVersion;

是否采用老的接口,默认为NO,一般情况下请不要设置为YES

5.6.9 第三方验证@property (nonatomic, copy) NSString *thirdToken;

第三方验证token,配合后台设置使用,若后台无设置,则不需要填写,若oldVersion为YES,则此参数不起作用

5.6.10 自定义userID@property (nonatomic, assign) long long  customUserID;

自定义用户ID,无特殊要求不需要设置,平台会自动分配,若要设置,请设置为大于十亿的数字

5.6.11 是否为Box用户@property (nonatomic, assign) BOOL isBox;

是否为Box客户,默认为NO, 一般客户不需要设置, Box客户为后台单独部署,不和我们的站点一起更新,Box客户的域名一般不是 “*.gensee.com”

5.6.12 是否需要下载(必填)@property (nonatomic, assign) int downFlag;

是否需要下载,1需要,0不需要

5.6.13 服务类型(必填)@property (nonatomic, copy) NSString *serviceType;

服务类型:webcast或者training

6 常见的问题

6.1 我该如何填写参数,使Demo正确运行?

请开发人员联系负责和我公司交接直播端(网页入口,启动的PC客户端)的同事,让他提供对应的参数信息。