通过阅读本文,你可以了解Native RTS SDK所涉及的数据类型。
目录
数据类型 | 描述 |
---|---|
rts_worker_demux_info | 媒体信息。 |
rts_frame | 封装音频帧和视频帧的信息类型。 |
rts_glue_funcs | 函数指针。 |
pusher_delay | 推流延时信息。 |
player_delay | 拉流延时信息。 |
详情
- rts_worker_demux_info:媒体信息。
struct rts_worker_demux_info { int audio_flag; int audio_channels; int audio_sample_rate; int video_flag; int video_codec; int video_width; int video_height; int video_profile; int video_level; unsigned char spspps[10 * 1024]; int spspps_len; };
数据成员 描述 audio_flag 指示跟随其后的audio信息是否valid的标志。取值: - 1:valid。
- 0:invalid。
audio_channels 音频channel数。当audio_flag等于1的时候才有意义。 audio_sample_rate 音频采样率。当audio_flag等于1的时候才有意义。 video_flag 指示跟随其后的video信息是否valid的标志。取值: - 1:valid。
- 0:invalid。
video_codec 视频帧类型。当video_flag等于1(h264)的时候才有意义。 video_width 视频分辨率宽度。当video_flag等于1的时候才有意义。 video_height 视频分辨率高度。当video_flag等于1的时候才有意义。 video_profile 视频编码使用的profile。当video_flag等于1,且video_codec等于1的时候才有意义。 video_level 视频编码使用的level。当video_flag等于1,且video_codec等于1的时候才有意义。 spspps 存放sps和pps数据,可用于提前初始化解码器,可以为空。当video_flag等于1,且video_codec等于1的时候才有意义。 spspps_len spspps的长度(单位:字节)。当video_flag等于1,且video_codec等于1的时候才有意义。 - rts_frame:封装音频帧和视频帧的信息类型。
struct rts_frame { void *buf; // where frame data is stored int size; // size of frame data in bytes int is_audio; // 1 for audio frame, 0 for video frame unsigned long long pts; // presentation time stamp, in ms unsigned long long dts; // decoding time stamp, in ms int flag; // for video frame (is_audio == 0) // bit 0: key frame // bit 1: corruption // bit 2: sps // bit 3: sps change int duration; // in ms // use this function to free rts_frame object void (*free_ptr)(struct rts_frame *); unsigned int uid; // reserved. struct pusher_delay delay; // msid-value = msid-id [ SP msid-appdata ] char msid[NET_MSID_MAX_LENGTH + 1]; };
数据成员 描述 buf frame数据buffer。 size buf的字节数。 is_audio 是否是音频帧。取值: - 1:音频帧。
- 0:视频帧。
pts 演示时间戳。单位:毫秒。 dts 解码时间戳。单位:毫秒。 flag 当is_audio等于0时有效。取值: - 1:损坏标志。
- 0:关键帧标志。
duration 帧持续时间。单位:毫秒。 free_ptr 函数指针,用来释放当前的rts_frame对象,例如 frm->free_ptr(frm);
。uid 预留参数,标记数据属于哪个流。 delay 用于记录统计推流延时信息的数据类型。详情请参见pusher_delay。 - rts_glue_funcs:函数指针。
struct rts_glue_funcs { int api_version; int (* preconfig)(const char *key, const char *val); void (* open)(const char *url, const char mode); void (* close)(void handle); long long (* ioctl)(void *handle, const char *cmd, void arg); int (* read)(struct rtsframe **frame, void handle); int (* write)(struct rtsframe **frame, void *handle); };
数据成员 描述 api_version API版本号(必须是2)。 preconfig 全局参数配置函数。调用顺序:在open前调用,不要在open后调用。详情请参见preconfig。 open 打开一个流。详情请参见open。 close 关闭一个流。详情请参见close。 ioctl 参数配置、查询。详情请参见ioctl。 read 读取一帧数据。详情请参见read。 write 发送一帧数据。详情请参见write。 - pusher_delay:推流延时信息。
struct pusher_delay { long long cap_time_ms; //current utc time when capture the video frame long long enc_time_ms; //current utc time when the videoframe send to encoder };
说明对于RTS的RTMP推流,可以通过插入SEI信息,统计全链路延时信息。gdelay为全部延时的总和,并非当前时间,单位:毫秒。{ "gdelay":100 }
数据成员 描述 cap_time_ms 采集该图像的系统时间,使用UNIX时间表示,单位:毫秒。 enc_time_ms 采集图像送入编码器的系统时间,使用UNIX时间表示,单位:毫秒。 - player_delay:拉流延时信息。
struct player_delay { long long decoder_time_ms; //current utc time when the video frame send to decoder long long render_time_ms; //current utc time when the video frame send to render unsigned long long pts; //the video frame's pts };
数据成员 描述 decoder_time_ms 采集该图像的UTC时间,单位:毫秒。 render_time_ms 送入编码器的UTC时间,单位:毫秒。 pts 演示时间戳,单位:毫秒。