测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布最后发布 | 2017 年 5 月 |
由 Kjartan Vestvik 维护。
依赖 | |
AFNetworking | ~> 3.0 |
SynqHttpLib | ~> 0.3 |
这是用于 iOS 的 SYNQ 移动 SDK。它允许您轻松地将您的移动应用程序与 SYNQ 平台和 SYNQ 视频API 集成。
要运行示例项目,首先克隆存储库,并从 Example 目录中运行 pod install
。示例项目具有利用 SDK 功能的应用程序,这展示了 SDK 的使用方式。
SynqObjC 可通过 CocoaPods 获取。如果您尚未安装 CocoaPods,可以使用以下命令进行安装
$ gem install cocoapods
要将 SynqObjC 集成到您的 Xcode 项目中,在您的 Podfile
中指定它
pod "SynqObjC"
然后运行以下命令进行安装
$ pod install
如果您收到一条关于
[!] 无法找到 <pod 名称> 的规范
的错误,请尝试运行pod repo update
,然后再次运行pod install
。这将修复它。
SDK 由两部分组成:SynqUploader - 用于将视频上传到 SYNQ,以及 SynqStreamer - 用于流式传输直播视频。
这部分包含从相簿库获取视频、导出和上传到 SYNQ 的类。SDK 使用 AFNetworking 3 与服务器通信。它使用配置了背景的 NSURLSession 来管理视频上传。这使得即使应用程序在前台或后台,上传也可以继续。
#import <SynqUploader/SynqUploader.h>
[[SynqUploader sharedInstance] setDelegate:self];
SQVideoUpload *video = [[SQVideoUpload alloc] initWithPHAsset:asset];
为此,您必须做两件事:
在示例项目中,SynqHttpLib pod和示例服务器(SYNQ-Nodejs-example-server)通过“createVideoAndGetParamsWithSuccess:”函数一步实现这两个功能。
[video setUploadParameters:parameters];
[[SynqUploader sharedInstance] uploadVideoArray:videoArray
exportProgressBlock:^(double exportProgress)
{
// Report progress to UI
[self.progressView setProgress:exportProgress];
}
uploadProgressBlock:^(double uploadProgress)
{
// uploadProgress is between 0.0 and 100.0
// Report progress to UI
[self.progressView setProgress:uploadProgress];
}];
每次上传的结果都通过SQVideoUploadDelegate方法进行报告。以下是可用的方法及其使用方法
- (void) videoUploadCompleteForVideo:(SQVideoUpload *)video;
视频成功上传。
- (void) videoUploadFailedForVideo:(SQVideoUpload *)video;
上传视频时出现错误。
- (void) allVideosUploadedSuccessfully;
所有视频均已成功上传。
包含在这个仓库中的示例项目包含播放您上传视频的功能。这包括一个表格视图,列出所有上传的视频。选择其中一个视频将打开一个新的视图控制器(AVPlayerViewController的实例),并配置视频播放器以播放所选视频。此示例使用HLS输出格式作为视频播放的源。视频播放的各个源可以在“output”字段下找到,见视频对象
"outputs": {
"hls": {
"url": "https://multicdn.synq.fm/projects/fb/ec/fbec62099ed94d7ba7692c7353d20435/derivatives/videos/0c/19/0c19b46991ae49be994cec9f3909329a/hls/0c19b46991ae49be994cec9f3909329a_hls.m3u8",
"state": "complete"
},
"mp4_360": {
"url": "https://multicdn.synq.fm/projects/fb/ec/fbec62099ed94d7ba7692c7353d20435/derivatives/videos/0c/19/0c19b46991ae49be994cec9f3909329a/mp4_360/0c19b46991ae49be994cec9f3909329a_mp4_360.mp4",
"state": "complete"
},
"mp4_720": {
"url": "https://multicdn.synq.fm/projects/fb/ec/fbec62099ed94d7ba7692c7353d20435/derivatives/videos/0c/19/0c19b46991ae49be994cec9f3909329a/mp4_720/0c19b46991ae49be994cec9f3909329a_mp4_720.mp4",
"state": "complete"
},
"mp4_1080": {
"url": "https://multicdn.synq.fm/projects/fb/ec/fbec62099ed94d7ba7692c7353d20435/derivatives/videos/0c/19/0c19b46991ae49be994cec9f3909329a/mp4_1080/0c19b46991ae49be994cec9f3909329a_mp4_1080.mp4",
"state": "complete"
},
"webm_720": {
"url": "https://multicdn.synq.fm/projects/fb/ec/fbec62099ed94d7ba7692c7353d20435/derivatives/videos/0c/19/0c19b46991ae49be994cec9f3909329a/webm_720/0c19b46991ae49be994cec9f3909329a_webm_720.webm",
"state": "complete"
}
}
请注意:“url”字段仅在状态为“完成”时存在,即视频文件的转码完成时。状态也可能为“提交”或“进行中”,这意味着转码尚未完成,因此没有输出url。
在获得所需输出格式的URL后,通过配置AVPlayerViewController的实例来呈现视频播放器视图
// Convert url string to URL
NSString *urlString; // the url string fetched from the video object JSON
NSURL *videoUrl = [NSURL URLWithString:urlString];
// Configure AVPlayerViewController with an AVPlayer
AVPlayerViewController *avPlayerViewController = [[AVPlayerViewController alloc] init];
avPlayerViewController.player = [[AVPlayer alloc] initWithURL:videoUrl];
// Present the player view controller
[self presentViewController:avPlayerViewController animated:YES completion:^{
[avPlayerViewController.player play];
}];
SDK的这个部分提供了一个包含核心流媒体功能的框架和包含编译好的storyboard以及完全配置的视图控制器的资源包,用于视频流。配置视频流和显示流媒体视图的功能通过SynqStreamer.h头文件公开。
创建一个SynqStreamer实例
SynqStreamer *streamer = [[SynqStreamer alloc] init];
这些是设置视频流器的步骤
- (void) setStreamUrl:(NSString *)streamUrl
- (AppNavigationController *) getStreamerViewWithNavigationController
获取流媒体视图presentViewController: animated: completion:
- (void) setStreamButtonEnabled:(BOOL)enabled
启用流按钮包含在这个仓库中的示例应用展示了您如何使用SynqHttpLib配合我们的NodeJS示例服务器创建视频对象并获取流URL。我们只需在SynqHttpLib中调用此函数即可
[client createVideoAndGetStreamParamsWithSuccess:^(NSDictionary *jsonResponse)
{
// Get stream URL from parameters
NSString *streamUrl = [jsonResponse objectForKey:@"stream_url"];
}
httpFailureBlock:^(NSURLSessionDataTask *task, NSError *error)
{
// An error occurred, handle error
}];
设置步骤2和5的参数
[streamer setStreamUrl:streamUrl];
[streamer setStreamButtonEnabled:YES];
步骤3和4:配置和呈现流媒体视图
AppNavigationController *navController = [streamer getStreamerViewWithNavigationController];
[self presentViewController:navController animated:YES completion:nil];
现在您可以在流媒体视图中按需开始和停止实时视频流。还有一个设置视图(按齿轮图标),您可以在其中配置视频参数,例如分辨率、采样率、音频通道数等。
SDK依赖于对SYNQ API的访问,以便创建视频对象并获取调用上传函数时所需的上传参数。SYNQ API旨在从服务器访问,这意味着您应该有自有服务器验证来自移动客户端的请求并调用SYNQ API进行HTTP调用。您需要从SYNQ管理员面板获取API密钥,并在调用SYNQ API时使用该密钥。为了帮助您开始,您可以使用我们的NodeJS示例服务器了解如何进行请求。这也让您可以尝试SDK的功能。
更多信息,请参阅文档中的项目和服务密钥部分。
此SDK需要iOS 9及以上版本。
Kjartan Vestvik,[email protected]
SynqObjC遵循MIT许可协议。有关更多信息,请参阅LICENSE文件。