Skip to content
shixuemei edited this page Nov 20, 2017 · 4 revisions

推流SDK使用指南

一、基本概念介绍

UnionMobileStreaming主要提供了在iOS设备上音视频从采集,处理,压缩,到推流和预览等各个环节的功能。

  • 采集: 对摄像头和麦克风的配置和操作,将视频和音频数据的提供给后续的环节;
  • 处理: 对音视频数据的处理,包括对图像的美颜处理,和音频的混音,美音等,为可选环节;
  • 压缩: 对音视频数据的压缩(编码);
  • 推流: 通过RTMP协议发送到媒体服务器;
  • 预览: 使用UnionGPUView将处理后的图像显示在UI上

以上每个环节都提供了独立的组件化的API,可由用户单独使用或者自由组合。

同时支持接入第三方音视频编码和发送模块,只需要按照相应开放接口实现即可。

还提供了将所有组件API拼装串联后的kit类API, 可以快速上手使用, 也可以参考kit类的源码, 依据自己的需要进行组装。

二、系统结构

一个完整的推流功能的系统框图如下:
Diagram

其中,UnionStreamKit类为提供的组装好的帮助类,内部实现了各个组件的创建和链接,但是仍然可以获取到内部的各个组件进行控制。 以下先列出各个类的简单说明,详细介绍请参考API引用手册。

  • 数据源
    • UnionAVFCapture: 封装了对摄像头的操作,能够将采集到的原始视频图像数据回调给用户
    • UnionAUAudioCapture: 提供纯音频采集的操作,能够将采集到的原始音或者经过混响处理后的数据回调给用户
    • UnionGPUPicInput: 起衔接作用,将BGRA/NV12/I420格式的图像数据上传到GPU中, 支持裁剪和缩放
  • 数据处理
    • GPUImageFilter: 为第三方库GPUImage提供的滤镜,可根据需要选择,多个滤镜可以串联使用
  • 数据混合叠加
    • UnionGPUPicMixer: 提供图像混合功能, 主要用于将不同的图层叠加成一幅图像, 可用于添加水印图片,文字等
    • UnionAudioMixer: 提供混音功能,主要用于将不同来源的音频混合成一路,通过回调将混合后的音频送出
    • UnionGPUPicOutput: 为适配GPUImage到推流的类,负责将GPU上的图像导出到内存中, 支持BGRA/NV12/I420等常见格式, 支持裁剪和缩放
  • 预览
    • UnionGPUView: 基于第三方库GPUImage实现的预览视图,可以接在滤镜后面, 将滤镜处理后的内容显示在试图上
  • 编码
  • 发送
    • UnionAdaptor: 音视频交织及网络自适应模块
    • UnionPublisher: 推流模块接口定义,实现该协议即可无缝接入推流SDK
  • UnionStreamKit: 作为简易接口,封装了以上各个组件的创建和连接工作,屏蔽了组合的细节,但是稍微牺牲了一些灵活性。

三、快速集成

3.1 系统要求

  • 最低支持iOS版本:iOS 8.0
  • 最低支持iPhone型号:iPhone 5
  • 支持CPU架构: armv7,armv7s,arm64(和i386,x86_64模拟器)
  • 含有i386和x86_64模拟器版本的库文件,推流功能无法在模拟器上工作

1.2 下载工程

本SDK 提供如下列出获取方式:

1.2.1 从github clone

目录结构如下所示:

  • demo : demo工程为UnionMobileStreaming ,演示本SDK的主要接口的使用
  • doc/docset : appleDoc风格的接口文档,安装后可在xcode中直接看到方法和属性的文档
  • doc/html : appleDoc风格的网页版接口文档,也可查看在线版
  • prebuilt : 预编译库的头文件和库文件
  • source : 顶层kit类的源代码
  • example : 第三方编码/发送功能集成实例
$ git clone [email protected]:ksvc/UnionMobileStreaming_iOS.git UnionMobileStreaming_iOS --depth 1

1.3 开始运行demo工程

demo 目录中已经有一个Podfile, 指定了本地开发版的pod
在demo目录下执行如下命令, 即可开始编译运行demo

$ cd demo
$ pod install
$ open UnionStreamDemo.xcworkspace

注意:

  1. 更新pod之后, 需要打开 xcwrokspace, 而不是xcodeproj