视频网络传输机制的设计(续)

原创 2006年06月09日 11:05:00

       线程对系统内存的开支比进程要少,在视频Server端,采用两个线程在后台分别完成采集处理和网络传输的工作,两个线程的协调工作靠struct videodev *dev,所以在程序设计中,必须把这个数据结构设为全局变量。

      首先看一下上述数据结构中对两个线程工作协调相关的参数:

       unsigned char* pFramebuffer:mmap返回的数据指针,指向采集进来的原始数据;

       unsigned char* ptframe[4]:指向四个buffer缓冲数组,存放已压缩完成的数据;

       int lock[4]:对四个ptframe的标示,0表示可以写入视频压缩数据,1表示可以发送到网络,两者互斥。

       接下来描述一下整个代码运行的过程:

       1. 初始化:1.1 分配ptframe的大小,其大小为:sizeof(struct frame_t)+width*height*3;其中struct frame_t 描述了压缩数据的各个特征参数,如w*h,size,format等;  1.2 将2个frame的数据采集保存在数据结构videombuf中,这两个frame的指针分别为pFramebuffer和pFramebuffer+offset,offset为一个frame的大小;1.3 对4个lock置0;

       2. 采集开始:具体见上一篇文章,启动采集线程,做一个big loop,简单说:如果没有网络发送的线程在跑,采集线程不停的把pFramebuffer和pFramebuffer+offset指向的数据压缩后依次存放到ptframe+sizeof (struct frame_t)的位置,大小为frame压缩后的大小;注意数据压缩并存放到ptframe+sizeof (struct frame_t)时必须上线程互斥锁;

        3. 网络传输的线程:线程打开之前sock套接口都已经打开,传到线程函数的参数为accept后产生的新的socket描述符(假设传输协议为标准TCP/IP协议),传输过程相对比较简单,从prframe[0]开始查看,查看ptframe[0]是否写完,ok则将lock[0]置1;根据struct frame_t的size参数,发送ptframe[0]+sizeof (struct frame_t)数据到网络,发送完成后解锁,然后继续下一个ptframe[],and so on...............

To be continue for RTP/RTCP...................

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

简单的一个视频网络传输服务端

简单的一个视频网络传输服务端 #include #include #include #include #include #include #include #include #inc...

封装音视频流为RTP包来网络传输

转自:  http://www.devdiv.com/iOS_iPhone-_rtp_-thread-118648-1-1.html ios没有直接得api用来封装传输rtp,但是经...

简单视频网络传输客户端

简单视频网络传输客户端 #include #include #include #include #include #include #include #inc...

通信工具的音视频的网络传输实现

当下比较流行的即时通信工具,比如MSN,QQ等都实现了视音频的功能,通过视频,音频,我们可以更好的和朋友通过网络进行沟通,本文通过DirectShow技术模拟QQ实现了视频和音频的采集,传输,基本实现...

android的实时视频网络传输的知识与概念

在思考如果从服务端获取视频流实时在客户端播放如何实现 思考一番 再翻阅一些资料发现不是那么简单  现在把一些相关概念和知识总结一下(里面有copy精华) 做一下分享 RTSP...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)