Socket收到MJPEG视频数据包,如何查找FFD8和FFD9?

xiaoxiao2021-02-28  94

Socket接收到的视频数据包,都存储到source.txt文件中, 然后读这个文件,找FFD8和FFD9之间的数据,写入dest.jpg文件中; 下面的算法不知道是否正确,查看dest.jpg文件看到不清楚。。。。 //保存接收到的MJPEG流数据包     char   Dest[3000]; //存储接收到的数据包           nRet=0; //接收到的数据包长度 FILE* fp;  //写文件 fp= fopen("source.txt", "wb"); while(1 == bFlag)         {    nRet = recv(hsocket,(LPSTR)Dest,sizeof(Dest),0);         if(nRet>0)  { Dest[nRet]=0; //添加结束标记 } if (NULL != fp) { fwrite(Dest, nRet,1, fp); } Sleep(1); } //while(1 == bFlag) fclose(fp); //从文本文件中读FFD8和FFD9之间的数据,保存到一张图片中 #define MAX_SIZE  1024*500 void CIPVideoDlg::OnButton5()  { unsigned char chBuf[MAX_SIZE] = {0};     unsigned char chBegin[2] = {0xFF,0xD8};     unsigned char chEnd[2] =   {0xFF,0xD9};     int iLen = 0;     int iBegin = 0;     int iEnd = 0;     FILE* fp = fopen("source.txt", "rb+"); //读写方式打开二进制文件     if (fp != NULL)     {         fseek(fp, 0, SEEK_END); //文件指针定向到文件结尾         iLen = ftell(fp);       //获取文件长度           fseek(fp, 0, SEEK_SET); //定位到文件开始位置         fread(chBuf, 1, iLen, fp);         int ioffset = 0;        //偏移量,一次移动两个字节         while (1)         { //查找 FF D8             if (!memcmp(chBuf+ioffset, chBegin, 2))             {                 iBegin = ioffset;             } //查找 FF D9             if (!memcmp(chBuf+ioffset, chEnd, 2))             {                 iEnd = ioffset;                 break;             }             ioffset += 2;         }     }     fclose(fp);     fp = fopen("dest.jpg", "wb");     if (NULL != fp)     {         fwrite(chBuf+iBegin, iEnd-iBegin+2,1, fp);     }     fclose(fp); }
转载请注明原文地址: https://www.6miu.com/read-61853.html

最新回复(0)