Skip to content

Latest commit

 

History

History
571 lines (490 loc) · 20.1 KB

公共数据结构.md

File metadata and controls

571 lines (490 loc) · 20.1 KB

目录


1. 功能介绍

SDK提供若干基础数据结构,供用户推送音视频流使用

2. 枚举说明

iv_cm_aenc_type_e

用于描述音频编码类型 枚举原型

typedef enum
{
    IV_CM_AENC_TYPE_PCM    = 0,
    IV_CM_AENC_TYPE_G711A  = 1,
    IV_CM_AENC_TYPE_G711U  = 2,
    IV_CM_AENC_TYPE_G726   = 3, // 暂不支持 
    IV_CM_AENC_TYPE_AAC    = 4,
    IV_CM_AENC_TYPE_AMR    = 5, // 暂不支持 
    IV_CM_AENC_TYPE_ADPCMA = 6, // 暂不支持 

    IV_CM_AENC_TYPE_BUTT
} iv_cm_aenc_type_e;

iv_cm_aac_type_e

用于描述AAC音频编码类型 枚举原型

typedef enum
{
    IV_CM_AAC_TYPE_NONE     = 0,
    IV_CM_AAC_TYPE_MAIN     = 1,
    IV_CM_AAC_TYPE_LC       = 2,
    IV_CM_AAC_TYPE_SSR      = 3,
    IV_CM_AAC_TYPE_LTP      = 4,
    IV_CM_AAC_TYPE_SBR      = 5,
    IV_CM_AAC_TYPE_SCALCBLE = 6,
    IV_CM_AAC_TYPE_TWINVQ   = 7,
    IV_CM_AAC_TYPE_CELP     = 8,
    IV_CM_AAC_TYPE_HVXC     = 9,

    IV_CM_AAC_TYPE_BUTT
} iv_cm_aac_type_e;

iv_cm_aenc_sample_rate_e

用于描述音频采样率,仅PCM格式使用,其他格式无效 枚举原型

typedef enum
{
    IV_CM_AENC_SAMPLE_RATE_8000  = 8000,  /* 8K samplerate*/
    IV_CM_AENC_SAMPLE_RATE_12000 = 12000, /* 12K samplerate*/
    IV_CM_AENC_SAMPLE_RATE_11025 = 11025, /* 11.025K samplerate*/
    IV_CM_AENC_SAMPLE_RATE_16000 = 16000, /* 16K samplerate*/
    IV_CM_AENC_SAMPLE_RATE_22050 = 22050, /* 22.050K samplerate*/
    IV_CM_AENC_SAMPLE_RATE_24000 = 24000, /* 24K samplerate*/
    IV_CM_AENC_SAMPLE_RATE_32000 = 32000, /* 32K samplerate*/
    IV_CM_AENC_SAMPLE_RATE_44100 = 44100, /* 44.1K samplerate*/
    IV_CM_AENC_SAMPLE_RATE_48000 = 48000, /* 48K samplerate*/
    IV_CM_AENC_SAMPLE_RATE_64000 = 64000, /* 64K samplerate*/
    IV_CM_AENC_SAMPLE_RATE_96000 = 96000, /* 96K samplerate*/

    IV_CM_AENC_SAMPLE_RATE_BUTT,
} iv_cm_aenc_sample_rate_e;

iv_cm_aenc_bit_width_e

用于描述音频位宽,仅PCM格式使用,其他格式无效 枚举原型

typedef enum
{
    IV_CM_AENC_BIT_WIDTH_8  = 0, /* 8bit width */
    IV_CM_AENC_BIT_WIDTH_16 = 1, /* 16bit width*/
    IV_CM_AENC_BIT_WIDTH_24 = 2, /* 24bit width*/

    IV_CM_AENC_BIT_WIDTH_BUTT,
} iv_cm_aenc_bit_width_e;

iv_cm_aenc_mode_e

用于描述音频声道数,仅G711a、G711u、PCM使用,其他格式无效 枚举原型

typedef enum
{
    IV_CM_AENC_MODE_MONO   = 0, /*mono*/
    IV_CM_AENC_MODE_STEREO = 1, /*stereo*/

    IV_CM_AENC_MODE_BUTT
} iv_cm_aenc_mode_e;

iv_cm_file_type_e

用于描述文件类型,用户可自行扩展 枚举原型

typedef enum
{
    IV_CM_FILE_TYPE_VIDEO = 0, /*video file*/
    IV_CM_FILE_TYPE_PIC   = 1  /*pircture file*/

    /*User expandable*/
} iv_cm_file_type_e;

iv_cm_stream_type_e

用于描述媒体流的类型 枚举原型

typedef enum
{
    IV_CM_STREAM_TYPE_AUDIO = 0,
    IV_CM_STREAM_TYPE_VIDEO = 1,

    IV_CM_STREAM_TYPE_BUTT
} iv_cm_stream_type_e;

iv_cm_venc_type_e

用于描述视频流的编码格式 枚举原型

typedef enum
{
    IV_CM_VENC_TYPE_H264 = 0, /*h264*/
    IV_CM_VENC_TYPE_H265 = 1, /*h265*/

    IV_CM_VENC_TYPE_BUTT
} iv_cm_venc_type_e;

iv_cm_frame_type_e

用于描述视频帧的类型,暂不支持B帧 枚举原型

typedef enum
{
    IV_CM_FRAME_TYPE_I = 0,
    IV_CM_FRAME_TYPE_P = 1,
    // IV_CM_FRAME_TYPE_B = 2, // not support yet

    IV_CM_FRAME_TYPE_BUTT
} iv_cm_frame_type_e;

iv_cm_wifi_enc_type_e

用于描述wifi加密类型 枚举原型

typedef enum
{
    IV_CM_WIFI_ENC_TYPE_OPEN = 0, /*open wifi*/
    IV_CM_WIFI_ENC_TYPE_WEP  = 1, /*wep wifi*/
    IV_CM_WIFI_ENC_TYPE_WPA  = 2, /*wpa wifi*/

    IV_CM_WIFI_ENC_TYPE_BUTT
} iv_cm_wifi_enc_type_e;

3. 数据结构说明

iv_cm_aenc_pack_s

音频帧数据包 结构原型

typedef struct iv_cm_aenc_pack_s {
    uint8_t *pu8Addr;
    uint32_t u32Len;
    uint64_t u64PTS;
    uint32_t u32Seq;
} iv_cm_aenc_pack_s;

参数说明

成员名称 描述 取值
pu8Addr 音频帧数据的地址 uint8_t *
u32Len 音频帧数据长度(字节) uint32_t
u64PTS 音频帧数据时间戳,采用相对时间,可从0或UTC时间等任意时间基准开始计时,单位毫秒 uint64_t
u32Seq 音频帧数据包序号,每包+1 uint32_t

iv_cm_aenc_stream_s

音频数据流,由1-8个音频帧数据包组成 结构原型

typedef struct iv_cm_aenc_stream_s {
    iv_cm_aenc_pack_s *pstAencPack[8];
    uint32_t u32PackCount;
} iv_cm_aenc_stream_s;

参数说明

成员名称 描述 取值
pstAencPack 音频帧数据包的指针数组 iv_cm_aenc_pack_s *
u32PackCount 音频帧数据包个数 uint32_t

iv_cm_venc_pack_s

视频帧数据包 结构原型

typedef struct iv_cm_venc_pack_s {
    uint8_t *pu8Addr;
    uint32_t u32Len;
    uint64_t u64PTS;
    iv_cm_frame_type_e eFrameType;
    uint32_t u32Seq;
} iv_cm_venc_pack_s;

参数说明

成员名称 描述 取值
pu8Addr 视频帧数据的地址 uint8_t *
u32Len 视频帧数据长度(字节) uint32_t
u64PTS 视频帧数据时间戳,采用相对时间,可从0或UTC时间等任意时间基准开始计时,单位毫秒 uint64_t
eFrameType 视频帧类型 iv_cm_frame_type_e
u32Seq 视频帧数据包序号,每包+1 uint32_t

iv_cm_venc_stream_s

视频数据流,由1-8个视频帧数据包组成 结构原型

typedef struct iv_cm_venc_stream_s {
    iv_cm_venc_pack_s *pstVencPack[8];
    uint32_t u32PackCount;
} iv_cm_venc_stream_s;

参数说明

成员名称 描述 取值
pstVencPack 视频帧数据包的指针数组 iv_cm_venc_pack_s *
u32PackCount 视频帧数据包个数 uint32_t

iv_cm_avenc_stream_s

音视频数据流,由一个音频流和一个视频流组成 结构原型

typedef struct iv_cm_avenc_stream_s {
    iv_cm_aenc_stream_s stAencStream;
    iv_cm_venc_stream_s stVencStream;
} iv_cm_avenc_stream_s;

参数说明

成员名称 描述 取值
stAencStream 音频流 iv_cm_aenc_stream_s
stVencStream 视频流 iv_cm_venc_stream_s

iv_cm_av_data_info_s

用于描述音视频格式 结构原型

typedef struct iv_cm_av_data_info_s {
    iv_cm_aenc_type_e eAudioType;
    iv_cm_aac_type_e u32AudioCodecOption;
    iv_cm_aenc_mode_e eAudioMode;
    iv_cm_aenc_bit_width_e eAudioBitWidth;
    iv_cm_aenc_sample_rate_e eAudioSampleRate;
    uint32_t u32SampleNumPerFrame;

    iv_cm_venc_type_e eVideoType;
    uint32_t u32VideoWidth;
    uint32_t u32VideoHeight;
    uint32_t u32Framerate;

    uint32_t u32Reserve[4];
} iv_cm_av_data_info_s;

参数说明

成员名称 描述 取值
eAudioType 音频编码类型 iv_cm_aenc_type_e
u32AudioCodecOption aac编码类型,仅AAC使用,其他格式无效 iv_cm_aac_type_e
eAudioMode 音频声道数,仅G711a、G711u、PCM使用,其他格式无效 iv_cm_aenc_mode_e
eAudioBitWidth 音频位宽,仅PCM使用,其他格式无效 iv_cm_aenc_bit_width_e
eAudioSampleRate 音频采样率,仅PCM使用,其他格式无效 iv_cm_aenc_sample_rate_e
u32SampleNumPerFrame 音频每帧采样点数,仅G711a、G711u、PCM使用,其他格式无效(采样点数需乘以声道数,例如单声道1024点;双声道共2048点,即每声道1024点) uint32_t
eVideoType 视频编码类型 iv_cm_venc_type_e
u32VideoWidth 视频宽度 uint32_t
u32VideoHeight 视频高度 uint32_t
u32Framerate 视频帧率,仅支持整数帧率 uint32_t
u32Reserve 保留 uint32_t

iv_cm_memory_s

内存管理 结构原型

typedef struct {
    uint8_t *buf;                            // buffer address
    size_t size;                             // buffer size
    void (*buf_free_fn)(uint8_t *, size_t);  // buffer free callback
} iv_cm_memory_s;

参数说明

成员名称 描述 取值
buf 内存地址 uint8_t *
size 内存大小 size_t
buf_free_fn 内存释放回调函数 void (*)(uint8_t *, size_t)

iv_cm_time_fragment_s

时间段 结构原型

typedef struct {
    uint32_t type;          // custom type value in request
    uint64_t begin_time_s;  // start timestamp in second of playback, unix timestampe
    uint64_t end_time_s;    // end timestamp in second of playback, unix timestampe
} iv_cm_time_fragment_s;

参数说明

成员名称 描述 取值
type 类型,由用户自定义,可用于查询特定类型的录像 请求参数的type值,若未指定则默认为0
begin_time_s 起始时间 单位秒,UNIX时间戳
end_time_s 结束时间 单位秒,UNIX时间戳

iv_cm_pb_list_s

回放的录像列表 结构原型

typedef struct {
    uint32_t count;                      // file count of the day
    iv_cm_time_fragment_s file_list[0];  // play back file array
} iv_cm_pb_list_s;

参数说明

成员名称 描述 取值
count 录像的数量 uint32_t
file_list 录像实际时间段 iv_cm_time_fragment_s

iv_cm_query_rd_by_month_s

按月查询录像结果 结构原型

typedef struct {
    uint32_t year;
    uint32_t month;
    uint32_t type;  // custom type value in request
    uint32_t day;   // Use each bit for one day. For example day=0010 0000 1000 0000=8320 means
                    // 8/14 day have playback data.
} iv_cm_query_rd_by_month_s;

参数说明

成员名称 描述 取值
year uint32_t
month 1到12
type 类型,由用户自定义,可用于查询特定类型的录像 请求参数的type值,若未指定则默认为0
day 有录像的天数,从低到高bit依次代表第几天 uint32_t

iv_cm_query_rd_by_day_s

按月查询录像结果 结构原型

typedef struct {
    iv_cm_time_fragment_s time_fragment;
    void (*free_fn)(void *ptr);  // memory free callback
    iv_cm_pb_list_s *rd_array;
} iv_cm_query_rd_by_day_s;

参数说明

成员名称 描述 取值
iv_cm_time_fragment_s 查询时间段 iv_cm_time_fragment_s
free_fn 查询结果释放函数 函数指针
rd_array 查询结果 iv_cm_pb_list_s *

iv_cm_file_info_s

文件信息 结构原型

typedef struct {
    iv_cm_file_type_e file_type;  // file type
    char file_name[MAX_FILE_NAME_LENGTH];          // file name
    uint32_t file_size;           // file size, unit Byte
    uint32_t begin_time_s;        // start timestamp in second of playback, unix timestampe
    uint32_t end_time_s;          // end timestamp in second of playback, unix timestampe
    iv_cm_memory_s extra_info;    // user define information, json format
} iv_cm_file_info_s;

参数说明

成员名称 描述 取值
file_type 文件类型 iv_cm_file_type_e
file_name 文件名称 字符串
file_size 文件大小 uint32_t
begin_time_s 文件起始时间 uint32_t
end_time_s 文件结束时间 uint32_t
extra_info 文件自定义信息,json格式 iv_cm_memory_s

iv_cm_file_list_s

文件列表 结构原型

typedef struct {
    uint32_t count;                  // file count
    iv_cm_file_info_s file_list[0];  // file list
} iv_cm_file_list_s;

参数说明

成员名称 描述 取值
count 文件数量 uint32_t
iv_cm_file_info_s 文件信息 iv_cm_file_info_s

iv_cm_query_file_list_s

文件列表查询参数 结构原型

typedef struct {
    iv_cm_time_fragment_s time_fragment;
    void (*free_fn)(void *ptr);  // memory free callback
    iv_cm_file_list_s *file_array;
} iv_cm_query_file_list_s;

参数说明

成员名称 描述 取值
count 文件数量 uint32_t
iv_cm_file_info_s 文件信息 iv_cm_file_info_s

iv_cm_download_param_s

文件下载请求参数 结构原型

typedef struct {
    char file_name[MAX_FILE_NAME_LENGTH];  // name of downloaded file
    int file_offset;     // offset of downloaded file
} iv_cm_download_param_s;

参数说明

成员名称 描述 取值
file_name 文件名 char[]
file_offset 文件偏移 int

iv_cm_pb_seek_s

回放时滑动位置 结构原型

typedef struct {
    uint64_t seek_time_ms;
} iv_cm_pb_seek_s;

参数说明

成员名称 描述 取值
seek_time_ms UNIX时间戳,单位毫秒 uint64_t

iv_cm_pb_ff_s

设置快进速度 结构原型

typedef struct {
    uint32_t speed;  
} iv_cm_pb_ff_s;

参数说明

成员名称 描述 取值
speed 0:正常播放 1:表示只发I帧, 2:表示I帧取2发一, 3:表示I帧取3发1 uint32_t

iv_cm_pb_speed_s

设置快放或者慢放 结构原型

typedef struct {
    uint32_t time_ms;
} iv_cm_pb_speed_s;

参数说明

成员名称 描述 取值
time_ms 表示pts的间隔,当大于正常pts是慢放,否则是快放 uint32_t

iv_cm_pb_rewind_s

设置倒放 结构原型

typedef struct {
    uint64_t begin_time_s;  // end timestamp of rewind
    uint64_t end_time_s;    // start timestamp of rewind
} iv_cm_pb_rewind_s;

参数说明

成员名称 描述 取值
begin_time_s 倒放的截止时间, UNIX时间戳 uint64_t
end_time_s 倒放的起始时间, UNIX时间戳 uint64_t

4. 注意事项

  1. 对于音视频数据的时间戳,请小心处理误差问题,否则可能因误差积累导致音视频不同步 对于视频帧,假设帧率为30fps,即每帧33.3333毫秒,取整为33毫秒 不补偿时间戳为 0,33,66,99,132,165,198 补偿后时间戳为 0,33,67,100,133,167,200 音频同理
  2. 音频和视频的时间戳必须同时从0或同时从UTC时间等相同时间基准开始计时,不得一个从0计时,另一个从UTC计时,否则会导致音频无法播放等问题
  3. 录像快进、倒放、快放和慢放状态时,音频需要特殊处理,可以不发送;