JZ2440 mjpg-streamer学习笔记10-----自己写客服端_编译调试
1、编译调试
(1)将客户端程序上传到服务器
(2)进入到客户端目录,进行make操作
(3)出现错误解决错误
我们用到线程相关的结构体,所以要包含pthread.h这个头文件。
没有声明函数atol
看使用这个函数需要包含什么头文件
没有定义函数pthread_create,但我们明明包含了相关的头文件,用到创建线程,依赖于一个库,
因而需要在顶层makefile中,添加一个依赖的库文件pthread。
2、后续操作
(1)编译通过,生成mjpg-streamer-client应用程序
(2)在开发板运行mjpg-streamer软件,在虚拟机上通过无线网卡链接wifi热点。进入文本模式,输入用户名和密码,进入客户端路径,运行客户端,参数跟的是开发板的IP地址
(3)能看到视频数据,但是一瞬间,就卡住了。
我们要调试程序需要看他的打印信息,但是一运行程序,马上调用到了vga相关的操作,这样是看不到打印信息的。修改代码,暂时将vga操作的代码注释掉,先看打印信息,看问题出在哪里,找到问题后再将控制台打开。将清屏函数注释掉
修改crt.c里面的init函数
将vga相关的操作注释掉
在主函数中
(4)重新 make,运行客户端
查看打印信息
发送一个请求以后,就会收到服务器发过来的报文,报文
接下来接收视频数据,当接受到的数据是JPEG 数据,成功过转化,然后返回值是0,然后接收第二帧数据,不是JPEG 数据,返回值是-1,表示转换失败。然后出现段错误,然后程序就卡死啦。
(5)接下来寻找段错误是什么原因导致的
通过加打印的方式找出段错误出现的位置在哪里
最终发现在convert函数里面
进入Mjpeg2RgbConvert函数。
当接收到一帧图片不是jpeg格式,将执行以下if分支,在if分支里面将(实际像素数据空间)aucPixelDatas给释放掉了,第二次接收又要操作这个空间,但是这个空间已经被释放掉了,自然而然会引发段错误,因而要将
删掉,就可以把段错误给解决了。