Skip to content
bqlin edited this page Nov 17, 2017 · 4 revisions

Polyv iOS SDK集成指南

简介

polyv-ios-sdk 替开发者解决在iOS下开发保利威视视频应用的授权,播放,下载,上传等问题。

完整可运行 demo 可以在此处下载:https://github.com/easefun/polyv-ios-client-demo

swift 版本: https://github.com/easefun/polyv-ios-client-swift-demo

开发前准备

登录保利威视后台,【设置】->【API接口】,复制SDK加密串到 AppDelegate.m 相关代码中进行 PolyvSettings 初始化配置,才能正确使用 SDK 里面的播放、下载和上传自己账号下的视频。

安装

  1. 下载本项目 zip 包解压,将 libpolyvSDK 目录拖动到自己项目中;
  2. 选择项目->Build Phases->Link Binary With Libraries,点击下方+号,分别添加以下库:
  • MobileCoreServices.framework
  • SystemConfiguration.framework
  • CoreTelephony.framework
  • libresolv.tbd
  • libz.tbd
  • libsqlite3.0.tbd

iOS 9

iOS 9只允许访问 https 内容,需要特殊配置下。

右键点击项目的plist文件->Open As Source Code:

	<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSAllowsArbitraryLoads</key>
		<true/>
	</dict>

加入以上内容,允许app访问http内容。

PolyvSettings 初始化

账号信息及 SDK 的配置需保持一次调用,因此建议直接在 AppDelegate 的 - application:didFinishLaunchingWithOptions: 方法进行配置。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
	// 配置下载目录
	[PolyvSettings.sharedInstance setDownloadDir:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/plvideo/a"]];
	// 配置日志等级
	[PolyvSettings.sharedInstance setLogLevel:PLVLogLevelAll];
	// 开启 HttpDNS 功能
	[PolyvSettings.sharedInstance setHttpDNSEnable:YES];
	
	// 配置sdk加密串
	// NSString *appKey = @"你的SDK加密串";
	NSString *appKey = @"iPGXfu3KLEOeCW4KXzkWGl1UYgrJP7hRxUfsJGldI6DEWJpYfhaXvMA+32YIYqAOocWd051v5XUAU17LoVlgZCSEVNkx11g7CxYadcFPYPozslnQhFjkxzzjOt7lUPsWF/CO2xt5xZemQCBkkSKLGA==";
	// 使用默认加密秘钥和加密向量解密 SDK加密串
	NSArray *config = [PolyvUtil decryptUserConfig:[appKey dataUsingEncoding:NSUTF8StringEncoding]];
	[[PolyvSettings sharedInstance] initVideoSettings:[config objectAtIndex:1] Readtoken:[config objectAtIndex:2] Writetoken:[config objectAtIndex:3] UserId:[config objectAtIndex:0]];
	
	// 配置sdk加密串示例(使用网络接口)
	/*
	NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://demo.polyv.net/demo/appkey.php"]];
	NSArray*config =[PolyvUtil decryptUserConfig:data];
	if ([config count]!=4) {
		NSLog(@"加载token失败");
	}else{
		[[PolyvSettings sharedInstance] setDownloadDir:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/plvideo/a"]];
		[[PolyvSettings sharedInstance] initVideoSettings:[config objectAtIndex:1] Readtoken:[config objectAtIndex:2] Writetoken:[config objectAtIndex:3] UserId:[config objectAtIndex:0]];
	}
	 */
	
	return YES;
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
	//重载设置
	[[PolyvSettings sharedInstance]  reloadSettings];
}

注意:

  • initVideoSettings:Readtoken:Writetoken:UserId: 方法必须在所有配置完成后,最后调用。即配置下载目录、日志等级和开启 HttpDNS 功能都必须放在该方法调用之前。
  • 若修改了SDK加密串的加密秘钥加密向量,则必须调用+decryptUserConfig:key:iv:方法进行加密串的解密。

appKey 等变量直接写入代码中,供测试使用。实际使用中,建议从 app 服务器获取加密后的 token,app 解密后再做初始化操作。

以下演示如何从 web 服务器访问获取加密后的 key,并且解密初始化,其中 key 和 vi 需要服务器加密端和app协商一致。

NSString* urlstring = [NSString stringWithFormat:@"http://token.myapp.com/encrypted"];
NSURL* url = [NSURL URLWithString:urlstring];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0];
[request setHTTPMethod:@"GET"];

[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
	NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
	if ([data length] >0 && error == nil && [httpResponse statusCode] == 200)
	{
		Byte iv[] = { ... };
		NSString * key = @"";
		
		NSData*decryptedData = [PolyvUtil AES128DecryptedDataWithKey:@"" iv:iv data:data];
		NSDictionary * jsondata = [NSJSONSerialization
								   JSONObjectWithData:decryptedData
								   options:0
								   error:&error];
		NSString* userId = [jsondata objectForKey:@"userId"];
		NSString* readtoken = [jsondata objectForKey:@"readtoken"];
		NSString* writetoken = [jsondata objectForKey:@"writetoken"];
		NSString* secretkey = [jsondata objectForKey:@"secretkey"];
		[[PolyvSettings sharedInstance] setDownloadDir:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/plvideo/a"]];
		//执行初始化
		[[PolyvSettings sharedInstance] initVideoSettings:secretkey Readtoken:readtoken Writetoken:@writetoken UserId:userId];
		
	}
	else
	{
		NSLog(@"获取token失败");
	}
}

Polyv 提供的解决方案:

在 Polyv 后端系统设置拷贝“app sdk加密串”保存到自己网站上,设置访问权限,本例为 http://demo.polyv.net/demo/appkey.php

NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://demo.polyv.net/demo/appkey.php"]];
NSArray *config =[PolyvUtil decryptUserConfig:data];
if ([config count]!=4) {
	NSLog(@"加载token失败");
}else{
	[[PolyvSettings sharedInstance] setDownloadDir:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/plvideo/a"]];
	[[PolyvSettings sharedInstance] initVideoSettings:[config objectAtIndex:1] Readtoken:[config objectAtIndex:2] Writetoken:[config objectAtIndex:3] UserId:[config objectAtIndex:0]];
}

SDK使用

demo项目

sdk的大部分调用演示都在 https://github.com/easefun/polyv-ios-client-demo 里面包括了,可以下载demo项目参考。

SDK 视频播放器

播放器分两种:

  1. PLVMoviePlayerController播放器

  2. 自定义皮肤播放器

视频下载

视频下载器支持断点续传,后台下载,具体说明

视频上传

上传通过http上传,支持断点续传

视频上传参考

You can’t perform that action at this time.