📄 stream_server.c
字号:
tmp_number=0;
}
tmp_gop = str_data_tmp.frame_gop;
if( (tmp_number < str_data_tmp.frame_number) ) {
tmp_number = str_data_tmp.frame_number;
//memset(send_buff_ipb[sav_cnt], '\0', BUFFER_LEN);
memcpy(send_buff_ipb[sav_cnt], ch_buff_0_ipb[sav_cnt], str_data_tmp.frame_size+sizeof(STRDATA));
DEV_LEVEL2 ("sav_cnt:%d , str_data_tmp.frame_number:%d\n" ,sav_cnt, str_data_tmp.frame_number);
break;
}
else usleep(rtimeout.tv_usec);
}
else {
if (tmp_gop == str_data_tmp.frame_gop ) {
if(tmp_number < str_data_tmp.frame_number) {
tmp_number = str_data_tmp.frame_number;
//memset(send_buff_ipb[sav_cnt], '\0', BUFFER_LEN);
memcpy(send_buff_ipb[sav_cnt], ch_buff_0_ipb[sav_cnt], str_data_tmp.frame_size+sizeof(STRDATA));
DEV_LEVEL2 ("sav_cnt:%d , str_data_tmp.frame_number:%d\n" ,sav_cnt, str_data_tmp.frame_number);
break;
}
else usleep(rtimeout.tv_usec);
}
else if (tmp_gop < str_data_tmp.frame_gop ) {
str_data_tmp.frame_size=0;
memcpy(send_buff_ipb[sav_cnt], (STRDATA *)&str_data_tmp,sizeof(STRDATA));
break;
}
else usleep(rtimeout.tv_usec);
}
}
}
if(str_data_tmp.frame_type==0) SAV_I_BYTE+=str_data_tmp.frame_size;
if(str_data_tmp.frame_type==1) SAV_P_BYTE+=str_data_tmp.frame_size;
if(str_data_tmp.frame_type==2) SAV_B_BYTE+=str_data_tmp.frame_size;
if( sav_cnt == 0 ) {
m1_timeout.tv_sec = str_data_tmp.tv_sec;
m1_timeout.tv_usec = str_data_tmp.tv_usec;
}
else if( (m2_timeout.tv_sec <= str_data_tmp.tv_sec) || (m2_timeout.tv_usec <= str_data_tmp.tv_usec) ) {
m2_timeout.tv_sec = str_data_tmp.tv_sec;
m2_timeout.tv_usec = str_data_tmp.tv_usec;
}
GOP_STR_NUM=str_data_tmp.frame_nm;
}
MEM_TIME=1000000*(m2_timeout.tv_sec-m1_timeout.tv_sec)+(m2_timeout.tv_usec-m1_timeout.tv_usec);
break;
}
case 1:
{
for(sav_cnt=0;sav_cnt<GOP_STR_NUM;sav_cnt++)
{
while( (!QUIT_STREAM) && !(stop_flag) )
{
#ifdef __SELECT__
FD_ZERO(&rr_set);
FD_SET(client_sock, &rr_set);
FD_ZERO(&ww_set);
FD_SET(client_sock, &ww_set);
if (select(client_sock+1, &rr_set, NULL, NULL, &rtimeout) < 0 ) {
perror("select");
}
if (FD_ISSET(client_sock, &rr_set)) {
for(mem_cnt=0;mem_cnt<MAX_FRAME_IPB;mem_cnt++)
free((unsigned char *)send_buff_ipb[mem_cnt]);
DEV_LEVEL0 ("[Client Thread ID %d:%d STOPED]\n", ch_id, client_sock);
close(client_sock);
pthread_exit((void*)p_value);
}
else {
FD_CLR(client_sock, &rr_set);
}
#endif
if( memcpy((STRDATA *)&str_data_tmp, ch_buff_1_ipb[sav_cnt], sizeof(STRDATA)) != NULL )
{
if (str_data_tmp.frame_type==0) {
if( (str_data_tmp.frame_number == INIT_STREAM_NUM) || (tmp_number>=MAX_STREAM_NUM) ) {
tmp_number=0;
}
tmp_gop = str_data_tmp.frame_gop;
if( (tmp_number < str_data_tmp.frame_number) ) {
tmp_number = str_data_tmp.frame_number;
//memset(send_buff_ipb[sav_cnt], '\0', BUFFER_LEN);
memcpy(send_buff_ipb[sav_cnt], ch_buff_1_ipb[sav_cnt], str_data_tmp.frame_size+sizeof(STRDATA));
DEV_LEVEL2 ("sav_cnt:%d , str_data_tmp.frame_number:%d\n" ,sav_cnt, str_data_tmp.frame_number);
break;
}
else usleep(rtimeout.tv_usec);
}
else {
if (tmp_gop == str_data_tmp.frame_gop ) {
if(tmp_number < str_data_tmp.frame_number) {
tmp_number = str_data_tmp.frame_number;
//memset(send_buff_ipb[sav_cnt], '\0', BUFFER_LEN);
memcpy(send_buff_ipb[sav_cnt], ch_buff_1_ipb[sav_cnt], str_data_tmp.frame_size+sizeof(STRDATA));
DEV_LEVEL2 ("sav_cnt:%d , str_data_tmp.frame_number:%d\n" ,sav_cnt, str_data_tmp.frame_number);
break;
}
else usleep(rtimeout.tv_usec);
}
else if (tmp_gop < str_data_tmp.frame_gop ) {
str_data_tmp.frame_size=0;
memcpy(send_buff_ipb[sav_cnt], (STRDATA *)&str_data_tmp,sizeof(STRDATA));
break;
}
else usleep(rtimeout.tv_usec);
}
}
}
if(str_data_tmp.frame_type==0) SAV_I_BYTE+=str_data_tmp.frame_size;
if(str_data_tmp.frame_type==1) SAV_P_BYTE+=str_data_tmp.frame_size;
if(str_data_tmp.frame_type==2) SAV_B_BYTE+=str_data_tmp.frame_size;
if( sav_cnt == 0 ){
m1_timeout.tv_sec = str_data_tmp.tv_sec;
m1_timeout.tv_usec = str_data_tmp.tv_usec;
}
else if( (m2_timeout.tv_sec <= str_data_tmp.tv_sec) || (m2_timeout.tv_usec <= str_data_tmp.tv_usec) ){
m2_timeout.tv_sec = str_data_tmp.tv_sec;
m2_timeout.tv_usec = str_data_tmp.tv_usec;
}
GOP_STR_NUM=str_data_tmp.frame_nm;
}
MEM_TIME=1000000*(m2_timeout.tv_sec-m1_timeout.tv_sec)+(m2_timeout.tv_usec-m1_timeout.tv_usec);
break;
}
case 2:
{
for(sav_cnt=0;sav_cnt<GOP_STR_NUM;sav_cnt++)
{
while( (!QUIT_STREAM) && !(stop_flag) )
{
#ifdef __SELECT__
FD_ZERO(&rr_set);
FD_SET(client_sock, &rr_set);
FD_ZERO(&ww_set);
FD_SET(client_sock, &ww_set);
if (select(client_sock+1, &rr_set, NULL, NULL, &rtimeout) < 0 ) {
perror("select");
}
if (FD_ISSET(client_sock, &rr_set)) {
for(mem_cnt=0;mem_cnt<MAX_FRAME_IPB;mem_cnt++)
free((unsigned char *)send_buff_ipb[mem_cnt]);
DEV_LEVEL0 ("[Client Thread ID %d:%d STOPED]\n", ch_id, client_sock);
close(client_sock);
pthread_exit((void*)p_value);
}
else {
FD_CLR(client_sock, &rr_set);
}
#endif
if( memcpy((STRDATA *)&str_data_tmp, ch_buff_2_ipb[sav_cnt], sizeof(STRDATA)) != NULL )
{
if (str_data_tmp.frame_type==0) {
if( (str_data_tmp.frame_number == INIT_STREAM_NUM) || (tmp_number>=MAX_STREAM_NUM) ) {
tmp_number=0;
}
tmp_gop = str_data_tmp.frame_gop;
if( (tmp_number < str_data_tmp.frame_number) ) {
tmp_number = str_data_tmp.frame_number;
//memset(send_buff_ipb[sav_cnt], '\0', BUFFER_LEN);
memcpy(send_buff_ipb[sav_cnt], ch_buff_2_ipb[sav_cnt], str_data_tmp.frame_size+sizeof(STRDATA));
DEV_LEVEL2 ("sav_cnt:%d , str_data_tmp.frame_number:%d\n" ,sav_cnt, str_data_tmp.frame_number);
break;
}
else usleep(rtimeout.tv_usec);
}
else {
if (tmp_gop == str_data_tmp.frame_gop ) {
if(tmp_number < str_data_tmp.frame_number) {
tmp_number = str_data_tmp.frame_number;
//memset(send_buff_ipb[sav_cnt], '\0', BUFFER_LEN);
memcpy(send_buff_ipb[sav_cnt], ch_buff_2_ipb[sav_cnt], str_data_tmp.frame_size+sizeof(STRDATA));
DEV_LEVEL2 ("sav_cnt:%d , str_data_tmp.frame_number:%d\n" ,sav_cnt, str_data_tmp.frame_number);
break;
}
else usleep(rtimeout.tv_usec);
}
else if (tmp_gop < str_data_tmp.frame_gop ) {
str_data_tmp.frame_size=0;
memcpy(send_buff_ipb[sav_cnt], (STRDATA *)&str_data_tmp,sizeof(STRDATA));
break;
}
else usleep(rtimeout.tv_usec);
}
}
}
if(str_data_tmp.frame_type==0) SAV_I_BYTE+=str_data_tmp.frame_size;
if(str_data_tmp.frame_type==1) SAV_P_BYTE+=str_data_tmp.frame_size;
if(str_data_tmp.frame_type==2) SAV_B_BYTE+=str_data_tmp.frame_size;
if( sav_cnt == 0 ){
m1_timeout.tv_sec = str_data_tmp.tv_sec;
m1_timeout.tv_usec = str_data_tmp.tv_usec;
}
else if( (m2_timeout.tv_sec <= str_data_tmp.tv_sec) || (m2_timeout.tv_usec <= str_data_tmp.tv_usec) ){
m2_timeout.tv_sec = str_data_tmp.tv_sec;
m2_timeout.tv_usec = str_data_tmp.tv_usec;
}
GOP_STR_NUM=str_data_tmp.frame_nm;
}
MEM_TIME=1000000*(m2_timeout.tv_sec-m1_timeout.tv_sec)+(m2_timeout.tv_usec-m1_timeout.tv_usec);
break;
}
case 3:
{
for(sav_cnt=0;sav_cnt<GOP_STR_NUM;sav_cnt++)
{
while( (!QUIT_STREAM) && !(stop_flag) )
{
#ifdef __SELECT__
FD_ZERO(&rr_set);
FD_SET(client_sock, &rr_set);
FD_ZERO(&ww_set);
FD_SET(client_sock, &ww_set);
if (select(client_sock+1, &rr_set, NULL, NULL, &rtimeout) < 0 ) {
perror("select");
}
if (FD_ISSET(client_sock, &rr_set)) {
for(mem_cnt=0;mem_cnt<MAX_FRAME_IPB;mem_cnt++)
free((unsigned char *)send_buff_ipb[mem_cnt]);
DEV_LEVEL0 ("[Client Thread ID %d:%d STOPED]\n", ch_id, client_sock);
close(client_sock);
pthread_exit((void*)p_value);
}
else {
FD_CLR(client_sock, &rr_set);
}
#endif
if( memcpy((STRDATA *)&str_data_tmp, ch_buff_3_ipb[sav_cnt], sizeof(STRDATA)) != NULL )
{
if (str_data_tmp.frame_type==0) {
if( (str_data_tmp.frame_number == INIT_STREAM_NUM) || (tmp_number>=MAX_STREAM_NUM) ) {
tmp_number=0;
}
tmp_gop = str_data_tmp.frame_gop;
if( (tmp_number < str_data_tmp.frame_number) ) {
tmp_number = str_data_tmp.frame_number;
//memset(send_buff_ipb[sav_cnt], '\0', BUFFER_LEN);
memcpy(send_buff_ipb[sav_cnt], ch_buff_3_ipb[sav_cnt], str_data_tmp.frame_size+sizeof(STRDATA));
DEV_LEVEL2 ("sav_cnt:%d , str_data_tmp.frame_number:%d\n" ,sav_cnt, str_data_tmp.frame_number);
break;
}
else usleep(rtimeout.tv_usec);
}
else {
if (tmp_gop == str_data_tmp.frame_gop ) {
if(tmp_number < str_data_tmp.frame_number) {
tmp_number = str_data_tmp.frame_number;
//memset(send_buff_ipb[sav_cnt], '\0', BUFFER_LEN);
memcpy(send_buff_ipb[sav_cnt], ch_buff_3_ipb[sav_cnt], str_data_tmp.frame_size+sizeof(STRDATA));
DEV_LEVEL2 ("sav_cnt:%d , str_data_tmp.frame_number:%d\n" ,sav_cnt, str_data_tmp.frame_number);
break;
}
else usleep(rtimeout.tv_usec);
}
else if (tmp_gop < str_data_tmp.frame_gop ) {
str_data_tmp.frame_size=0;
memcpy(send_buff_ipb[sav_cnt], (STRDATA *)&str_data_tmp,sizeof(STRDATA));
break;
}
else usleep(rtimeout.tv_usec);
}
}
}
if(str_data_tmp.frame_type==0) SAV_I_BYTE+=str_data_tmp.frame_size;
if(str_data_tmp.frame_type==1) SAV_P_BYTE+=str_data_tmp.frame_size;
if(str_data_tmp.frame_type==2) SAV_B_BYTE+=str_data_tmp.frame_size;
if( sav_cnt == 0 ){
m1_timeout.tv_sec = str_data_tmp.tv_sec;
m1_timeout.tv_usec = str_data_tmp.tv_usec;
}
else if( (m2_timeout.tv_sec <= str_data_tmp.tv_sec) || (m2_timeout.tv_usec <= str_data_tmp.tv_usec) ){
m2_timeout.tv_sec = str_data_tmp.tv_sec;
m2_timeout.tv_usec = str_data_tmp.tv_usec;
}
GOP_STR_NUM=str_data_tmp.frame_nm;
}
MEM_TIME=1000000*(m2_timeout.tv_sec-m1_timeout.tv_sec)+(m2_timeout.tv_usec-m1_timeout.tv_usec);
break;
}
default:
break;
}//end of switch(ch_id)
MEM_TIME+=1000000/MAX_FRAME_IPB;
MEM_TIME = MEM_TIME/1000000;
DEV_LEVEL2 ("\rCH%d:%07.2F", ch_id, MEM_TIME);
for(snd_cnt=0;snd_cnt<GOP_STR_NUM;snd_cnt++)
{
if( memcpy((STRDATA *)&str_data_cur, send_buff_ipb[snd_cnt], sizeof(STRDATA)) != NULL )
{
if( (str_data_cur.frame_number == INIT_STREAM_NUM) || (str_data_sav.frame_number >= MAX_STREAM_NUM) )
str_data_sav.frame_number=0;
if( (str_data_cur.frame_gop == INIT_STREAM_NUM) || (str_data_sav.frame_gop >= MAX_STREAM_NUM) )
str_data_sav.frame_gop=0;
if( (str_data_sav.frame_number < str_data_cur.frame_number) &&
(str_data_cur.frame_size > 1) )
{
switch(str_data_cur.frame_type)
{
case 0:
NET_TIME=0;
NET_BYTE=0;
if( (str_data_sav.frame_gop < str_data_cur.frame_gop) &&
(str_data_cur.frame_gop_num==0) )
{
if( str_data_cur.frame_gop-str_data_sav.frame_gop == 1)
JUMPED_GOP = 0;
else
JUMPED_GOP = 1;
if( ((long double)SAV_I_BYTE/MEM_TIME) < NET_RATE )
{
if( (((long double)SAV_I_BYTE+(long double)SAV_P_BYTE)/MEM_TIME) < NET_RATE )
{
SEND_P_FLAG=1;
if( JUMPED_GOP )
{
SEND_B_FLAG=0;
}
else
{
if( (((long double)SAV_I_BYTE+(long double)SAV_P_BYTE+(long double)SAV_B_BYTE)/MEM_TIME) < NET_RATE )
SEND_B_FLAG=1;
else SEND_B_FLAG=0;
}
}
else SEND_P_FLAG=0;
}
else SEND_P_FLAG=0;
str_data_sav.frame_gop_num=0;
str_data_sav.frame_gop = str_data_cur.frame_gop;
str_data_snd.frame_id = str_data_cur.frame_id;
str_data_snd.frame_number = str_data_cur.frame_number;
str_data_snd.frame_size = str_data_cur.frame_size;
str_data_snd.frame_type = str_data_cur.frame_type;
str_data_snd.frame_gop = str_data_cur.frame_gop;
str_data_snd.frame_gop_num = 0;
(long)NET_GOP=(long)str_data_cur.frame_gop;
gettimeofday( (struct timeval *)&s1_timeout, (struct timezone *)&rok_zone);
DEV_LEVEL2 ("I:%d:%d\n", str_data_snd.frame_gop, str_data_snd.frame_number);
if ( (write_slice_bytes=write_slice(client_sock, (STRDATA *)&str_data_snd,
send_buff_ipb[snd_cnt]+sizeof(STRDATA))) <=0 )
{
stop_flag=1;
for(mem_cnt=0;mem_cnt<MAX_FRAME_IPB;mem_cnt++)
free((unsigned char *)send_buff_ipb[mem_cnt]);
DEV_LEVEL0 ("[Client Thread ID %d:%d STOPED]\n", ch_id, client_sock);
close(client_sock);
pthread_exit((void*)p_value);
}
gettimeofday( (struct timeval *)&s2_timeout, (struct timezone *)&rok_zone);
SND_TIME=1000000*(s2_timeout.tv_sec-s1_timeout.tv_sec)+(s2_timeout.tv_usec-s1_timeout.tv_usec);
NET_TIME+=(SND_TIME/1000000);
(long)NET_BYTE+=(long)write_slice_bytes;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -