Skip to content
maverick edited this page Aug 18, 2016 · 2 revisions

#4 快速开始

##4.1 开发环境配置

  • Xcode 开发工具。可通过 App Store 下载
  • 安装 CocoaPods。可通过官方网站了解 CocoaPods 的使用方法。

##4.2 导入 SDK

###4.2.1 使用 CocoaPods 导入

推荐使用 CocoaPods 的方式导入,步骤如下:

  • 在工作目录中创建名称为 Podfile 的文件
  • 在 Podfile 中添加如下一行
pod 'PLCameraStreamingKit'
  • 在终端中运行
$ pod install

$ pod update

到此,你已完成了 PLCameraStreamingKit 的依赖添加。

###4.2.2 手动导入

我们建议使用 CocoaPods 导入,如果由于特殊原因需要手动导入,可以按照如下步骤进行:

  • 将 Pod 目录下的文件加入到工程中;
  • https://github.com/qiniu/happy-dns-objc HappyDNS 目录下的所有文件加入到工程中;
  • https://github.com/pili-engineering/pili-librtmp Pod 目录下的所有文件加入到工程中
  • https://github.com/pili-engineering/PLStreamingKit Pod 目录下的所有文件加入到工程中
  • 在工程对应 TARGET 中,右侧 Tab 选择 "Build Phases",在 "Link Binary With Libraries" 中加入 UIKit、AVFoundation、CoreGraphics、CFNetwork、CoreMedia、AudioToolbox 这些 framework,并加入 libc++.tdb、libz.tdb 及 libresolv.tbd;
  • 在工程对应 TARGET 中,右侧 Tab 选择 "Build Settings",在 "Other Linker Flags" 中加入 "-ObjC" 选项;

##4.3 初始化推流逻辑

###4.3.1 添加引用并初始化 SDK 使用环境

AppDelegate.m 中添加引用

#import <PLCameraStreamingKit/PLCameraStreamingKit.h>

并在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中添加如下代码:

[PLStreamingEnv initEnv];

然后在 ViewController.m 中添加引用

#import <PLCameraStreamingKit/PLCameraStreamingKit.h>

###4.3.2 添加 session 属性

添加 session 属性在 ViewController.m

@property (nonatomic, strong) PLCameraStreamingSession *session;

###4.3.3 添加 App Transport Security Setting

  • 如图所示

##4.4 创建流对象

###4.4.1 创建 streamJson

// streamJSON 是从服务端拿回的
//
// 从服务端拿回的 streamJSON 结构如下:
//    @{@"id": @"stream_id",
//      @"title": @"stream_title",
//      @"hub": @"hub_id",
//      @"publishKey": @"publish_key",
//      @"publishSecurity": @"dynamic", // or static
//      @"disabled": @(NO),
//      @"profiles": @[@"480p", @"720p"],    // or empty Array []
//      @"hosts": @{
//            ...
//      }
NSDictionary *streamJSON = @{ // 这里按照之前从服务端 SDK 中创建好的 stream json 结构填写进去 };
PLStream *stream = [PLStream streamWithJSON:streamJSON];

###4.4.2 创建视频和音频的采集和编码配置对象

当前使用默认配置,之后可以深入研究按照自己的需求做更改

PLVideoCaptureConfiguration *videoCaptureConfiguration = [PLVideoCaptureConfiguration defaultConfiguration];
PLAudioCaptureConfiguration *audioCaptureConfiguration = [PLAudioCaptureConfiguration defaultConfiguration];
PLVideoStreamingConfiguration *videoStreamingConfiguration = [PLVideoStreamingConfiguration defaultConfiguration];
PLAudioStreamingConfiguration *audioStreamingConfiguration = [PLAudioStreamingConfiguration defaultConfiguration];

###4.4.3 创建推流 session 对象

self.session = [[PLCameraStreamingSession alloc] initWithVideoCaptureConfiguration:videoCaptureConfiguration audioCaptureConfiguration:audioCaptureConfiguration videoStreamingConfiguration:videoStreamingConfiguration audioStreamingConfiguration:audioStreamingConfiguration stream:stream videoOrientation:AVCaptureVideoOrientationPortrait];

##4.5 预览摄像头拍摄效果

将预览视图添加为当前视图的子视图

[self.view addSubview:self.session.previewView];

##4.6 添加推流操作

取一个最简单的场景,就是点击一个按钮,然后触发发起直播的操作。

###4.6.1 添加触发按钮

我们在 view 上添加一个按钮吧。 我们在 - (void)viewDidLoad 方法最后添加如下代码

UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
[button setTitle:@"start" forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, 100, 44);
button.center = CGPointMake(CGRectGetMidX([UIScreen mainScreen].bounds), CGRectGetHeight([UIScreen mainScreen].bounds) - 80);
[button addTarget:self action:@selector(actionButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];

###4.6.2 实现按钮动作

- (void)actionButtonPressed:(id)sender {
    [self.session startWithCompleted:^(BOOL success) {
        if (success) {
            NSLog(@"Streaming started.");
        } else {
            NSLog(@"Oops.");
        }
    }];
}

###4.6.3 完成首次推流操作

Done,没有额外的代码了,现在可以开始一次推流了。 如果运行后,点击按钮提示 Oops.,就要检查一下你之前创建 PLStream 对象时填写的 StreamJson 是否有漏填或者填错的内容。

##4.7 查看推流内容

###4.7.1 登录 pili.qiniu.com 查看内容

  • 登录 pili.qiniu.com
  • 登录 streamJson 中使用的 hub
  • 查看 stream 属性
  • 点击属性中的播放 URL 后的箭头,即可查看内容。

##4.8 DEMO下载