SynqObjC 0.4.0

SynqObjC 0.4.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2017 年 5 月

Kjartan Vestvik 维护。



 
依赖
AFNetworking~> 3.0
SynqHttpLib~> 0.3
 


SynqObjC 0.4.0

Build Status

这是用于 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 - 用于流式传输直播视频。

SynqUploader

这部分包含从相簿库获取视频、导出和上传到 SYNQ 的类。SDK 使用 AFNetworking 3 与服务器通信。它使用配置了背景的 NSURLSession 来管理视频上传。这使得即使应用程序在前台或后台,上传也可以继续。

导入 SynqUploader 头文件

#import <SynqUploader/SynqUploader.h>

设置 SQVideoUploadDelegate 以处理上传结果

[[SynqUploader sharedInstance] setDelegate:self];

为要上传的每个 PHAsset 创建一个 SQVideoUpload 对象

SQVideoUpload *video = [[SQVideoUpload alloc] initWithPHAsset:asset];

为 SQVideoUpload 对象设置上传参数

为此,您必须做两件事:

  1. 在 SYNQ API 中创建一个视频对象,
  2. 从 API 中获取创建的视频对象的上传参数。

在示例项目中,SynqHttpLib pod和示例服务器(SYNQ-Nodejs-example-server)通过“createVideoAndGetParamsWithSuccess:”函数一步实现这两个功能。

[video setUploadParameters:parameters];

将每个SQVideoUpload对象添加到NSArray中并调用上传函数

[[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

每次上传的结果都通过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];
}];

SynqStreamer

SDK的这个部分提供了一个包含核心流媒体功能的框架和包含编译好的storyboard以及完全配置的视图控制器的资源包,用于视频流。配置视频流和显示流媒体视图的功能通过SynqStreamer.h头文件公开。

创建一个SynqStreamer实例

SynqStreamer *streamer = [[SynqStreamer alloc] init];

这些是设置视频流器的步骤

  1. 在SYNQ API中创建一个配置为实时流的视频对象并获取返回的参数
  2. 在SynqStreamer函数中将流URL设置为- (void) setStreamUrl:(NSString *)streamUrl
  3. 通过调用SynqStreamer函数- (AppNavigationController *) getStreamerViewWithNavigationController获取流媒体视图
  4. 呈现流媒体视图(视图控制器嵌入在导航控制器中)。您可以使用函数presentViewController: animated: completion:
  5. 默认情况下禁用流(rec)按钮。当您从步骤1中的函数调用中获取流URL时,流准备开始,您可以通过调用SynqStreamer的- (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文件。