-
Notifications
You must be signed in to change notification settings - Fork 209
Home
KSY Streamer Android SDK是金山云推出的 Android 平台上使用的软件开发工具包(SDK), 提供了对音视频的采集、处理、预览、编码、推流的能力,并具有强大的可扩展性。
本文将简要介绍当前推流SDK各主要模块的功能,以及开放源码的推流聚合类KSYStreamer组织这些模块的方式, 以方便开发者加强对SDK内部结构的理解,进而可以根据自己的需求使用各个模块组建自己的推流聚合类。
SDK设计为采用分模块Pipeline化的结构,支持模块间自由连接以及运行时的动态重连接。
Note
|
该小节主要用来说明SDK内部各个模块之间连接方式以及数据流的传送机制,开发者如需要自定义推流kit类,或者开发自己的模块,需要特别关注该部分的说明。 |
-
一个Module包含若干个Pin, Module之间的连接由Pin来实现
-
Pin包含SrcPin和SinkPin, 分别产生和消耗数据流
-
SrcPin及SinkPin均是泛型类,创建时需要指定数据格式,相同数据格式的Pin才可以连接,例如:
-
SrcPin<ImgTexFrame> → SinkPin<ImgTexFrame>
-
SrcPin<ImgBufFrame> → SinkPin<ImgBufFrame>
-
SrcPin<AudioBufFrame> → SinkPin<AudioBufFrame>
-
-
一个SrcPin可以连接多个SinkPin, 一个SinkPin只能跟一个SrcPin连接;
-
所有连接或断开连接的操作均由SrcPin端操作;
-
调用SrcPin的connect接口连接两个模块
public void connect(SinkPin<T> sinkPin)
-
调用SrcPin的disconnect接口断开连接
// 断开所有已连接的SinkPin, recursive为true时表示需要递归断开后面所有已连接的模块 public void disconnect (boolean recursive) // 断开指定的某个已连接的SinkPin,recursive为true时表示需要递归断开后面所有已连接的模块 public void disconnect (SinkPin<T> sinkPin, boolean recursive)
SrcPin调用disconnect后,SinkPin端可以收到onDisconnect事件
// 源端已断开连接,recursive为true时需要release当前模块,并递归断开后面所有已连接的模块 public abstract void onDisconnect (boolean recursive)
-
处理onFormatChanged
该接口表示数据格式的改变,源端数据初始化完成及发生改变时均需要触发改事件, Sink端一般需要在该回调中进行一些初始化的工作。
-
包含SrcPin的模块需要在合适的时机触发onFormatChanged;
-
包含SinkPin的模块需要根据需要处理SrcPin触发的onFormatChanged事件;
-
-
处理onFrameAvailable
-
包含SrcPin的模块需要在新的一帧数据ready时触发onFrameAvailable;
-
包含SinkPin的模块在onFrameAvailable中可以获取新的一帧数据;
-
SDK内部主要实现了音视频的采集、处理、预览、编码和推流功能,下面将对应SDK中的类名进行说明。
- CameraCapture
-
摄像头采集模块,封装了对手机Camera的相关操作,将采集到的图像输出为针对GPU的ImgTexFrame,和针对cpu的ImgBufFrame。
- WaterMarkCapture
-
水印数据生成模块,生成logo图片以及时间戳的ImgTexFrame和ImgBufFrame数据。
- MediaPlayerCapture
-
播放采集模块(目前在画中画中实现),采集视频文件中的音视频数据,将视频内容输出为ImgTexFrame.
- PictureCapture
-
图片采集模块(目前在画中画中实现),将图片文件输出为ImgTexFrame.
- AudioCapture
-
麦克风采集模块,包含普通的AudioRecord采集,针对低延迟音频的OpenSLES采集,以及不占用mic,仅输出静音数据的Dummy采集方式。
- AudioPlayerCapture
-
背景音乐播放及采集模块。
如下仅列举了软编、硬编模式下基于GPU图像处理的相关模块,软编兼容模式因为应用场景较少,其基于CPU的图像处理模块封装在VideoEncoderMgt中,不再单独说明。
- ImgTexFilterMgt
-
美颜滤镜的管理类,封装了美颜模块的动态替换操作。
- ImgTexFilterBase
-
GPU Filter的基类,封装了SrcPin及SinkPin的相关操作,以及FBO的创建及复用逻辑。开发者如需自定义美颜滤镜,可以继承该基类来实现。
- ImgTexScaleFilter
-
该模块完成Camera所采集数据的crop、scale、rotate及颜色空间转换。
- ImgBeautyXXXFilter
-
各种内置美颜滤镜的实现类。
- ImgTexMixer
-
基于GPU实现的图像混合类。可以接受最多8路Texture输入,然后根据设定的渲染位置及大小, 在MainIndex的数据到来时按照index从低到高的顺序依次将输入Texture渲染到下一级的FBO上。 该类同时提供了scalingMode及mirror属性的设置。
- AudioFilterMgt
-
音频滤镜的管理类,封装了对音频滤镜的动态替换操作。
- AudioFilterBase
-
音频filter的基类,继承该类可以方便的自定义音频滤镜。
- (KSY)AudioXXXFilter
-
SDK内部实现的各种音频Filter.
- AudioMixer
-
混音处理类,可以支持最多8路音频的混合。
- VideoEncoderMgt, AudioEncoderMgt
-
音视频编码管理类,封装了软硬编切换的相关逻辑。同时软编兼容模式下的CPU Filter的相关处理也封装在VideoEncoderMgt中。
- AVCodecVideoEncoder
-
视频软编的实现,支持264及265编码。使用264编码时,支持编码档次及场景模式的设置,以达到编码质量和功耗的平衡。
- AVCodecAudioEncoder
-
音频软编的实现,支持AAC LC/HE/HEv2编码。
- MediaCodecSurfaceEncoder
-
视频硬编的实现,根据机型本身的能力,实现了对264和265编码的支持。
- MediaCodecAudioEncoder
-
音频硬编码的实现,支持AAC LC编码。