-
Notifications
You must be signed in to change notification settings - Fork 6
librtmppub
xingkai509 edited this page Nov 22, 2017
·
3 revisions
SDK提供了通用推流模块的基类实现(Publisher),开发者可以通过扩展这些基类, 实现几个基础接口,即可将自己的推流模块接入到SDK中。
具体应用示例可参考 librtmppub.
- 开始推流
推流模块实现 int doStart(String url)
接口,
- 停止推流
推流模块实现 int doStop ()
接口,停止推流。
- 发送音视频数据
推流模块实现 int doFrameAvailable (AVPacketBase packet)
接口.
在该接口实现中,将收到的编码后的音视频数据封装为rtmp或其他协议。
- 状态类型定义
定义 | 功能 | 说明 |
---|---|---|
STATE_IDLE | 空闲态 | publisher创建完成后即进入该状态 |
STATE_STARTING | 启动推流 | 调用startStream即进入该状态 |
STATE_PUBLISHING | 正在推流 | 调用startStream返回成功后进入该状态 |
STATE_STOPPING | 推流结束 | 调用stopStream方法后进入该状态 |
- 错误码
- 如果视频的编码格式为H.264或H.265,需要先传递SPS/PPS(packet的flags中含有UNION_AV_FLAG_CODEC_CONFIG),否则后面的视频编码数据不会发送
- 视频数据需要标记当前帧是否为关键帧(packet的flags中含有UNION_AV_FLAG_KEY_FRAME),推流器内部不进行nal单元的解析
- 对于H.264/H.265编码的视频数据,可以传入带起始码的nal单元(只支持四位的起始码即:00 00 00 01),也可以传入带有长度的nal单元,推荐使用带有长度的nal单元
- 在发送音频数据前,推流器会根据audioEncCfg组装Audio Sequence Header,所以请务必填充好audioEncCfg,外部不必再传入Audio Sequence Header的数据进行发送
- 如果音频的编码格式为AAC,传入的数据请不要带有ADTS头,推流器内部不再解析AAC数据包
参考 UnionStreamer.java
中 initModules()
中的实现。
mAVAdapter.getSrcPin().connect(mRtmpPublisher.getAVSinkPin());