houzhongjian
2024-11-06 7412dd652c0ac48c5a17b5d9b61d5d2a0f686137
提交 | 用户 | 时间
149dd0 1 package com.iailab.netsdk.lib.structure;
H 2
3 import com.iailab.netsdk.lib.NetSDKLib;
4 import com.iailab.netsdk.lib.enumeration.EM_H264_PROFILE_RANK;
5 import com.iailab.netsdk.lib.enumeration.STREAM_RATE_TYPE;
6 import com.iailab.netsdk.lib.enumeration.TALK_CODING_TYPE;
7
7412dd 8 import static com.iailab.netsdk.lib.constant.SDKStructureFieldLenth.*;
149dd0 9
H 10 /**
11  * 码流配置对应能力
12  *
13  * @author 47040
14  * @since Created at 2021/5/25 21:10
15  */
16 public class NET_STREAM_CFG_CAPS extends NetSDKLib.SdkStructure {
17     /**
18      * 结构体大小
19      */
20     public int dwSize;
21     /**
22      * 支持的音频编码类型 枚举值数组 {@link TALK_CODING_TYPE}
23      * 有效长度由 {@link #nAudioCompressionTypeNum} 决定
24      */
25     public int[] nAudioCompressionTypes = new int[CFG_MAX_AUDIO_ENCODE_TYPE];
26     /**
27      * 音频压缩格式个数
28      * 代表 {@link #nAudioCompressionTypes} 的有效长度
29      */
30     public int nAudioCompressionTypeNum;
31     /**
32      * 视频编码模式掩码,详见 "编码模式"
33      */
34     public int dwEncodeModeMask;
35     /**
36      * 支持的视频分辨率
37      * {@link #abIndivResolution} 为 0 时生效
38      * 有效长度由 {@link #nResolutionTypeNum} 决定
39      */
40     public NetSDKLib.NET_RESOLUTION_INFO[] stuResolutionTypes = new NetSDKLib.NET_RESOLUTION_INFO[CFG_MAX_CAPTURE_SIZE_NUM];
41     /**
42      * 不同分辨率下帧率最大值
43      * {@link #nFPSMax} 不为 0 时使用
44      * 数组下标与 {@link #stuResolutionTypes} 匹配
45      * 有效长度由 {@link #nResolutionTypeNum} 决定
46      */
47     public int[] nResolutionFPSMax = new int[CFG_MAX_CAPTURE_SIZE_NUM];
48     /**
49      * 视频分辨率个数 决定了以下数组的有效长度
50      * {@link #stuResolutionTypes}
51      * {@link #nResolutionFPSMax}
52      */
53     public int nResolutionTypeNum;
54     /**
55      * 最大视频码流(kbps)
56      * 这里虽然是只限定了码流的上下界 但并不意味着配置的时候可以在界内随便填
57      * 必须从 {@link STREAM_RATE_TYPE} 选择区间内的码流值
58      */
59     public int nMaxBitRateOptions;
60     /**
61      * 最小视频码流(kbps)
62      * 这里虽然是只限定了码流的上下界 但并不意味着配置的时候可以在界内随便填
63      * 必须从 {@link STREAM_RATE_TYPE} 选择区间内的码流值
64      */
65     public int nMinBitRateOptions;
66     /**
67      * 支持的 H.264 Profile等级 枚举值数组 {@link EM_H264_PROFILE_RANK}
68      * 有效长度由 {@link #nH264ProfileRankNum} 决定
69      */
70     public byte[] bH264ProfileRank = new byte[EM_H264_PROFILE_RANK.NET_PROFILE_HIGH.getValue()];
71     /**
72      * 支持的 H.264 Profile 等级个数
73      * 决定了 {@link #bH264ProfileRank} 的有效长度
74      */
75     public int nH264ProfileRankNum;
76     /**
77      * 当分辨率为 cif 时最大 p 帧(Kbps)
78      */
79     public int nCifPFrameMaxSize;
80     /**
81      * 当分辨率为 cif 时最小 p 帧(Kbps)
82      */
83     public int nCifPFrameMinSize;
84     /**
85      * 视频帧率最大值
86      * 如果为 0 则以 {@link #nResolutionFPSMax} 为准
87      */
88     public int nFPSMax;
89     /**
90      * 支持的视频分辨率
91      * {@link #abIndivResolution} 为 1 时生效
92      * 本身是一个二维数组 出于 JNA 封装需要第二维单独封装成新结构体 {@link NET_RESOLUTION_INFO_ARRAY}
93      * 每个第二维数组的有效长度由 {@link #nIndivResolutionNums} 决定 其数组下标和本字段的下标精确匹配
94      */
95     public NET_RESOLUTION_INFO_ARRAY[] stuIndivResolutionTypes = new NET_RESOLUTION_INFO_ARRAY[CFG_MAX_COMPRESSION_TYPES_NUM];
96     /**
97      * 标志位 用以区别能力集是否包含所有编码格式
98      * 0 表示 {@link #stuResolutionTypes} {@link #nResolutionTypeNum} 有效
99      * 1 表示 {@link #stuIndivResolutionTypes} {@link #nIndivResolutionNums} 有效
100      */
101     public int abIndivResolution;
102     /**
103      * 不同编码模式分别支持的视频分辨率个数
104      * 代表 {@link #stuIndivResolutionTypes} 各个第二维数组的有效长度 其数组下标和本字段的下标精确匹配
105      */
106     public int[] nIndivResolutionNums = new int[CFG_MAX_COMPRESSION_TYPES_NUM];
107
108     public NET_STREAM_CFG_CAPS() {
109         dwSize = this.size();
110         for (int i = 0; i < stuResolutionTypes.length; i++) {
111             stuResolutionTypes[i] = new NetSDKLib.NET_RESOLUTION_INFO();
112         }
113         for (int i = 0; i < stuIndivResolutionTypes.length; i++) {
114             stuIndivResolutionTypes[i] = new NET_RESOLUTION_INFO_ARRAY();
115         }
116     }
117 }