package com.netsdk.lib.structure;
|
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.enumeration.EM_H264_PROFILE_RANK;
|
import com.netsdk.lib.enumeration.STREAM_RATE_TYPE;
|
import com.netsdk.lib.enumeration.TALK_CODING_TYPE;
|
|
import static com.netsdk.lib.constant.SDKStructureFieldLenth.*;
|
|
/**
|
* 码流配置对应能力
|
*
|
* @author 47040
|
* @since Created at 2021/5/25 21:10
|
*/
|
public class NET_STREAM_CFG_CAPS extends NetSDKLib.SdkStructure {
|
/**
|
* 结构体大小
|
*/
|
public int dwSize;
|
/**
|
* 支持的音频编码类型 枚举值数组 {@link TALK_CODING_TYPE}
|
* 有效长度由 {@link #nAudioCompressionTypeNum} 决定
|
*/
|
public int[] nAudioCompressionTypes = new int[CFG_MAX_AUDIO_ENCODE_TYPE];
|
/**
|
* 音频压缩格式个数
|
* 代表 {@link #nAudioCompressionTypes} 的有效长度
|
*/
|
public int nAudioCompressionTypeNum;
|
/**
|
* 视频编码模式掩码,详见 "编码模式"
|
*/
|
public int dwEncodeModeMask;
|
/**
|
* 支持的视频分辨率
|
* {@link #abIndivResolution} 为 0 时生效
|
* 有效长度由 {@link #nResolutionTypeNum} 决定
|
*/
|
public NetSDKLib.NET_RESOLUTION_INFO[] stuResolutionTypes = new NetSDKLib.NET_RESOLUTION_INFO[CFG_MAX_CAPTURE_SIZE_NUM];
|
/**
|
* 不同分辨率下帧率最大值
|
* {@link #nFPSMax} 不为 0 时使用
|
* 数组下标与 {@link #stuResolutionTypes} 匹配
|
* 有效长度由 {@link #nResolutionTypeNum} 决定
|
*/
|
public int[] nResolutionFPSMax = new int[CFG_MAX_CAPTURE_SIZE_NUM];
|
/**
|
* 视频分辨率个数 决定了以下数组的有效长度
|
* {@link #stuResolutionTypes}
|
* {@link #nResolutionFPSMax}
|
*/
|
public int nResolutionTypeNum;
|
/**
|
* 最大视频码流(kbps)
|
* 这里虽然是只限定了码流的上下界 但并不意味着配置的时候可以在界内随便填
|
* 必须从 {@link STREAM_RATE_TYPE} 选择区间内的码流值
|
*/
|
public int nMaxBitRateOptions;
|
/**
|
* 最小视频码流(kbps)
|
* 这里虽然是只限定了码流的上下界 但并不意味着配置的时候可以在界内随便填
|
* 必须从 {@link STREAM_RATE_TYPE} 选择区间内的码流值
|
*/
|
public int nMinBitRateOptions;
|
/**
|
* 支持的 H.264 Profile等级 枚举值数组 {@link EM_H264_PROFILE_RANK}
|
* 有效长度由 {@link #nH264ProfileRankNum} 决定
|
*/
|
public byte[] bH264ProfileRank = new byte[EM_H264_PROFILE_RANK.NET_PROFILE_HIGH.getValue()];
|
/**
|
* 支持的 H.264 Profile 等级个数
|
* 决定了 {@link #bH264ProfileRank} 的有效长度
|
*/
|
public int nH264ProfileRankNum;
|
/**
|
* 当分辨率为 cif 时最大 p 帧(Kbps)
|
*/
|
public int nCifPFrameMaxSize;
|
/**
|
* 当分辨率为 cif 时最小 p 帧(Kbps)
|
*/
|
public int nCifPFrameMinSize;
|
/**
|
* 视频帧率最大值
|
* 如果为 0 则以 {@link #nResolutionFPSMax} 为准
|
*/
|
public int nFPSMax;
|
/**
|
* 支持的视频分辨率
|
* {@link #abIndivResolution} 为 1 时生效
|
* 本身是一个二维数组 出于 JNA 封装需要第二维单独封装成新结构体 {@link NET_RESOLUTION_INFO_ARRAY}
|
* 每个第二维数组的有效长度由 {@link #nIndivResolutionNums} 决定 其数组下标和本字段的下标精确匹配
|
*/
|
public NET_RESOLUTION_INFO_ARRAY[] stuIndivResolutionTypes = new NET_RESOLUTION_INFO_ARRAY[CFG_MAX_COMPRESSION_TYPES_NUM];
|
/**
|
* 标志位 用以区别能力集是否包含所有编码格式
|
* 0 表示 {@link #stuResolutionTypes} {@link #nResolutionTypeNum} 有效
|
* 1 表示 {@link #stuIndivResolutionTypes} {@link #nIndivResolutionNums} 有效
|
*/
|
public int abIndivResolution;
|
/**
|
* 不同编码模式分别支持的视频分辨率个数
|
* 代表 {@link #stuIndivResolutionTypes} 各个第二维数组的有效长度 其数组下标和本字段的下标精确匹配
|
*/
|
public int[] nIndivResolutionNums = new int[CFG_MAX_COMPRESSION_TYPES_NUM];
|
|
public NET_STREAM_CFG_CAPS() {
|
dwSize = this.size();
|
for (int i = 0; i < stuResolutionTypes.length; i++) {
|
stuResolutionTypes[i] = new NetSDKLib.NET_RESOLUTION_INFO();
|
}
|
for (int i = 0; i < stuIndivResolutionTypes.length; i++) {
|
stuIndivResolutionTypes[i] = new NET_RESOLUTION_INFO_ARRAY();
|
}
|
}
|
}
|