#ifndef PARAMSTRUCT_H #define PARAMSTRUCT_H #include #include #include "Application.h" #include "util/xpack/json.h" namespace Util { namespace Structs { struct Channel_stream { std::string sn; int enable = 0; std::string name; std::string appname; std::string streamid; int bitrate = 8192; std::string bitrate_ctl; std::string codec; int encoded_size_mode = 0; std::string encoded_size; int fps = 30; int gopmode = 0; int goptxt = 30; int video_flip_mirror_enable = 0; int video_clipping_enable = 0; int video_clipping_left = 0; int video_clipping_right = 0; int video_clipping_width = 100; int video_clipping_height = 100; int video_rotate = 0; std::string pkey; std::string rtmp_url; std::string rtsp_url; std::string flv_url; std::string hls_url; std::string webrtc_url; std::string ts_url; std::string srt_url; std::string h5_url; int multicast_enable = 1; std::string multicast_ip_port; int push_enable = 1; std::string push_url; int push_connected = 0; Channel_stream() = default; XPACK(O(enable, sn, name, appname, streamid, bitrate, bitrate_ctl, codec, encoded_size_mode, encoded_size, fps, gopmode, goptxt, video_flip_mirror_enable, video_clipping_enable, video_clipping_left, video_clipping_right, video_clipping_width, video_clipping_height, video_rotate, pkey, rtmp_url, rtsp_url, flv_url, hls_url, webrtc_url, ts_url, srt_url, multicast_enable, multicast_ip_port, push_enable, push_url), C(c_push_connected, F(0), push_connected)) template bool c_push_connected_decode(Decoder& de, Channel_stream& t, const char* name, int& data, const xpack::Extend* ext) { (void)t; bool ret = false; try { std::string raw; ret = de.decode(name, raw, ext); if (ret) { sscanf(raw.c_str(), "%i", &data); } } catch (const std::exception& e) { // TODO:如果原则本身就是整数,会转换失败,怎么办??? ret = de.decode(name, data, ext); } return ret; } template bool c_push_connected_encode(Encoder& en, const Channel_stream& t, const char* name, const int& data, const xpack::Extend* ext) { (void)t; bool ret = en.encode(name, data, ext); return ret; } }; struct Channel_input_type_mix_layer { int chn_id = 0; int stream_id = 0; int audio_status = 0; float pos_x = 0.0f; float pos_y = 0.0f; float pos_w = 0.3333f; float pos_h = 0.3333f; int z_index = 0; Channel_input_type_mix_layer() = default; XPACK(O(chn_id, stream_id, audio_status, pos_x, pos_y, pos_w, pos_h, z_index)) }; struct Channel_input_type_mix { std::string layout_id; std::vector layers; Channel_input_type_mix() = default; XPACK(O(layout_id, layers)) }; struct Channel_input_type_ndi { std::string ndirecv_name; Channel_input_type_ndi() = default; XPACK(O(ndirecv_name)) }; struct Channel_input_type_net { int stream_mode = 0; int min_delay = 500; std::string path; int rtp_type = 0; std::string appname; std::string streamid; std::string push_remote_ip; std::string pull_path; int proxy_status; int ipc_onvif = 0; std::string ipc_ip; int ipc_port = 8000; int ipc_web_port = 80; std::string ipc_username = "admin"; std::string ipc_password; std::string ipc_ptz_xaddr; std::string ipc_ptz_profile_token; Channel_input_type_net() = default; XPACK(O(stream_mode, min_delay, path, rtp_type, pull_path, proxy_status, appname, streamid, push_remote_ip, ipc_onvif, ipc_ip, ipc_port, ipc_web_port, ipc_username, ipc_password, ipc_ptz_xaddr, ipc_ptz_profile_token)) }; struct Channel_input_type_usb { std::string alsa; int channel = -1; std::string lnk; Channel_input_type_usb() = default; XPACK(O(alsa, channel, lnk)) }; struct Channel_audio_set { std::vector audio_src = {0}; int audio_channel = 0; int digital_volume_gain = 0; int pts_offset = 0; int encoder_bitrate = 128; int encoder_methods = 0; int sampling_rate = -1; int collected_audio_frame = 0; Channel_audio_set() = default; XPACK(O(audio_src, audio_channel, digital_volume_gain, pts_offset, encoder_bitrate, encoder_methods, sampling_rate, collected_audio_frame)) }; struct Channel_input_type_digimage_point { float x = 0; float y = 0; Channel_input_type_digimage_point() = default; XPACK(O(x, y)) }; struct Channel_input_type_digimage { int auto_update = 0; int tolerance = 0; int src_fg_channel = 0; std::string src_bg_type; std::string src_bg_image; int src_bg_channel = 0; std::vector point; Channel_input_type_digimage() = default; XPACK(O(auto_update, tolerance, src_fg_channel, src_bg_type, src_bg_image, src_bg_channel, point)) }; struct Channel_input_type_carousel_file { std::string filename; int video_len = 0; Channel_input_type_carousel_file() = default; XPACK(O(filename, video_len)) }; struct Channel_input_type_carousel { int decodeA = 0; int decodeV = 0; int playing_file_index = -1; long playing_file_position = 0; std::vector files; Channel_input_type_carousel() = default; XPACK(O(decodeA, decodeV, files), C(c_playing_file_index, F(0), playing_file_index)) template bool c_playing_file_index_decode(Decoder& de, Channel_input_type_carousel& t, const char* name, int& data, const xpack::Extend* ext) { (void)t; bool ret = false; try { std::string raw; ret = de.decode(name, raw, ext); if (ret) { sscanf(raw.c_str(), "%i", &data); } } catch (const std::exception& e) { // TODO:如果原则本身就是整数,会转换失败,怎么办??? ret = de.decode(name, data, ext); } return ret; } template bool c_playing_file_index_encode(Encoder& en, const Channel_input_type_carousel& t, const char* name, const int& data, const xpack::Extend* ext) { (void)t; bool ret = en.encode(name, data, ext); return ret; } }; struct Channel_channel { int enable = 0; std::string name = "HDMI"; std::string input_type = "HDMI"; int input_video_framerate = 0; std::string input_video_size; int input_video_collected_frame = 0; int input_video_lost_frame = 0; Channel_audio_set audio_set; std::vector streams; Channel_input_type_digimage input_type_digimage; Channel_input_type_carousel input_type_carousel; Channel_input_type_mix input_type_mix; Channel_input_type_ndi input_type_ndi; Channel_input_type_net input_type_net; Channel_input_type_usb input_type_usb; Channel_channel() = default; XPACK(O(enable, name, input_type, input_video_framerate, input_video_size, input_video_collected_frame, input_video_lost_frame, audio_set, streams, input_type_digimage, input_type_carousel, input_type_mix, input_type_ndi, input_type_net, input_type_usb)) }; struct Channel_params { std::vector channels; Channel_params() = default; XPACK(O(channels)) }; struct Record_record { int enable = 0; int flv = 0; int mp4 = 1; int mp4_max_second = 600; int status = 0; std::string start_time; Record_record() = default; XPACK(O(enable, flv, mp4, mp4_max_second, status, start_time)) }; struct Record_params { std::string base_path; int loop_storage_enable = 0; int loop_storage_min_size = 1024; std::vector> records; Record_params() = default; XPACK(O(base_path, loop_storage_enable, loop_storage_min_size, records)) }; struct Gb28181_chn { int enable = 0; std::string gb_chn_id; std::string gb_chn_name; int stream_state = 0; Gb28181_chn() = default; XPACK(O(enable, gb_chn_id, gb_chn_name, stream_state)) }; struct Gb28181_params { int enable = 0; std::string spec_model = "H.264/H.265 Encoder"; std::string manufacture = "Encoder"; int local_sip_port = 5061; int con_state = 0; std::string auth_id; std::string auth_passwd; int heartbeat_cycle = 30; int heartbeat_timeout_cnt = 3; int registration_period = 86400; std::string sip_server_addr; std::string sip_server_domain; std::string sip_server_id; int sip_server_port = 5060; std::vector> gb28181_chns; Gb28181_params() = default; XPACK(O(enable, spec_model, manufacture, local_sip_port, con_state, auth_id, auth_passwd, heartbeat_cycle, heartbeat_timeout_cnt, registration_period, sip_server_addr, sip_server_domain, sip_server_id, sip_server_port, gb28181_chns)) }; struct Loopout_audio { int enable = 1; int chn_id = 0; int audio_volume_gain; Loopout_audio() = default; XPACK(O(enable, chn_id, audio_volume_gain)) }; struct Loopout_video { int enable = 1; int low_latency = 0; std::string encoded_size; int rotate = 0; int mirror = 0; int chn_id = 0; int stream_id = 0; std::string type; int ui = 0; int vid = 0; std::string matrix; int luma = 64; int contrast = 64; int saturation = 64; int hue = 64; int audio_volume_gain; Loopout_video() = default; XPACK(O(enable, low_latency, encoded_size, rotate, mirror, chn_id, stream_id, type, ui, vid, matrix, luma, contrast, saturation, hue, audio_volume_gain)) }; struct Loopout_params { Loopout_audio audio; Loopout_video hdmi; Loopout_video sdi; Loopout_params() = default; XPACK(O(hdmi, sdi)) }; struct Mix_lay_def_layer { int chn_id = -1; int stream_id = 0; int audio_status = 0; int lock = 0; float pos_x = 0.0f; float pos_y = 0.0f; float pos_w = 0.3333f; float pos_h = 0.3333f; int z_index = 0; Mix_lay_def_layer() = default; XPACK(O(chn_id, stream_id, audio_status, lock, pos_x, pos_y, pos_w, pos_h, z_index)) }; struct Mix_lay_def_layout { std::string layout_id; std::string layout_name; int enable = 1; std::vector layers; Mix_lay_def_layout() = default; XPACK(O(layout_id, layout_name, layers)) }; struct Mix_lay_def { std::vector layouts; Mix_lay_def() = default; XPACK(O(layouts)) }; struct Osd_osd { int enable = 0; int chn_id = 0; int stream_id = 0; std::string type = "pic"; std::string content; std::string font; std::string color; std::string bgcolor; float alpha = 0; float scale = 0; int speed = 0; float x = 0; float y = 0; int z = 0; float w = 0; float h = 0; Osd_osd() = default; XPACK(O(enable, chn_id, stream_id, type, content, font, color, bgcolor, alpha, scale, speed, x, y, z, w, h)) }; struct Osd_resource { std::string path; std::string time; std::string type; Osd_resource() = default; XPACK(O(path, time, type)) }; struct Osd_params { std::vector>> osds; std::vector resources; Osd_params() = default; XPACK(O(osds, resources)) }; struct Push_url { int enable = 0; std::string des; std::string url; int stream_state = 0; Push_url() = default; XPACK(O(enable, des, url, stream_state)) }; struct Push_params { int srcA = -1; int srcV = 0; int srcV_stream = 0; int autorun = 0; std::string start_day; std::string start_time; std::string stop_day; std::string stop_time; std::vector urls; Push_params() = default; XPACK(O(srcA, srcV, srcV_stream, autorun, start_day, start_time, stop_day, stop_time, urls)) }; struct Status_params { std::string version; std::string image_version; std::string serial_num; float cpu_usage = 0; float cpu_junc_tmp = 0; float memory_free = 0; float memory_total = 0; std::string runtime; std::string device_time; int net_state_up = 0; int net_state_dw = 0; std::string fireware_download_url; std::string fireware_upgrade_last_log; Status_params() = default; XPACK(O(version, serial_num, cpu_usage, cpu_junc_tmp, memory_free, memory_total, runtime, device_time, net_state_up, net_state_dw, fireware_download_url, fireware_upgrade_last_log)) }; struct System_http { std::string user_name; std::string user_password; std::string language = "zh"; int api_auth = 0; System_http() = default; XPACK(O(user_name, user_password, language, api_auth)) }; struct System_service_ports { int nat_port_enable = 0; std::string nat_port_host = ""; int http_api_port = 22112; int http_api_port_nat_port = 22112; int http_port = 80; int http_port_nat_port = 80; int rtmp_port = 1935; int rtmp_port_nat_port = 1935; int rtsp_port = 554; int rtsp_port_nat_port = 554; int srt_port = 9000; int srt_port_nat_port = 9000; int nat_frp_enable = 0; int nat_frp_pid = 0; System_service_ports() = default; XPACK(O(nat_port_enable, nat_port_host, http_api_port, http_api_port_nat_port, http_port, http_port_nat_port, rtmp_port, rtmp_port_nat_port, rtsp_port, rtsp_port_nat_port, srt_port, srt_port_nat_port, nat_frp_enable, nat_frp_pid)) }; struct System_share_storage_cifs { int enable = 0; std::string ip; std::string path; std::string username; std::string password; std::string local_path = "/mnt/storages/cifs"; std::string vers = "2.0"; System_share_storage_cifs() = default; XPACK(O(enable, ip, path, username, password, local_path, vers)) }; struct System_share_storage_nfs { int enable = 0; std::string ip; std::string path; std::string local_path = "/mnt/stroages/nfs"; std::string vers = "4"; System_share_storage_nfs() = default; XPACK(O(enable, ip, path, local_path, vers)) }; struct System_share_storage { System_share_storage_cifs cifs; System_share_storage_nfs nfs; System_share_storage() = default; XPACK(O(cifs, nfs)) }; struct Network_set_config { int enable = 0; int dhcp_enable = 0; std::string host_ip; std::string mac_addr; std::string netmask; std::string gateway; std::string dns1; std::string dns2; std::string ssid; std::string ssid_pwd; std::string ssid_mode = "STA"; Network_set_config() = default; XPACK(O(enable, dhcp_enable, host_ip, mac_addr, netmask, gateway, dns1, dns2, ssid, ssid_pwd, ssid_mode)) }; struct Network_set { Network_set_config eth0; Network_set_config wlan0; Network_set() = default; XPACK(O(eth0, wlan0)) }; struct Time_set { int ntp_enable = 1; std::string ntp_server = "ntp.ntsc.ac.cn"; int ntp_server_port = 123; int ntp_idle = 60; std::string time_zone = "8"; Time_set() = default; XPACK(O(ntp_enable, ntp_server, ntp_server_port, ntp_idle, time_zone)) }; struct Schedule_restart { int restart_enable = 0; std::string restart_time = "06:10"; Schedule_restart() = default; XPACK(O(restart_enable, restart_time)) }; struct System_serialtrans { std::string type = "232"; int work_mode = 0; int baudrate = 9600; std::string remote_addr; int remote_port = 10000; int listen_port = 10000; System_serialtrans() = default; XPACK(O(type, work_mode, baudrate, remote_addr, remote_port, listen_port)) }; struct System_nattraversal_frp { int enable = 0; std::string remote_addr; int remote_port = 10001; int listen_port = 10001; System_nattraversal_frp() = default; XPACK(O(enable, remote_addr, remote_port, listen_port)) }; struct System_nattraversal_rtty { int enable = 0; std::string name; std::string remote_addr; std::string id = "dfdfdsfdfdsfds"; std::string token; System_nattraversal_rtty() = default; XPACK(O(enable, name, remote_addr, id, token)) }; struct System_nattraversal { System_nattraversal_frp frp; System_nattraversal_rtty rtty; XPACK(O(frp, rtty)) }; struct System_moresettings { std::string logo_title = "H.265/H.264 Encoder"; std::string logo_image; std::string menu_location = "left"; std::string h5play_title = ""; int screen_turn_time = 5; System_moresettings() = default; XPACK(O(logo_title, logo_image, menu_location, h5play_title, screen_turn_time)) }; struct System_params { System_http http; Network_set network_set; Time_set time_set; Schedule_restart schedule_restart; std::vector serialtrans; System_nattraversal nattraversal; System_moresettings moresettings; System_service_ports service_ports; System_share_storage share_storage; System_params() = default; XPACK(O(http, network_set, time_set, schedule_restart, serialtrans, nattraversal, moresettings, service_ports, share_storage)) }; struct Onvif_chn { uint32_t enable = 1; Onvif_chn() = default; XPACK(O(enable)) }; struct Onvif_params { int auth_enable = 0; std::string auth_username = "admin"; std::string auth_password = "admin"; int time_sync_enable = 0; uint32_t enable = 1; std::string device_name = "H.264/H.265 Encoder"; std::string spec_model = "H.264/H.265 Encoder"; std::string manufacture = "DaweiVision"; std::string firmware_version; std::string serial_number; std::string hardware_id = "1.0"; std::string device_type = "Encoder"; std::string ip; std::string mac; uint web_service_bind_port = 8000; std::string location_country = "China"; std::string location_city = "Chengdu"; std::vector> chns; Onvif_params() = default; XPACK(O(auth_enable, auth_username, auth_password, time_sync_enable, enable, device_name, spec_model, manufacture, firmware_version, serial_number, hardware_id, device_type, ip, mac, web_service_bind_port, location_country, location_city, chns)) }; struct Diskinfo { int status = 0; std::string device = ""; std::string path = ""; unsigned long long total = 0; unsigned long long used = 0; unsigned long long available = 0; unsigned long long free = 0; Diskinfo() = default; XPACK(O(status, device, path, total, used, available, free)) }; } } #endif