linux jpeg视频传输四部曲之四

来源:互联网 发布:端口查看器 编辑:程序博客网 时间:2024/04/29 00:27

接上一篇

(4)用多线程的方式实现连续发送jpeg格式的数据

pthreade编程的基本知识很简单,就是几个函数,大概看看就知道是什么意思,也就会用了。GNU/Linux编程指南那本书里面讲的太笼统,不如看一些网上的资料比如一个哥们写的《跨平台多线程编程》。

知道了 pthread 编程的基本知识,下面就要考虑怎么把它们用在我的程序里面了。其间,我考虑的问题主要有以下几个:1> 分为几个线程——按照之前的程序书写结构,我把它分成了两个线程,即RGB数据获取及其jpeg数据编码线程和jpeg数据发送线程。2>线程同步方法——因为mutex的例子比较多,比较容易理解,我便选择了使用mutex。3>线程的数据共享和保护,上面说了,同工mutex来实现线程同步,但是由于mutex本身的特性(特指快速mutex),即调用想成被阻塞直到拥有mutex的线程解锁为止。但是对于上面两个线程的共享数据jpeg_data,在各自线程中对他们的处理都是线程运行时间的主要部分,因此如果直接使用一个jpeg_data缓冲区,那样线程的运行将会长时间处在阻塞状态,为此我定义了一个全局jpeg_data缓冲区,和两个线程jpeg_data缓冲区(实际只用了一个),线程中的处理针对线程缓冲区进行,阻塞执行的部分只是完成线程缓冲区和全局缓冲区之间数据的拷贝。

不过其中要注意一个问题,就是要先开启jpeg数据获取线程后开启jpeg数据发送线程,而且数据获取线程开启后还得sleep(1)一下,以使全局数据缓冲区中保存的是获取的jpeg数据,而不是之前初始化的数据。

这种实现方式的效果好像还可以,大概每秒八九帧的样子,凑活着看了。想再提高速度的话可能得用mpeg-4了。是的 I will do it !

原创粉丝点击