#include "mpp_decode.h"
#include "mpp_encode.h"
#include "rkisp_ops.h"
#include "usb_camera.h"
#include "rk_drm_zm.h"
#include "control_impl.h"
#include "types_def.h"
#include "video_common.h"
#include "rtsp_client.h"
#include "rtsp_server.h"
#include "data_engine.h"
#include "xutils.h"
#include "debug.h"
#include "log/log.h"
#include "config_handler.h"
#include "dlfcn.h"
#include <sched.h>
#include "zm_ts.h"
#include "socket_can_ops.h"
#include "rk_wdt.h"
#include "Tsmux.h"
#include "sys_inc.h"
#include "rtsp_srv.h"
#include "rtmp_pusher.h"
#include "pcie_impl.h"
#include "pro_wxg.h"
#include "rkisp_ops.h"
#include "list.h"
#ifdef __cplusplus
extern "C" {
#endif
#include "logger.h"
#ifdef __cplusplus
}
#endif
zm_ts_udp_info_t gs_ts_udp_info = {0};
zm_rtsp_info_t gs_rtsp_info = {0};
static void sig_handler(int sig)
{
printf("%s, sig=%d\r\n", __FUNCTION__, sig);
//mipi_camera_uninit();
// rtsp_server_deinit();
//decode_frame_deinit();
data_stream_deinit();
encode_frame_deinit();
rtsp_client_deinit();
control_comm_destory();
//usb_camera_deinit();
logger_deinit();
//rk_watchdog_deinit();
exit(0);
}
void load_json_setting_file(void)
{
char value[512] = {0};
char cmd[128] = {0};
int ret=-1;
zmv_config_file_load(SYSTEM_SETTING_DEFAULT_JSON_FILE, LOAD_INIT_CONFIG);
zmv_config_file_load(SYSTEM_SETTING_CUSTOM_JSON_FILE, LOAD_CUSTOM_CONFIG);
// /*************输入坂数设置**************/
// switch(input_type)
// {
//if(gs_vedio_info.input_type ==TYPE_RTSP){
zmv_config_get_value_string(e_rtsp_client_server_ip,gs_rtsp_info.rtsp_client_ip,sizeof(gs_rtsp_info.rtsp_client_ip));
gs_rtsp_info.rtsp_client_port = zmv_config_get_value_int(e_rtsp_client_port);
//zmv_config_get_value_string(e_rtsp_client_name,gs_rtsp_info.rtsp_client_stream_name,sizeof(gs_rtsp_info.rtsp_client_stream_name));
//zmv_config_get_value_string(e_rtsp_client_user_name,gs_rtsp_info.rtsp_client_username,sizeof(gs_rtsp_info.rtsp_client_username));
//zmv_config_get_value_string(e_rtsp_client_password,gs_rtsp_info.rtsp_client_password,sizeof(gs_rtsp_info.rtsp_client_password));
zmv_config_get_value_string(e_rtsp_client_protocol,value,sizeof(value));
//SLOGI(" rtsp://admin:%s@%s:%d/%s \n",gs_rtsp_info.rtsp_client_password,gs_rtsp_info.rtsp_client_ip,\
//gs_rtsp_info.rtsp_client_port,gs_rtsp_info.rtsp_client_stream_name);
//}
gs_rtsp_info.tcp_ctl_port = zmv_config_get_value_int(e_device_tcp_ctl_port);
logger_info("load","udp server port = %d\n", gs_rtsp_info.tcp_ctl_port);
//#if defined ZM_MP5_PL || defined ZM_MP5_XT
//zmv_config_get_value_string(e_device_eth1,gs_ts_udp_info.udpts_ip,sizeof(gs_ts_udp_info.udpts_ip));
gs_ts_udp_info.udpts_port = gs_rtsp_info.tcp_ctl_port-1; //tcp port -1 use as udp port
logger_info("load","udp client link port = %d\n", gs_rtsp_info.tcp_ctl_port-1);
Selfcheck_info.udp_port=gs_rtsp_info.tcp_ctl_port;
// #else
// //zmv_config_get_value_string(e_device_eth1,gs_ts_udp_info.udpts_ip,sizeof(gs_ts_udp_info.udpts_ip));
// gs_ts_udp_info.udpts_port = gs_rtsp_info.tcp_ctl_port; //tcp port use as udp port
// logger_info("load","udp clent link port = %d\n", gs_rtsp_info.tcp_ctl_port);
// #endif
logger_info("load","udp tsSend %s udp://@%s:%d\n",value,gs_ts_udp_info.udpts_ip,gs_ts_udp_info.udpts_port);
/****Rtsp Server设置****/
memset(value,0,sizeof(value));
zmv_config_get_value_string(e_rtsp_server_state,value,sizeof(value));
if(strcmp(value,"open") == 0)
{
gs_rtsp_info.rtsp_server_open_flag = 1;
gs_rtsp_info.rtsp_server_port = zmv_config_get_value_int(e_rtsp_server_port);
memset(value,0,sizeof(value));
}
gs_rtsp_info.rtsp_server_open_flag = 1;
gs_rtsp_info.venc_bitrate = 4 * 1024;
/******编码码率******/
gs_rtsp_info.venc_bitrate = zmv_config_get_value_int(e_device_bitrate);
if(gs_rtsp_info.venc_bitrate <= 500){
gs_rtsp_info.venc_bitrate=500;
}
if(gs_rtsp_info.venc_bitrate >= 6 * 1024 )
{
gs_rtsp_info.venc_bitrate = 6 * 1024;
}
logger_info("load","final stream bitrate = %d\n",gs_rtsp_info.venc_bitrate);
Selfcheck_info.webport = zmv_config_get_value_int(e_ts_send_port);
/****网络设置****/
memset(Selfcheck_info.rk_eth0_ip,0,sizeof(Selfcheck_info.rk_eth0_ip));
if(Selfcheck_info.ip_bak!=0xff){
zmv_config_get_value_string(e_device_eth0,Selfcheck_info.rk_eth0_ip,sizeof(Selfcheck_info.rk_eth0_ip));
}else{
sprintf(Selfcheck_info.rk_eth0_ip,"192.168.2.119");
zmv_config_set_value(e_device_eth0, Selfcheck_info.rk_eth0_ip);
if(zmv_config_file_generate(SYSTEM_SETTING_TMP_CUSTOM_JSON_FILE) == 0)
{
memset(cmd,0,sizeof(cmd));
sprintf(cmd,"cp %s %s;sync",SYSTEM_SETTING_TMP_CUSTOM_JSON_FILE,SYSTEM_SETTING_CUSTOM_JSON_FILE);
system(cmd);
}
}
printf("------------ip:%s",Selfcheck_info.rk_eth0_ip);
ret=zm_is_ipv4_addr(Selfcheck_info.rk_eth0_ip);
if(ret!=0){
sprintf(Selfcheck_info.rk_eth0_ip,"192.168.2.119");
}
zmv_config_get_value_string(e_rtsp_server_stream_type,value,sizeof(value));
memset(value,0,sizeof(value));
zmv_config_get_value_string(e_ts_rtsp_image,value,sizeof(value));
#ifdef RTMP_OUTPUT_ENABLE
/**************设置RTMP PUSHER路径*****************/
// zmv_config_get_value_string(e_rtsp_client_user_name,gs_rtsp_info.rtsp_client_username,sizeof(gs_rtsp_info.rtsp_client_username));
// zmv_config_get_value_string(e_rtsp_client_password,gs_rtsp_info.rtsp_client_password,sizeof(gs_rtsp_info.rtsp_client_password));
memset(value,0,sizeof(value));
zmv_config_get_value_string(e_rtsp_client_name,value,sizeof(value));
if(strncmp(value,"rtmp://",7) == 0)
{
strncpy(gs_rtsp_info.rtmp_ip, value, sizeof(value));
}
else
{
strcpy(gs_rtsp_info.rtmp_ip, "rtmp://192.168.2.117/live/3.0");
}
logger_info("load","rtmp_pusher.dsturl = %s\n",gs_rtsp_info.rtmp_ip);
/**************设置网关路径*****************/
#endif
return;
}
unsigned char img_buf[1920*1080*3/2];
unsigned char res_buf[1920*1080*2];
#pragma message( "Compiling " __DATE__", " __TIME__)
int main(int argc, char *argv[])
{
int ret = RET_OK;
/* Ignore broken pipes */
signal(SIGPIPE, SIG_IGN);
signal(SIGINT, sig_handler);
signal(SIGKILL, sig_handler);
signal(SIGTERM, sig_handler);
char cmd[256] = {0};
printf("************Compile time:%s %s***************\n ",__DATE__, __TIME__);
logger_init();
logger_info("main","bulid project time %s %s\n", __TIME__, __DATE__);
ret=data_stream_init();
logger_info("main","-------data_stream_init %d\n",ret);
if (ret != RET_OK) {
return ret;
}
load_json_setting_file();
ret = encode_frame_init();
logger_info("main","------encode_frame_init------ret %d\n",ret);
if (ret != RET_OK)
{
//return ret;
}
#ifdef TS_OUTPUT_ENABLE
#ifdef ZM_MP5_PL
ret = ts_stream_send_init(&gs_ts_udp_info.udp_ts_sockfd, &gs_ts_udp_info.udp_ts_send_addr,
gs_ts_udp_info.udpts_ip, 2022);
#else
ret = ts_stream_send_init(&gs_ts_udp_info.udp_ts_sockfd, &gs_ts_udp_info.udp_ts_send_addr,
gs_ts_udp_info.udpts_ip, gs_ts_udp_info.udpts_port);
#endif
logger_info("main","----------ts_stream_send_init----------ret %d\n",ret);
if (gs_ts_udp_info.open_udpts_flag)
{
if (ret == 0)
{
pthread_t tsSendThreadId;
QueueInitial(&tsQueue, 50 * 188 * 1000, 20 * 188);
pthread_create(&tsSendThreadId, NULL, send_ts_stream, NULL);
}
}
#endif
mipi_init();
ret=rk3588_pcie_init();
SLOGI("pcie init----ret %d\n", ret);
ret=later_thread_init();
reset_pcie_all();
all_sdi_close();
usleep(200*10000);
all_sdi_open();
pcie_sdi_init();
#ifdef RTSP_OUTPUT_ENABLE
if (gs_rtsp_info.rtsp_server_open_flag)
{
// ret = rtsp_server_init(RTSP_SERVER_PORT,gs_rtsp_info.rtsp_server_w,gs_rtsp_info.rtsp_server_h);
ret = run_rtsp_srv();
logger_info("main","----------rtsp_server_init----------ret %d\n",ret);
// if (ret != RET_OK) {
// return ret;
// }
}
#endif
ret = control_comm_init();
logger_info("main","-------control_comm_init %d\n",ret);
ret = decode_frame_init();
logger_info("main","----------decode_frame_init----------ret %d\n",ret);
if (ret != RET_OK) {
return ret;
}
ret = decode_frame_init_B();
logger_info("main","----------decode_frame_init----------ret %d\n",ret);
if (ret != RET_OK) {
return ret;
}
ret = rtsp_client_init_all();
if (ret < 0)
{
printf("ret=%d\n", ret);
perror("rtsp_client_init_all");
return ret;
}
SLOGI("rtsp_client_init_all end ret=%d\n", ret);
#ifdef RTMP_OUTPUT_ENABLE
ret=run_rtmp_pusher();
logger_info("main","----------run_rtmp_pusher----------ret %d\n",ret);
#endif
while(1) {
// rk_feed_watchdog();
sleep(5);
}
return 0;
}
代码逐行详解