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);
}

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

  1. vlc-android对于通过Live555接收到音视频数据包后的处理分析

    转载地址:https://blog.csdn.net/c_m_deng/article/details/8487456 通过ndk-gdb跟踪调试vlc-android来分析从连接到RTSP服务器并接 ...

  2. SOCKET通信中TCP数据包大小的确定

    MSS(maximun segment size)         最大分段大小,TCP有一个最大分段大小,用于通告对端每个分段中能发送的最大TCP数据量.MSS的目的是告诉对端其重组缓冲区大小的实际 ...

  3. 使用 WinSCP 连接到 VCSA 6.5 失败并显示以下错误:收到的 SFTP 数据包过大

    Symptoms 使用 WinSCP 连接到 vCenter Server Virtual Appliance 会出现类似以下内容的错误: Cause 由于vcsa默认的root账号shell环境是/ ...

  4. 【FFMPEG】基于RTP的H264视频数据打包解包类

    最近考虑使用RTP替换原有的高清视频传输协议,遂上网查找有关H264视频RTP打包.解包的文档和代码.功夫不负有心人,找到不少有价值的文档和代码.参考这些资料,写了H264 RTP打包类.解包类,实现 ...

  5. 交换机工作原理,收到一个数据包后交换机是如何处理的(实验加抓包详细了解)

    感受集线器 在基础课程里面了解过集线器的原理,那会没有太多的去做实验,这里我们使用eNSP来做一个实验,正好支持HUB这个设备. 这里使用192.168.255.1去ping 192.168.255. ...

  6. tcpdump使用详解及数据包分析

    tcpdump使用与数据分析 语法 tcpdump(选项) 选项 -A 以ASCII码方式显示每一个数据包(不会显示数据包中链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据(nt: ...

  7. 数据包从物理网卡流经 Open vSwitch 进入 OpenStack 云主机的流程

    目录 文章目录 目录 前言 数据包从物理网卡进入虚拟机的流程 物理网卡处理 如何将网卡收到的数据写入到内核内存? 中断下半部分软中断处理 数据包在内核态 OvS Bridge(Datapath)中的处 ...

  8. tcpdump 网络数据包分析工具

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...

  9. 自定义Udp/Tcp协议,通信协议Socket/WebSocket,IM粘包、分包解决等(2),ProtocolBuffer

    > 自定义Udp/Tcp协议/通信协议(Java/C):自定义构建和解析IM协议消息:IM自定义UDP通信协议   类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成 ...

最新文章

  1. linux强制删除文件夹命令 rm -rf
  2. Google开源OCR项目Tesseract训练(自己训练的记录,未成功)
  3. ssm把图片保存到项目中_项目中的图片跨域问题解决方式
  4. 使用 Spring Boot 快速构建 Spring 框架应用--转
  5. 60-400-240-使用-binlog-Canal使用文档md
  6. HashMap的底层原理 cr:csdn:zhangshixi
  7. 软件测试的金字塔体系--从1个中心到5个要素
  8. swift中闭包的循环引用
  9. ASsd固态测试软件数据,128G固态硬盘各项测试数据评测报告
  10. 数值计算实验1 Matlab基础实验
  11. 迪杰斯特拉算法(dijkstra)
  12. 机械键盘无冲测试软件,全键无冲/六键无冲可切换 键盘测试_狼派 X09暗影机械键盘_键鼠评测-中关村在线...
  13. java 货币符号_java使用Currency类获得指定国家的货币符号
  14. 易经64卦富含的人生哲理
  15. USACO 2022 US Open Contest, Bronze
  16. 微软文件共享服务器进程,Windows Server“8”– 将服务器应用程序存储转移到 Windows 文件共享...
  17. 火柴人小程序linux,推荐这3款射击类的火柴人小程序,一起冲冲冲吧!
  18. 学会Zbrush硬表面建模,造出属于自己的机甲模型
  19. 发现一款好用的在线项目管理工具(有免费版)
  20. 支持Tasker控制的app合集

热门文章

  1. VUE Element UI 父组件调用子组件方法变量,子组件使用父组件变量
  2. 湖南大学超级计算机中心 舒教授,史上最年轻的博士生导师兼教授诞生了,任职湖南大学,颜值还超高...
  3. 医学影像学对计算机要求大吗,医学影像学专业和医学影像技术学有什么区别?...
  4. MSSQL·查询T-SQL执行记录
  5. 最全面的行人重识别数据集汇总
  6. 微信小程序canvas绘制圆角矩形
  7. 梦幻诛仙key的存储过程语句
  8. 青岛二中高考2021成绩查询,青岛二中2018高考成绩
  9. 什么是意志动词和无意志动词
  10. 系统检测到您正在使用网页抓取工具访问_SEO优化:搜索引擎蜘蛛抓取异常,原来是这个原因!...