1.SDK集成
注意:为了更好的使用我们的产品,4.8.0版本以后,我们将SDK更改为framework类型,如升级遇到编译报错,打包上架报错等问题,请详见6.常见问题。
1.1 方法1:Cocoapods导入
执行 pod search 'CCVodSDK'
Podfile 文件中增加如下代码:
pod 'CCVodSDK'
执行pod install
即可。
如果没有安装cocoapods,请执行 sudo gem install cocoapods
命令,安装cocoapods。
如果搜索不到,请执行下述命令清除搜索列表缓存 rm ~/Library/Caches/CocoaPods/search_index.json
,之后再调用search命令搜索。
1.2 方法2:手动导入SDK
下载iOS_SDK_Demo,将项目中的SDK(或外级目录下的include文件夹导入项目),选择Copy items if needed
,Finish,导入即可。
SDK依赖的系统库如下
- Foundation.framework
- UIKit.framework
- OpenGLES.framework
- CoreMotion.framework
- CoreVideo.framework
- AVFoundation.framework
- Security.framework
- ImageIO.framework
- AudioToolbox.framework
- MobileCoreServices.framework
- CoreMedia.framework
项目 - TARGETS - Build Settings所有Other Linker Flags,添加-lxml2。
项目 - TARGETS - General - Frameworks.Libraries,and Embedded Content - 找到HDBaseUtils.framework、CCVodSDK.framework,将默认Do Not Embed修改为Embed & Sign。
如果使用了DWPlayerSkinView和VR相关的功能,需要添加CCVodSDK.framework中的DWResource.bundle,vrlibraw.bundle,否则资源文件不能正常显示。添加方法:选中工程名,在右键菜单中选择Add Files to “工程名”…,从CCVodSDK.framework文件中选择DWResource.bundle,vrlibraw.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。
2.SDK demo项目结构
名称 | 描述 |
---|---|
Demo | iOS_SDK_Demo源码 |
doc | iOS点播SDK开发指南及离线API |
include | SDK开放的头文件及静态库,同demo中的SDK文件夹 |
以下是iOS_SDK_Demo中,主要的目录结构及说明:
Demo
DWAppDelegate.h/m
DWConfigurationManager.h/m (Demo app的一些全局配置设置)
SDK (iOS点播SDK)
CCVodSDK.h (SDK头文件)
DWPlayInfo.h (负责获取音视频对象数据)
DWVodVideoModel.h (音视频model)
DWVodAdInfoModel.h (广告model)
DWPlayerView.h (继承自UIView,负责媒体播放,此类并不带播放相关UI,播放控制需自己实现)
DWPlayerSkinView.h (带播放控制的PlayerView)
DWDownloadSessionManager.h (下载管理中心,音视频下载功能通过此类来实现)
DWDownloadModel.h (下载model)
DWBatchDownloadUtility.h (批量下载功能,可以通过videos,批量来获取视频的下载链接)
DWUploader.h (视频上传器)
DWVideoCompressController.h (媒体选择页面,可以设置一些媒体压缩格式)
... (其他相关类,请详见demo)
Classes (Demo app 项目的主要类)
DWMainViewController.h/m (首页)
DWVodPlayViewController.h/m (在线视频播放页)
DWVodPlayerSkinViewController.h/m (视频播放页,SDK中自带皮肤的播放控制页面)
DWDownloadManagerViewController.h/m (下载管理页)
DWLocalPlayViewController.h/m (本地视频播放页面)
DWUploadViewController.h/m (上传管理页面)
DWUploadInfoSetupViewController.h/m (上传设置页面)
DWMemberViewController.h/m (app相关配置页面)
DWNetworkMonitorViewController.h/m (网络检测页面)
Base (demo app基类文件夹)
DWNavigationViewController.h/m
DWBaseViewController.h/m
Model(demo app Model文件夹)
DWVodModel (demo中,媒体对象model)
DWTableChooseModel
DWUploadModel
CustomDirectorFactory
View (demo app View文件夹,包含点播demo主要的功能。具体内部类比较繁多,这里就不一一列举了,详见demo)
Main
Player (视频播放相关的view)
VideoMark (视频打点)
Question (视频问答)
SubTitle (视频字幕)
Authorize (授权验证)
Gif(GIF录制)
Visitor(访客信息收集器)
Exercises(课堂练习)
Ad (广告)
Download (下载)
Upload (上传)
ProjectionScreen(视频投屏)
Barrage(视频弹幕)
Others (其余使用到的类)
... (额外的其他功能,这里就不一一列举了)
Plugins (工具类)
Tools (Demo中使用的一些通用方法)
OCBarrage (视频弹幕控件)
SDWebImage
MJExtension
Masonry
MBProgressHUD
Images (图片资源)
3.快速集成
注:快速集成主要提供的是视频播放、下载、上传功能等核心功能的使用方式。
3.1 视频播放功能
3.1.0 安全key枚举值说明
1、Vod SDK验证方式
typedef NS_ENUM(NSInteger,DWVodVerifyType) {
DWVodVerifyType_NONE, //未指定(使用旧接口,APIKey的验证方式)
DWVodVerifyType_APIKey, //APIKey验证(使用新接口,APIKey的验证方式)
DWVodVerifyType_Sid, //Sid 验证(使用新接口,Sid的验证方式)
};
2、获取key的函数由应用层实现(具体可参考demo实现)
1、类型:DWVodVerifyType_NONE
使用不带枚举参数接口,正常传参数使用接口即可;
2、类型:DWVodVerifyType_APIKey
使用带枚举参数接口,可直接在回调函数返回 APIKey;
3、类型:DWVodVerifyType_Sid
a、 使用带枚举参数接口,需要在回调函数返回 sid; b、 需要用户在工程项目层获取并维护sid; c、 sid使用可参考 DWVodVerifyType_Sid模式的使用说明
3、具体sid使用可参考demo如下函数实现
/**
* 获取验证的key,参数uid 为账号id
*/
+ (NSString *)getVerifyKey:(NSString *)uid;
3.1.1 在合适的位置设置AudioSession
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//设置全局AVAudioSession
NSError *categoryError = nil;
BOOL success = [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&categoryError];
if (!success)
{
NSLog(@"Error setting audio session category: %@", categoryError);
}
NSError *activeError = nil;
success = [[AVAudioSession sharedInstance] setActive:YES error:&activeError];
if (!success)
{
NSLog(@"Error setting audio session active: %@", activeError);
}
}
点击注册
3.1.2 通过获得场景账号UserID、Key、VideoId,来获取DWVodVideoModel对象。无获得场景账号? DWPlayInfo * playInfo = [[DWPlayInfo alloc]initWithUserId:userid andVideoId:videoId hlsSupport:@"1" verifyType:verifyType provider:^NSString * _Nullable(NSString * _Nonnull userid) {
//具体实现可参考demo
return [DWConfigurationManager getVerifyKey:userid];
}];
playInfo.timeoutSeconds = 30;
playInfo.mediatype = @"1";
playInfo.verificationCode = @"授权验证码,没有此功能不需要设置";
playInfo.roleId = @"客户端用户id,选填";
playInfo.finishBlock = ^(DWVodVideoModel *vodVideo) {
//成功回调
NSLog(@"%@",vodVideo);
};
playInfo.errorBlock = ^(NSError *error) {
//失败回调
};
[playInfo start];
3.1.3 创建DWPlayerView(默认播放器)/DWPlayerSkinView(带皮肤的播放器)对象添加到视图中,待获取到DWVodVideoModel对象后传入,即可播放在线视频
//创建默认播放器对象
self.playerView = [[DWPlayerView alloc]init];
[self addSubview:self.playerView];
//或者创建带皮肤的播放器对象
self.playerSkinView = [[DWPlayerSkinView alloc]initSkinView];
[self addSubview: self.playerSkinView];
//等待DWPlayInfo获取到DWVodVideoModel对象
playInfo.finishBlock = ^(DWVodVideoModel *vodVideo) {
//成功回调
//NSLog(@"%@",vodVideo);
[self.playerView playVodViedo:videoModel withCustomId:nil];
[self.playerView play];
//或者
//[self.playerSkinView playVodViedo:vodVideo];
};
...
3.2 下载功能
3.2.1 通过获得场景账号UserID、Key、VideoId,来获取DWVodVideoModel对象
//获取方式与视频获取方式一样,只不过hlsSupport参数要传@"0"
DWPlayInfo * playInfo = [[DWPlayInfo alloc]initWithUserId:userid andVideoId:videoId hlsSupport:@"0" verifyType:verifyType provider:^NSString * _Nullable(NSString * _Nonnull userid) {
//具体实现可参考demo
return [DWConfigurationManager getVerifyKey:userid];
}];
...
3.2.2 获取DWDownloadSessionManager单例对象,创建DWDownloadModel对象,通过调用startWithDownloadModel:方法即可开始下载
//等待DWPlayInfo获取到DWVodVideoModel对象
playInfo.finishBlock = ^(DWVodVideoModel *vodVideo) {
//成功回调
//得到需要下载的清晰度model,数据
//这里根据自身业务逻辑进行调整,这里下载的第一个视频
DWVideoQualityModel * qualityModel = [videoModel.qualities firstObject];
DWDownloadSessionManager * manager = [DWDownloadSessionManager manager];
//验证当前任务是否已经在下载队列中
if ([manager checkLocalResourceWithVideoId:videoModel.videoId WithQuality:qualityModel.quality]) {
return;
}
//没有此任务,创建DWDownloadModel对象,开始下载
DWDownloadModel * model = [DWDownloadSessionManager createDownloadModel:videoModel Quality:qualityModel.quality AndOthersInfo:nil];
if (!model) {
//DownloadModel创建失败,请检查参数
return;
}
[manager startWithDownloadModel:model];
};
3.3 上传功能
3.3.1 通过DWVideoCompressController,选择要上传的视频
DWVideoCompressController *imagePicker = [[DWVideoCompressController alloc] initWithQuality: DWUIImagePickerControllerQualityTypeMedium andSourceType:DWUIImagePickerControllerSourceTypePhotoLibrary andMediaType:DWUIImagePickerControllerMediaTypeMovie];
imagePicker.delegate = self;
[self presentViewController:imagePicker animated:NO completion:nil];
3.3.2 获取到本地视频路径,通过DWUploadSessionManager创建DWUploadModel,开始上传
//注意!获取到上传路径之后,请务必调用moveToLocalWithVideoPath:方法获取SDK所需的视频url,否则可能会出现上传失败,找不到视频文件等情况。
NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
//选中视频以后,请务必调用此方法,否则可能会出现上传失败,找不到视频文件等情况。
self.videoPath = [self.manager moveToLocalWithVideoPath:[videoURL path]];
//填写完视频信息以后,通过DWUploadSessionManager创建DWUploadModel。
DWUploadModel * uploadModel = [DWUploadSessionManager createUploadModelWithUserId:userId Apikey:apiKey VideoTitle:videoTitle VideoDescription:videoDescription VideoTag:videoTag VideoPath:self.videoPath CategoryId:nil NotifyURL:nil];
//DWUploadModel创建成功以后,调用startWithUploadModel:方法,即可开始上传视频
[self.manager startWithUploadModel:uploadModel];