Skip to content

publisher

shixuemei edited this page Nov 20, 2017 · 4 revisions

推流接口说明

UnionPublisher模块中可任意添加私有的推流协议,您只需要实现UnionPublisher协议即可。

example下面支持的推流协议包括:

1. 参数设置

/**
 @abstract 设置视频格式
 @param videoFmt 视频格式
 @discussion 调用startStream方法前设置
 */
- (void) setVideoEncCfg:(UnionVideoEncCfg *) videoEncCfg;
  • 使用rtmp推流时,视频的RTMP Body前一个字节含有格式信息,请务必正确填充
  • 需要在调用startStream方法前设置
/**
 @abstract 设置音频格式
 @param audioFmt 音频格式
 @discussion 调用startStream方法前设置
 */
- (void) setAudioEncCfg:(UnionAudioEncCfg *) audioEncCfg;
  • 使用rtmp推流时,音频的RTMP Body前两个字节含有格式信息,请务必正确填充
  • 需要在调用startStream方法前设置
/**
 @abstract 设置metadata
 @param metadata 自定义的meta,视频宽高等内部会按照videoFmt和audioFmt信息来填充
 @discussion 调用startStream方法前设置
 */
- (void) setMetaData:(NSDictionary *)metadata;
  • 使用rtmp推流时,会将外部设置的metadata在onMetaData内容中发送
  • 需要在调用startStream方法前设置
  • 推流过程中设置videoEncCfg和audioEncCfg,publisher会重发一次metadata

2. 推流过程

/**
 @abstract 启动推流
 @param url 目标地址
 @return  成功返回0,失败返回负数
 */
- (int) startStream: (NSURL* __nonnull) url;
  • 如果推流的协议为rtmp,则会在该方法中完成rtmp handshake、connect、publisher以及发送Metadata的动作;
  • 该方法成功返回时,状态会转为UnionPublisherState_Started,否则转为UnionPublisherState_Error
/**
 @abstract 发送数据包
 @param packet 待发送数据
 @return  成功返回0,失败返回负数
 */
- (int) sendPacket:(UnionAVPacket *)packet;
  • 使用rtmp协议推流时的注意事项:
    • 如果视频的编码格式为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数据包
/**
 @abstract 停止推流
 */
- (void) stopStream;
  • UnionPublisherState_IdleUnionPublisherState_Stopped状态下调用该方法无效
  • UnionPublisherState_Started状态下调用该方法即会和服务器断开连接,结束推流并且状态转为UnionPublisherState_Stopped
  • UnionPublisherState_Error状态下调用该方法状态会转为UnionPublisherState_Stopped

3. 状态

定义 功能 说明
UnionPublisherState_Idle 空闲态 init完成后即进入该状态
UnionPublisherState_Started 启动推流 调用startStream返回成功后进入该状态
UnionPublisherState_Stopped 推流结束 调用stopStream方法后进入该状态
UnionPublisherState_Error 推流错误 调用startStream方法返回失败或者推流过程中出现错误即进入该状态
/**
 @abstract 当前推流状况
 @discussion 可以通过该属性获取推流会话的工作状态
 */
@property (nonatomic, readonly) UnionPublisherState publisherState;

/**
 @abstract 错误信息
 @discussion 当状态为UnionPublisherState_Error时可获取相应的错误信息
 */
@property (nonatomic, readonly) NSError* error;

具体的错误码详见:https://ksvc.github.io/UnionMobileStreaming_iOS/doc/html/Constants/UnionPublisherErrorCode.html

3.5 状态变化通知

FOUNDATION_EXPORT NSString *const UnionPublisherStateDidChangeNotification;