📄 stream_server.h
字号:
/***
** stream_server.h
***/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <sys/ipc.h>
#include <netdb.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <pthread.h>
#include <signal.h>
#include <unistd.h>
#include <sys/time.h>
#define STR_LEVEL0(fmt,args...) {printf("[%s,%s,%d]"fmt,__FILE__,__FUNCTION__,__LINE__,## args);fflush(stdout);}
#define STR_LEVEL1(fmt, args...) {printf(fmt,## args);fflush(stdout);}
#define STR_LEVEL2(fmt, args...) {}
int QUIT_IPCAM_MAIN;
int BASE_PORT;
unsigned short QUIT_STREAM;
#define AUTH_LOOP//Enable Authencication Loop
//#define SERVER_THREAD//Listen Socket Thread
//#define CONTROL_THREAD//Video Display Control Thread
#define SERVER_PORT 40001
/*2005-04-15 netbsd*/
#define SERVER_PORT_JPEG 40002
#define SERVER_PORT_UDP 40001
#define PTZ_PORT 40005
#define CFG_PORT_UDP 40005
#define FTP_PORT 40006
#define AO_PORT 40008
#define AI_PORT 40007
#define CAST_PORT 40011 /* the port will be sendto */
#define LISTENQ 100//MAX Listen Queue Size
#define MAX_STREAM_SLICE 1400//MAX Slice Size
#define MAX_DATA 100
#define CH_ON 1
#define CH_OFF 0
/*2005-04-15 netbsd*/
//#define __JPEG_TEST__
//#define __2CH_JPEG__
#define MAX_CH 1
#define MAXCMD 40
#define MAX_LOG_SIZE 16
#define SUPER_USER 0
#define NORMAL_USER 1
#define SUPER_GROUP "root"
#define NORMAL_GROUP "users"
//#define MAX_CMD 100
#if 0 /*2004-09-30 frame_number ,frame_gop : short=>long*/
typedef struct strdata {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
unsigned short frame_id;
unsigned short frame_number;
unsigned short frame_size;
unsigned short frame_type;
unsigned short frame_gop;
unsigned short frame_gop_num;
unsigned short frame_crc;
unsigned short frame_nm;
unsigned short dummy0;
unsigned short dummy1;
} STRDATA ;
typedef struct strhdr {
unsigned char start_code[6];
unsigned short frame_num;
unsigned short frame_size;
unsigned short slice_num;
unsigned short slice_size;
unsigned short frame_id;
unsigned short frame_gop;
unsigned short frame_gop_num;
unsigned short frame_type;
unsigned char frame_data[MAX_STREAM_SLICE];
unsigned char end_code[6];
} STRHDR;
#else
#if 0
typedef struct strdata {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
unsigned short frame_id;
unsigned long frame_number;
unsigned short frame_size;
unsigned short frame_type;
unsigned long frame_gop;
unsigned short frame_gop_num;
unsigned short frame_crc;
unsigned short frame_nm;
unsigned short dummy0;
unsigned short dummy1;
} STRDATA ;
#else /*2005-03-09*/
typedef struct strdata {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
unsigned short frame_id;
unsigned long frame_number;
unsigned long frame_size;
unsigned short frame_type;
unsigned long frame_gop;
unsigned short frame_gop_num;
unsigned short frame_crc;
unsigned short frame_nm;
unsigned short dummy0;
unsigned short dummy1;
} STRDATA ;
#endif
#if 0
typedef struct strhdr {
unsigned char start_code[6];
unsigned long frame_num;
unsigned short frame_size;
unsigned short slice_num;
unsigned short slice_size;
unsigned short frame_id; /*I-reference MODE : 1 , Standard :0*/
unsigned long frame_gop;
unsigned short frame_gop_num;
unsigned short frame_type;
unsigned char frame_data[MAX_STREAM_SLICE];
unsigned char end_code[6];
} STRHDR;
#else
#if 0 /*2005-03-09 netbsd*/
typedef struct strhdr {
unsigned char start_code[6];
unsigned long frame_num;
unsigned short frame_size;
unsigned short slice_num;
unsigned short slice_size;
unsigned short frame_id; /*I-reference MODE : 1 , Standard :0*/
unsigned long frame_gop;
unsigned short frame_gop_num;
unsigned short frame_type;
unsigned char frame_data[MAX_STREAM_SLICE];
unsigned char end_code[6];
} __attribute__ ((packed)) STRHDR;
#else
typedef struct strhdr {
unsigned char start_code[6];
unsigned long frame_num;
unsigned long frame_size;
unsigned short slice_num;
unsigned short slice_size;
unsigned short frame_id; /*I-reference MODE : 1 , Standard :0*/
unsigned long frame_gop;
unsigned short frame_gop_num;
unsigned short frame_type;
unsigned char frame_data[MAX_STREAM_SLICE];
unsigned char end_code[6];
} __attribute__ ((packed)) STRHDR;
#endif
#endif
#endif
typedef struct chcmd {
unsigned short chn_cont;//Display:1
unsigned short chn_cmd;//On:1/Off:2
unsigned short chn_num;//Channel Number 1,2,3,4
} _chcmd_ ;
typedef struct loginfo {
unsigned char user_id[16];
unsigned char user_pass[16];
unsigned char group_id[16];
} _loginfo_ ;
typedef struct serverparams{
int server_ch;
int server_sock;
} _serverparams_ ;
typedef struct streamparams{
int client_sock;
int client_addr;
char client_ip[16];
int client_port;
} _streamparams_ ;
unsigned short *frame_cmd;
#define __SELECT__ 1
#define MIN_DELAY 10000
#define MIN_DELAY2 100000
#define BUFFER_LEN (120*1024) /*2005-02-07 netbsd*/
#define MAX_FRAME_IPB 15 /*IPPPPPPPPPPPPPP*/
#if 0
#define MAX_FRAME_AO 8
#define MAX_FRAME_AI 8
#else
#define MAX_FRAME_AO 2
#define MAX_FRAME_AI 2
#endif
/*For Test*/
//#define MAX_STREAM_NUM 0x000000ff
//#define MAX_STREAM_NUM 0xffffff00/0x00000002
/*2005-02-03 netbsd*/
#define MAX_STREAM_NUM 0xfffffff0
#define INIT_STREAM_NUM 0x00000001
typedef struct ncam_str {
STRDATA str_dat;
unsigned char str_buf[BUFFER_LEN];
}NCAM_STR;
/* OUT video*/
NCAM_STR *ncam_str_0[MAX_CH][MAX_FRAME_IPB];
/*OUT audio*/
NCAM_STR *ncam_str_4[MAX_FRAME_AO];
/*IN audio*/
NCAM_STR *ncam_str_5[MAX_FRAME_AI];
#define VIDEO_CH 0
#define AUDIO_CH_OUT 4
#define AUDIO_CH_IN 5
#define MAX_MUTEX 8
#define MAX_MUTEX_SUB 80
pthread_mutex_t ncam_mutex[MAX_MUTEX][MAX_MUTEX_SUB];
pthread_cond_t ncam_cond[MAX_MUTEX][MAX_MUTEX_SUB];
#if 0
typedef struct
{
unsigned char head;
unsigned char cmd;
unsigned long data;
} __attribute__ ((packed)) packet2_t;
#endif
//#define START_STOP_ENC 3 /*Encoder Video/Audio*/
//#define START_STOP_DEC 3 /*Decoder Video/Audio*/
#define VIDEO_ONLY 0x0001 /*VIDEO ENC/DEC*/
#define AUDIO_ONLY 0x0002 /*AUDIO ENC/DEC*/
#define STANDARD_MODE 0
#define I_REFENCE_MODE 1
int REC_OPT_MODE;
#define MAX_CLIENT_UDP 10
typedef struct CONNECTION_DB {
char client_ip[16];
int client_port;
int is_alive;
} CON_DB;
#define STATIC_IP 0
#define NORMAL_DHCP 1
#define PPPOE_DHCP 2
#define MAX_ALIVE_CNT 300
int audio_client_ip;
typedef struct __SESSION_MANAGER__ {
char ss_id[16];
int perm;
char client_ip[16];
int client_port;
int alive;
char dummy[32];
}SESSION_MANAGER;
SESSION_MANAGER SS_MAN[MAX_CLIENT_UDP];
int DEC_CLIENT;
int QUIT_DEC_CLIENT;
void *at2041_start_vdec(void *args);
void *at2041_start_adec(void *args);
#define PM_QUERY_FLAG 1L
#define PM_SETTING_FLAG 2L
#define PM_SUCCEED_FLAG 1L
#define PM_ERROR_FLAG 2L
#define PM_IGNORE_FLAG 3L
#define NET_STATIC 0L
#define NET_DHCP 1L
#define NET_PPPOE 2L
/*Send broadcast packet*/
typedef struct __QUERY_TYPE__ {
unsigned long query_flag;
unsigned long reply_flag;
unsigned long net_type;
unsigned char host_name[24];
unsigned char mac_addr[24];
unsigned char ip_addr[4];
unsigned char net_mask[4];
unsigned char gw_addr[4];
unsigned char reserv0[16];
unsigned char reserv1[16];
unsigned long dummy0;
unsigned long dummy1;
unsigned long dummy2;
unsigned long dummy3;
}__attribute__ ((packed)) PM_QUERY_TYPE;
unsigned short keypad_val;
pthread_mutex_t key_mutex;
pthread_cond_t key_cond;
#define SW2 0xC0 /*SW2 SETUP*/
#define SW3 0x40 /*SW3 OSD*/
#define SW4 0x82 /*SW4 PTZ F2*/
#define SW5 0x02 /*SW5 RECSET F1*/
#define SW6 0x42 /*SW6 F3 step rew */
#define SW7 0xc2 /*SW7 PIP_QUAD F4*/
#define SW8 0x22 /*SW8 F5*/
#define SW9 0x20 /*SW9 SUB+*/
#define SW10 0xA0 /*SW10 SUB-*/
#define SW11 0x38 /*SW11 REW*/
#define SW12 0x18 /*SW12 + */
#define SW13 0xE8 /*SW13 - */
#define SW14 0xB8 /*SW14 PLAY*/
#define SW15 0x98 /*SW15 LIST*/
#define SW16 0x58 /*SW16 REC*/
#define SW17 0x78 /*SW17 FAST FORWARD*/
#define SW18 0xD8 /*SW18 SLOW*/
#define SW19 0xFF /*SW19 */
#define SW20 0x60 /*SW20 LEFT*/
#define SW21 0xE0 /*SW21 UP*/
#define SW22 0x30 /*SW22 SELECT*/
#define SW23 0x10 /*SW23 DOWN*/
#define SW24 0x90 /*SW24 RIGHT*/
#define SW25 0x80 /*SW25 POWER*/
char ip0_set[20], ip1_set[20];
#if 1
typedef struct __RTP_HEADER__ {
#ifdef __BIG_ENDIAN__
unsigned int version:2; /* protocol version */
unsigned int padding:1; /* padding flag */
unsigned int extension:1; /* header extension flag */
unsigned int csrc_count:4; /* CSRC count */
unsigned int marker:1; /* marker bit */
unsigned int payload_type:7; /* payload type */
#else /*__LITTLE_ENDIAN__*/
unsigned int csrc_count:4; /* CSRC count */
unsigned int extension:1; /* header extension flag */
unsigned int padding:1; /* padding flag */
unsigned int version:2; /* protocol version */
unsigned int payload_type:7; /* payload type */
unsigned int marker:1; /* marker bit */
#endif
unsigned short seq; /* sequence number */
unsigned long timestamp; /* timestamp */
unsigned long ssrc; /* synchronization source */
unsigned long csrc[1]; /* optional CSRC list */
}__attribute__ ((packed)) RTP_HEADER;
#endif
/*2005-03-09 netbsd*/
#define HIGH_QUALITY 4
#define HIGH_RATE 170
int ACTIVE_QL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -