-
Notifications
You must be signed in to change notification settings - Fork 6
publisher
shixuemei edited this page Nov 20, 2017
·
4 revisions
UnionPublisher模块中可任意添加私有的推流协议,您只需要实现UnionPublisher协议即可。
example下面支持的推流协议包括:
1.1 视频参数设置
/**
@abstract 设置视频格式
@param videoFmt 视频格式
@discussion 调用startStream方法前设置
*/
- (void) setVideoEncCfg:(UnionVideoEncCfg *) videoEncCfg;
- 使用rtmp推流时,视频的RTMP Body前一个字节含有格式信息,请务必正确填充
- 需要在调用startStream方法前设置
1.2 音频参数设置
/**
@abstract 设置音频格式
@param audioFmt 音频格式
@discussion 调用startStream方法前设置
*/
- (void) setAudioEncCfg:(UnionAudioEncCfg *) audioEncCfg;
- 使用rtmp推流时,音频的RTMP Body前两个字节含有格式信息,请务必正确填充
- 需要在调用startStream方法前设置
1.3 MetaData设置
/**
@abstract 设置metadata
@param metadata 自定义的meta,视频宽高等内部会按照videoFmt和audioFmt信息来填充
@discussion 调用startStream方法前设置
*/
- (void) setMetaData:(NSDictionary *)metadata;
- 使用rtmp推流时,会将外部设置的metadata在onMetaData内容中发送
- 需要在调用startStream方法前设置
- 推流过程中设置videoEncCfg和audioEncCfg,publisher会重发一次metadata
2.1 开始推流
/**
@abstract 启动推流
@param url 目标地址
@return 成功返回0,失败返回负数
*/
- (int) startStream: (NSURL* __nonnull) url;
- 如果推流的协议为rtmp,则会在该方法中完成rtmp handshake、connect、publisher以及发送Metadata的动作;
- 该方法成功返回时,状态会转为
UnionPublisherState_Started
,否则转为UnionPublisherState_Error
2.2 数据推送
/**
@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数据包
2.3 结束推流
/**
@abstract 停止推流
*/
- (void) stopStream;
- 在
UnionPublisherState_Idle
和UnionPublisherState_Stopped
状态下调用该方法无效 - 在
UnionPublisherState_Started
状态下调用该方法即会和服务器断开连接,结束推流并且状态转为UnionPublisherState_Stopped
- 在
UnionPublisherState_Error
状态下调用该方法状态会转为UnionPublisherState_Stopped
3.1 状态类型定义
定义 | 功能 | 说明 |
---|---|---|
UnionPublisherState_Idle | 空闲态 | init完成后即进入该状态 |
UnionPublisherState_Started | 启动推流 | 调用startStream返回成功后进入该状态 |
UnionPublisherState_Stopped | 推流结束 | 调用stopStream方法后进入该状态 |
UnionPublisherState_Error | 推流错误 | 调用startStream方法返回失败或者推流过程中出现错误即进入该状态 |
3.2 表明当前状态的属性
/**
@abstract 当前推流状况
@discussion 可以通过该属性获取推流会话的工作状态
*/
@property (nonatomic, readonly) UnionPublisherState publisherState;
3.4 错误原因
/**
@abstract 错误信息
@discussion 当状态为UnionPublisherState_Error时可获取相应的错误信息
*/
@property (nonatomic, readonly) NSError* error;
具体的错误码详见:https://ksvc.github.io/UnionMobileStreaming_iOS/doc/html/Constants/UnionPublisherErrorCode.html
FOUNDATION_EXPORT NSString *const UnionPublisherStateDidChangeNotification;