mjpg-streamer学习笔记10-----自己写客服端_编译调试

1、编译调试

(1)将客户端程序上传到服务器

(2)进入到客户端目录,进行make操作

(3)出现错误解决错误

我们用到线程相关的结构体,所以要包含pthread.h这个头文件。

mjpg-streamer学习笔记10-----自己写客服端_编译调试_第1张图片

没有声明函数atol


看使用这个函数需要包含什么头文件


没有定义函数pthread_create,但我们明明包含了相关的头文件,用到创建线程,依赖于一个库,


因而需要在顶层makefile中,添加一个依赖的库文件pthread。


2、后续操作

(1)编译通过,生成mjpg-streamer-client应用程序


(2)在开发板运行mjpg-streamer软件,在虚拟机上通过无线网卡链接wifi热点。进入文本模式,输入用户名和密码,进入客户端路径,运行客户端,参数跟的是开发板的IP地址

mjpg-streamer学习笔记10-----自己写客服端_编译调试_第2张图片

(3)能看到视频数据,但是一瞬间,就卡住了。

我们要调试程序需要看他的打印信息,但是一运行程序,马上调用到了vga相关的操作,这样是看不到打印信息的。修改代码,暂时将vga操作的代码注释掉,先看打印信息,看问题出在哪里,找到问题后再将控制台打开。将清屏函数注释掉

mjpg-streamer学习笔记10-----自己写客服端_编译调试_第3张图片

修改crt.c里面的init函数

将vga相关的操作注释掉

mjpg-streamer学习笔记10-----自己写客服端_编译调试_第4张图片

在主函数中


(4)重新 make,运行客户端


查看打印信息

发送一个请求以后,就会收到服务器发过来的报文,报文mjpg-streamer学习笔记10-----自己写客服端_编译调试_第5张图片

接下来接收视频数据,当接受到的数据是JPEG 数据,成功过转化,然后返回值是0,然后接收第二帧数据,不是JPEG 数据,返回值是-1,表示转换失败。然后出现段错误,然后程序就卡死啦。

mjpg-streamer学习笔记10-----自己写客服端_编译调试_第6张图片

(5)接下来寻找段错误是什么原因导致的

通过加打印的方式找出段错误出现的位置在哪里

最终发现在convert函数里面

mjpg-streamer学习笔记10-----自己写客服端_编译调试_第7张图片

进入Mjpeg2RgbConvert函数。

当接收到一帧图片不是jpeg格式,将执行以下if分支,在if分支里面将(实际像素数据空间)aucPixelDatas给释放掉了,第二次接收又要操作这个空间,但是这个空间已经被释放掉了,自然而然会引发段错误,因而要将

删掉,就可以把段错误给解决了。

mjpg-streamer学习笔记10-----自己写客服端_编译调试_第8张图片


你可能感兴趣的:(mjpg-streamer)