Skip to content
pengbin edited this page Dec 14, 2016 · 20 revisions

推流SDK使用指南

基本概念介绍

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

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

以上每个环节都提供了独立的组件化的API,可由用户单独使用或者自由组合
(压缩和推流目前作为核心功能,打包在KSYStreamerBase类中)

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

系统框图

一个完整的推流功能的系统框图如下:
![Diagram](http://g.gravizo.com/svg?digraph G { splines=line; rankdir = LR; subgraph videoPath { node [shape="box"]; vCapDev[label="vCapDev\n采集"]; logoPic[label="GPUImagePicture\n水印图片"]; streamer; node [shape="Mrecord"]; capToGpu;filter;vPreviewMixer;vStreamMixer;preview;gpuToStr; vCapDev -> capToGpu[label="采集视频"]; capToGpu -> filter; filter -> {vStreamMixer vPreviewMixer}; vPreviewMixer->preview; vStreamMixer -> gpuToStr; {rank=same;gpuToStr->streamer;} logoPic -> {vStreamMixer vPreviewMixer}; logoPic -> vPreviewMixer[label="本地图片"]; {rank=same;logoPic->filter[style=invis];} {rank=same;vPreviewMixer->vStreamMixer[style=invis];} } subgraph audioPath { node [shape="box"]; aCapDev[label="aCapDev\n采集"]; KSYBgmPlayer; node [shape="Mrecord"]; aMixer; aCapDev -> aMixer[label="采集音频"]; KSYBgmPlayer -> aMixer[label="背景音乐"]; aMixer->streamer[headport=s]; } node [shape="plaintext"]; pathLabel [label="视频通道\n\n音频通道"]; pathLabel -> streamer[style="dashed", arrowhead="none", headport=w ]; {rank=same;vCapDev->pathLabel->aCapDev->KSYBgmPlayer[style=invis]; } {rank=same;aMixer; vStreamMixer; } } )

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

  • 数据源
    • KSYGPUCamera: 封装了对摄像头的操作,能够将采集到的原始视频图像数据回调给用户
    • KSYAUAudioCapture: 提供纯音频采集的操作,能够将采集到的原始音或者经过混响处理后的数据回调给用户
    • KSYBgmPlayer: 提供了对背景音乐播放的操作,并将被播放的音频数据通过回调送出来
    • KSYMoviePlayer: 金山云的播放器, 可以播放本地的视频文件, 将声音和图像跟采集的进行混合
    • KSYGPUYUVInput: 起衔接作用,将YUV格式的图像数据上传到GPU中
    • GPUImagePicture: 读取本地图像,上传GPU的类
  • 数据处理
    • KSYGPUXXXFilter: 为一组接口类,提供不同的美颜处理效果
    • GPUImageFilter: 为第三方库GPUImage提供的滤镜,可根据需要选择,多个滤镜可以串联使用
  • 数据混合叠加
    • KSYGPUPicMixer: 提供图像混合功能, 主要用于将不同的图层叠加成一幅图像
    • KSYAudioMixer: 提供混音功能,主要用于将不同来源的音频混合成一路,通过回调将混合后的音频送出
    • KSYGPUPicOutput:为适配GPUImage到推流的类,负责将GPU上的图像送入KSYStreamerBase进行压缩和推流
  • KSYStreamerBase: 为基础推流类,封装了压缩和RTMP推流的功能,将送入的图像和音频压缩好之后
  • GPUImageView: 第三方库GPUImage提供的预览视图
  • KSYGPUStreamerKit: 作为简易接口,封装了以上各个组件的创建和连接工作,屏蔽了组合的细节,但是稍微牺牲了一些灵活性。

简易接口使用流程说明

KSYGPUStreamerKit 能够满足一般直播应用场景的需求,主要的使用过程如下:

  • 创建 KSYGPUStreamerKit的实例
  • 在ViewController 中注册消息通知, 响应采集, 推流, 背景音乐播放的状态变化, 并响应
  • 配置采集参数, 比如分辨率和帧率等
  • 开始采集和预览, kit类将预览的视图插入到输入view的最底层 (使用非全屏的view也是合法的)
  • 配置推流参数, 比如音视频的码率等
  • 开始推流 / 结束推流
  • 结束预览
  • 注销消息通知

在以上主干环节中, 推流的开始和结束需要被包括在采集的开始和结束内,就是说必须先开启采集,才能开启推流。 采集和推流的参数大部分需要在启动前设置完毕,少部分参数可以在推流过程中改变,详细情况请参阅采集和推流参数的说明。

1. 推流环节说明

2. 特色功能说明

2.1 采集

2.2 音频处理

2.3 视频处理

2.4 编码

2.5 推流

2.6 输入多样化

2.7 集成

3. 第三方功能

4. 技术专栏

5. 已知问题

8. FAQ

金山云计算

Clone this wiki locally