-
Notifications
You must be signed in to change notification settings - Fork 6
Home
CDN联盟Android端推流SDK使用模块化的方式构建,可以灵活的接入各种自定义模块。
当前工程给出了自定义librtmp推流模块,fdk-aac音频编码模块,x264视频编码模块的集成示例。
运行前请执行:
./build.sh
- demo
-
目录包含SDK的使用示例,以及串联各个功能模块的kit类 UnionStreamer.java .
- prebuilt
-
目录包含SDK框架及基础功能的jar/so文件,是其他各个模块的基础。
- libunionstreamer
-
目录在执行./build.sh后, 会将prebuilt中的基础jar/so拷贝到自己的libs目录下,作为其他模块的依赖模块。
- fdkaacencoder
-
目录包含了自定义fdk-aac编码库的代码示例。
- x264encoder
-
目录包含了自定义x264编码库的代码示例。
- librtmppub
-
包含了自定义RTMP推流模块的代码示例。
- docs
-
目录下为libunionstreamer基础库的javadoc文档, 也可以直接通过 GitHub Pages 访问。
该部分主要用来说明SDK内部各个模块之间连接方式以及数据流的传送机制。
-
一个Module包含若干个Pin, Module之间的连接由Pin来实现
-
SrcPin 及 SinkPin 均是泛型类,创建时需要指定数据格式,相同数据格式的Pin才可以连接,例如:
-
SrcPin<ImgTexFrame> → SinkPin<ImgTexFrame>
-
SrcPin<ImgBufFrame> → SinkPin<ImgBufFrame>
-
SrcPin<AudioBufFrame> → SinkPin<AudioBufFrame>
-
SrcPin<ImgPacket> → SinkPin<ImgPacket>
-
SrcPin<AudioPacket> → SinkPin<AudioPacket>
-
-
一个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中可以获取新的一帧数据;
-