亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? client.cpp

?? 用于Linux下的網絡視頻。包里包括了接收端和發送端。大部份是從Spcaview修改過來的
?? CPP
字號:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
 
#include <pthread.h>
#include <SDL/SDL.h>
#include <SDL/SDL_thread.h>
 
#include <SDL/SDL_timer.h>
#include <linux/videodev.h>
#include <sys/ioctl.h>
 
#include <errno.h>
#include <fcntl.h>
 
#include "tcp.h"
 
#include "rtpsession.h"
#include "rtppacket.h"
#include "rtpudpv4transmitter.h"
#include "rtpipv4address.h"
#include "rtpsessionparams.h"
#include "rtperrors.h"
#include "rtpsourcedata.h"
 
#include <iostream>
#include <string.h>
#include <stdint.h>
#include <xvid.h>
#include "dxvid.h"
 
#define BUFFER_SIZE (2*1024*1024)
 
 
SDL_Overlay *overlay;
SDL_Rect rect;
int SHXDIM =320;//display size
int SHYDIM =240;
SDL_Surface *screen;
 
 
 
char receivebuffer[1000000];
char *receivepointer = receivebuffer;
bool visiflag = false;
int receivepayloadlength = 0;
int headreceiveflag=0;
 
RTPUDPv4TransmissionParams transparams;
RTPSessionParams sessparams;
 
 
void
checkerror (int rtperr)
{
 if (rtperr < 0)
    {
      std::cout << "ERROR: " << RTPGetErrorString (rtperr) << std::endl;
      exit (-1);
    }
}
 
 
class MyRTPSession:public RTPSession
{
protected:
 void OnPollThreadStep ();
 int ProcessRTPPacket (const RTPSourceData & srcdat,
             const RTPPacket & rtppack);
};
MyRTPSession sess;
 
void
MyRTPSession::OnPollThreadStep ()
{
 BeginDataAccess ();
 
 // check incoming packets
 if (GotoFirstSourceWithData ())
    {
      do
    {
     RTPPacket *pack;
     RTPSourceData *srcdat;
 
     srcdat = GetCurrentSourceInfo ();
 
     while ((pack = GetNextPacket ()) != NULL&&visiflag==false)
        {
          ProcessRTPPacket (*srcdat, *pack);
          delete pack;
        }
    }
      while (GotoNextSourceWithData ());
    }
       if (visiflag==false) printf(" \n %d",receivepayloadlength);
 
 EndDataAccess ();
}
 
 
 
int
MyRTPSession::ProcessRTPPacket (const RTPSourceData & srcdat,
                const RTPPacket & rtppack)
{
 int i;
 char * payloadpointer = (char *)rtppack.GetPayloadData ();
 // You can inspect the packet and the source's info here
 std::cout << "Got packet " << rtppack.
    GetExtendedSequenceNumber () << " from SSRC " << srcdat.
    GetSSRC () << std::endl;
 bool packermarker = rtppack.HasMarker ();
 if (headreceiveflag==0) 
    { if(rtppack.GetPayloadLength ()==50) headreceiveflag=1;
         else {printf("error");
           return (-1);}
     }
 
 if (!packermarker)
    {   memcpy(receivepointer,payloadpointer,rtppack.GetPayloadLength ());
      //for (i = 0; i < rtppack.GetPayloadLength (); i++)
    //*(receivepointer++) = *(payloadpointer++);
      receivepointer+=rtppack.GetPayloadLength ();
      receivepayloadlength += rtppack.GetPayloadLength ();
      visiflag = false;
    }
 else
    {memcpy(receivepointer,payloadpointer,rtppack.GetPayloadLength ());
     // for (i = 0; i < rtppack.GetPayloadLength (); i++)
    //*(receivepointer++) = *(payloadpointer++);
receivepointer+=rtppack.GetPayloadLength ();
      receivepayloadlength += rtppack.GetPayloadLength ();
      visiflag = true;headreceiveflag=0;
    }
}
 
struct frame_t{
    char header[5];
    int nbframe;
    double seqtimes;
    int deltatimes;
    int w;
    int h;
    int size;
    int format;
    unsigned short bright;
    unsigned short contrast;
    unsigned short colors;
    unsigned short exposure;
    unsigned char wakeup;
    int acknowledge;
    } __attribute__ ((packed)); 
 
int readm4v(int sock, unsigned char **buf,struct frame_t *headerframe,int statOn);
 
int Client (char *Ip, short port,int owidth, int oheight, int statOn);
 
static int videoOk = 0;
 
 
void init_SDL();
 
int main(int argc, char *argv[])
{  
    int statOn = 0;
       int owidth = 0;
    int oheight = 0;
         int i;
 
 uint16_t portbase, destport;
 uint32_t destip;
 std::string ipstr;
 int status;
sessparams.SetOwnTimestampUnit (1.0/90000);
 
/*********************************/
    char *AdIpPort;
    char AdIp[]= "000.000.000.000";
    unsigned short ports = 0;
    
    /*********************************/ 
 
 std::cout << "Enter local portbase:" << std::endl;
 std::cin >> portbase;
 std::cout << std::endl;
 
 
 
 transparams.SetPortbase (portbase);
 status = sess.Create (sessparams, &transparams);
 checkerror (status);
 
    for (i = 1; i < argc; i++) {
        /* skip bad arguments */
        if (argv[i] == NULL || *argv[i] == 0 || *argv[i] != '-') {
            continue;
        }
        if (strcmp (argv[i], "-w") == 0) {
            if (i + 1 >= argc) {
                printf ("No parameter specified with -w, aborting.\n");
                exit (1);
            }
            AdIpPort = strdup (argv[i + 1]);
            if(reportip(AdIpPort,AdIp,&ports) < 0)
            printf("error in port convertion \n");
            printf ("using Server %s Port %d \n",AdIp,ports);
    
        }
 
    }
 
Client(AdIp,ports,owidth,oheight, statOn);
 
 
}
 
int Client (char *Ip, short port,int owidth, int oheight, int statOn)
{   
    struct frame_t *headerframe;
    //struct client_t *messcallback;
    unsigned char *buf = NULL;
    int width,height;
    int jpegsize;
    int sock_client;    
    int run = 1; 
    int quit =1;
    int keypressed =0;
    int bpp = 3;
    
 
    struct tm *tdate;
    time_t curdate;
    char titre[21];
 
size_t outbytes;
SDL_Event event;
int fps = 25;
FILE *out;
int used_bytes;
int status;
unsigned char *out_buffer=NULL;
xvid_dec_stats_t xvid_dec_stats;
    int bufframenum;
unsigned char *mp4_buffer;
unsigned char *mp4_ptr;
int useful_bytes;
useful_bytes=0;
int i;
int fpsdelay;
uint32_t lastftick;
int paused=0;
    int resized=0;
 
int y;
 
uint8_t *outy,*outu,*outv,*op[3];
    mp4_buffer = (unsigned char *) malloc(BUFFER_SIZE);
    if (!mp4_buffer)
        goto free_all_memory;
    out_buffer = (unsigned char *)malloc(XDIM*YDIM*3/2); 
    if (!out_buffer)
        goto free_all_memory;
     
    init_SDL();
    sock_client = open_clientsock(Ip,port);
    headerframe=(struct frame_t*)malloc(sizeof(struct frame_t));
status = dec_init(1, 0);
    if (status) {
        fprintf(stderr,
                "Decore INIT problem, return value %d\n", status);
        goto release_all;
    }   
 
    /* set the start frame */
    i=0;
    fpsdelay=1000/fps;
    lastftick=SDL_GetTicks();   
    do 
    { 
    if((useful_bytes = readm4v(sock_client,&buf,headerframe,statOn)) < 0){
     printf(" No size !!! exit fatal \n");
        goto error;}
        
       mp4_ptr=buf;
 
    
        while (SDL_PollEvent(&event))
        {
            switch (event.type)
            {
                case SDL_VIDEORESIZE:
                     screen=SDL_SetVideoMode(event.resize.w, event.resize.h, 0, SDL_RESIZABLE | SDL_SWSURFACE);
                     rect.w=event.resize.w;
                     rect.h=event.resize.h;
                     if (paused)
                     {
                         resized=1;
                     }
                     break;
                case SDL_KEYDOWN:
                     if (event.key.keysym.sym == SDLK_SPACE)
                     {
                         paused=!paused;
                         break;
                     }
                     if (event.key.keysym.sym != SDLK_ESCAPE)
                     {
                         goto release_all;
                     }
                case SDL_QUIT:
                     goto release_all;
            }
        }
        
        if ((!paused)||(resized))
        {
            if (((SDL_GetTicks()-lastftick)>fpsdelay)||(resized))
            {
                lastftick=SDL_GetTicks();
                /* This loop is needed to handle VOL/NVOP reading */
                do{
                    /* Decode frame */
                          
                  used_bytes = dec_main(mp4_ptr, out_buffer, useful_bytes, &xvid_dec_stats);
                  printf ("the usedbytes is %d\n",used_bytes);
                    if(xvid_dec_stats.type==XVID_TYPE_VOL 
                     && (xvid_dec_stats.data.vol.width != XDIM
                         ||xvid_dec_stats.data.vol.height != YDIM))
                     {printf("panduan\n");
                        //reallocate bigger out frame
                        free(out_buffer);
                        XDIM = xvid_dec_stats.data.vol.width;
                        YDIM = xvid_dec_stats.data.vol.height; 
                        out_buffer = (unsigned char *) malloc(XDIM*YDIM*3/2);                
                        if (!out_buffer)
                             goto free_all_memory;
                     
                         //reallocate bigger yuv overlay
                          
                         SDL_FreeYUVOverlay(overlay);
                      overlay = SDL_CreateYUVOverlay(XDIM, YDIM, SDL_YV12_OVERLAY, screen);
                      if (!overlay)
                      {
                        fprintf(stderr, "Couldn't create overlay: %s\n", SDL_GetError());
                        exit(4);
                        }          
                     
                   }                
                    
                    if(used_bytes > 0) {
                        mp4_ptr += used_bytes;
                        useful_bytes -= used_bytes;
                        }
                }while (xvid_dec_stats.type <= 0 && useful_bytes > 0);            
             SDL_LockSurface(screen);
             SDL_LockYUVOverlay(overlay);
                outy = out_buffer;
                outu = out_buffer+XDIM*YDIM;
                outv = out_buffer+XDIM*YDIM*5/4;
                for(y=0;y<screen->h && y<overlay->h;y++)
                {
                    op[0]=overlay->pixels[0]+overlay->pitches[0]*y;
                    op[1]=overlay->pixels[1]+overlay->pitches[1]*(y/2);
                    op[2]=overlay->pixels[2]+overlay->pitches[2]*(y/2);         
                    memcpy(op[0],outy+y*XDIM,XDIM);
                    if(y%2 == 0)
                    {
                         memcpy(op[1],outu+XDIM/2*y/2,XDIM/2);
                        memcpy(op[2],outv+XDIM/2*y/2,XDIM/2);      
                 }
                }
             SDL_UnlockYUVOverlay(overlay);
             SDL_UnlockSurface(screen);
        
             SDL_DisplayYUVOverlay(overlay, &rect);
                
       
                if (resized)
                    resized = 0;
             }
          }
          SDL_Delay(10);
    } while (1 );
 
    useful_bytes = 0; /* Empty buffer */
 
release_all:
    
  if (dec_handle) {
      status = dec_stop();
        if (status)    
            fprintf(stderr, "decore RELEASE problem return value %d\n", status);
    }
 
error:
 
close_sock(sock_client);
free(buf);
free(headerframe);
SDL_Quit ();
 
 
free_all_memory:
    free(out_buffer);
free(mp4_buffer);
    
return 0;
}
int readm4v(int sock, unsigned char **buf,struct frame_t *headerframe,int statOn)
{
    
    int byteread,bytewrite;
 while (1){
           if (visiflag==true ) break;
              
usleep(10);
                     
                }
 
 
 
       memcpy(headerframe,receivebuffer,sizeof(struct frame_t));
    if(statOn)
        printf (" key %s nb %d width %d height %d times %dms size %d \n",headerframe->header,
        headerframe->nbframe,headerframe->w,headerframe->h,headerframe->deltatimes,headerframe->size);
 
    if(headerframe->size && !headerframe->wakeup){
    //if(headerframe->size){
            *buf=(unsigned char*) realloc(*buf,headerframe->size);
                    memcpy(*buf,receivebuffer+sizeof(struct frame_t),headerframe->size);
            /*if((byteread = read_sock(sock,*buf,headerframe->size)) < 0){
            printf("Seem server is gone !! try later \n");
            goto error;}
        */}
        //printf("buf read %d \n",byteread);
    if(headerframe->acknowledge)
        
        usleep(5000);
       printf("h");
 
      receivepayloadlength = 0;
      receivepointer = receivebuffer;
      visiflag=false;
    return ((headerframe->wakeup)?0:(headerframe->size));
 
//return (headerframe->size);
 
error:
return -1;
}
void init_SDL()
 
{
    if (SDL_Init (SDL_INIT_VIDEO) < 0)
    {    videoOk=0;
        fprintf (stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
        exit (1);
    }
     videoOk=1;
    atexit (SDL_Quit);
    screen = SDL_SetVideoMode (320, 240, 0, SDL_HWSURFACE 
                                          | SDL_DOUBLEBUF
                                          | SDL_ANYFORMAT
                                          | SDL_RESIZABLE);
    if (screen == NULL)
    {
        fprintf(stderr, "Couldn't set video mode: %s\n", SDL_GetError());
        exit(2);
    }
    if (0 == screen->flags & SDL_HWSURFACE)
    {
        fprintf(stderr,"Can't get hardware surface\n");
        exit(3);
    }
    SDL_WM_SetCaption ("SDL MultiMedia Application", NULL);       
    overlay = SDL_CreateYUVOverlay(XDIM, YDIM, SDL_YV12_OVERLAY, screen);
    if (!overlay)
    {
        fprintf(stderr, "Couldn't create overlay: %s\n", SDL_GetError());
        exit(4);
    }    
    //show the overlay status
    printf("Created %dx%dx%d %s %s overlay\n",overlay->w,overlay->h,overlay->planes,
           overlay->hw_overlay?"hardware":"software",
           overlay->format==SDL_YV12_OVERLAY?"YV12":
           overlay->format==SDL_IYUV_OVERLAY?"IYUV":
           overlay->format==SDL_YUY2_OVERLAY?"YUY2":
           overlay->format==SDL_UYVY_OVERLAY?"UYVY":
           overlay->format==SDL_YVYU_OVERLAY?"YVYU":
           "Unknown");
   rect.x=0;
    rect.y=0;
    rect.w=SHXDIM;
    rect.h=SHYDIM;
}
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品老司机| 99久久er热在这里只有精品15 | 国产精品亲子乱子伦xxxx裸| 亚洲欧洲一区二区在线播放| 一区二区三区高清| 秋霞午夜av一区二区三区| 成人黄页在线观看| 精品久久久久一区| 午夜精品久久久久久久久久| 不卡的电视剧免费网站有什么| 日韩一区二区三区免费观看| 亚洲国产欧美在线人成| 丁香六月综合激情| 久久综合av免费| 蜜桃精品在线观看| 欧美日韩视频第一区| 亚洲欧洲日韩av| 国产精品夜夜嗨| 欧美成人a∨高清免费观看| 亚洲一级二级三级在线免费观看| 成人午夜视频福利| 国产亚洲一区字幕| 国产精品一品视频| 日韩精品在线网站| 奇米精品一区二区三区四区| 欧美电影在线免费观看| 亚洲高清视频中文字幕| 欧美性生交片4| 一区二区免费看| 色综合久久久久综合体| 亚洲三级电影全部在线观看高清| 风流少妇一区二区| 国产精品网站在线| 成人久久视频在线观看| 国产女主播视频一区二区| 激情欧美一区二区三区在线观看| 欧美成人精精品一区二区频| 免费在线观看一区| 欧美变态tickle挠乳网站| 乱中年女人伦av一区二区| 日韩三区在线观看| 国产一区二区三区在线观看免费视频| 欧美mv日韩mv国产网站app| 精品一二三四在线| 久久久99久久| gogo大胆日本视频一区| 一区二区三区电影在线播| 在线看一区二区| 视频一区在线播放| 日韩免费电影一区| 国产精品影视在线| 综合久久一区二区三区| 欧美视频一区二区在线观看| 日韩va欧美va亚洲va久久| 欧美va亚洲va国产综合| 懂色一区二区三区免费观看| 亚洲美女偷拍久久| 91精品免费在线观看| 国产资源在线一区| 国产精品传媒在线| 欧美日韩精品欧美日韩精品一 | 狠狠狠色丁香婷婷综合激情| 国产三级欧美三级日产三级99| 成人一区在线看| 一区二区欧美视频| 日韩一区二区三区精品视频| 国产一区二区伦理片| 亚洲三级在线看| 欧美一区二区视频在线观看2020 | 91蝌蚪porny| 青青草国产精品亚洲专区无| 国产三级精品在线| 欧美日韩综合一区| 国产福利一区在线| 亚洲va欧美va人人爽| 久久久久久久国产精品影院| 91黄色小视频| 国产伦精品一区二区三区免费| 一区二区免费在线| 亚洲国产成人私人影院tom| 欧美日韩国产美女| 成年人国产精品| 久久国产免费看| 亚洲综合一区二区精品导航| 久久精品免费在线观看| 欧美高清你懂得| 成人国产视频在线观看| 日韩av网站在线观看| 亚洲日本va午夜在线电影| 欧美刺激脚交jootjob| 欧美亚洲国产怡红院影院| 成人性生交大合| 麻豆国产欧美日韩综合精品二区| 亚洲女爱视频在线| 亚洲永久精品国产| 国产精品丝袜在线| 久久亚洲一级片| 日韩欧美区一区二| 51精品国自产在线| 欧美影院一区二区| 色综合久久天天综合网| 成人免费福利片| 国产精品一区二区三区乱码| 麻豆精品一区二区综合av| 午夜电影网一区| 一区二区三区成人| 亚洲另类在线视频| 国产精品久久久久久久久免费桃花| 精品久久久久久亚洲综合网| 日韩一区二区精品| 欧美一区二区三区公司| 91精品国产色综合久久不卡电影| 欧亚一区二区三区| 日本高清不卡视频| 日本精品裸体写真集在线观看| 不卡av在线网| eeuss鲁片一区二区三区| 成人免费看的视频| 成人午夜视频福利| 99国产精品国产精品毛片| 波多野洁衣一区| 色吊一区二区三区| 欧美午夜精品久久久久久孕妇| 欧洲精品视频在线观看| 欧美日韩一二三| 日韩一级片在线播放| 欧美成va人片在线观看| 国产亚洲综合在线| 中文字幕一区二区在线观看| 亚洲蜜臀av乱码久久精品| 亚洲一区二区中文在线| 日韩中文字幕1| 久久成人羞羞网站| 国产999精品久久| av欧美精品.com| 在线观看日韩国产| 欧美一级搡bbbb搡bbbb| 久久网这里都是精品| 国产精品高潮呻吟| 亚洲一区欧美一区| 精品一区二区综合| 99re视频精品| 欧美日本在线视频| 久久综合九色综合欧美亚洲| 欧美高清在线视频| 一区二区三区视频在线观看| 日本女优在线视频一区二区| 精品午夜久久福利影院| 99国产精品久久久久久久久久| 欧美日韩在线直播| 国产亚洲综合在线| 污片在线观看一区二区| 国产在线播放一区三区四| 91欧美一区二区| 91精品国产综合久久香蕉麻豆| 国产欧美日韩另类一区| 亚洲综合精品自拍| 国产黄色91视频| 欧美日韩一区二区三区免费看| 久久精品免视看| 日韩中文字幕1| 91日韩一区二区三区| 欧美va亚洲va香蕉在线| **网站欧美大片在线观看| 免费高清不卡av| 在线亚洲精品福利网址导航| 久久久亚洲欧洲日产国码αv| 亚洲综合图片区| 国产高清精品网站| 欧美日韩国产一二三| 国产精品美女视频| 久久99国产精品麻豆| 欧美性色黄大片| 亚洲国产精品v| 久久精品av麻豆的观看方式| 欧美在线短视频| 亚洲色图.com| 国产麻豆精品theporn| 日韩一区国产二区欧美三区| 一区二区三区在线观看欧美| 国产成人精品亚洲日本在线桃色 | 久久久美女毛片| 日本三级亚洲精品| 欧美日本高清视频在线观看| 国产精品全国免费观看高清| 韩国午夜理伦三级不卡影院| 欧美伦理影视网| 亚洲综合无码一区二区| 99久久精品免费看国产| 欧美国产精品久久| 国产一区二区三区在线看麻豆| 91精品国产综合久久精品app| 亚洲理论在线观看| caoporen国产精品视频| 国产精品素人视频| 成人免费视频视频在线观看免费| 久久精品日产第一区二区三区高清版| 久久精品二区亚洲w码| 欧美xxxxx牲另类人与| 激情五月播播久久久精品|