Skip to content

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方法后进入该状态
  • 错误码

具体的错误码详见: https://ksvc.github.io/UnionMobileStreaming_Android/docs/reference/org/opencdnunion/media/streamer/publisher/Publisher.html

需要注意的一些点

  • 如果视频的编码格式为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数据包

kit类集成

参考 UnionStreamer.javainitModules() 中的实现。

mAVAdapter.getSrcPin().connect(mRtmpPublisher.getAVSinkPin());

1. 集成指南

2. 基本功能

2.1 采集

2.2 视频处理

2.3 音频处理

3. 开放接口定义

Clone this wiki locally