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

原创 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...................

WEBRTC视频网络传输到解码输出

一.  视频传输到解码 VideoCodingModuleImpl类其实并没有使用   函数调用次顺: VideoReceiveStream::DeliverRtp->RtpStreamReceiv...
  • doitsjz
  • doitsjz
  • 2016年12月21日 23:38
  • 1413

视频捕捉与网络传输vc源码

  • 2015年02月28日 12:26
  • 782KB
  • 下载

directshow显示h264视频与网络传输

  • 2011年01月27日 12:55
  • 2.76MB
  • 下载

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

ios没有直接得api用来封装传输rtp,但是经常有用到得接收过来得音视频数据,经过X264处理转换便可以封装为Rtp包进行直接发送。大家可以看代码: #include "rtpsession.h"...

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

简单的一个视频网络传输服务端 #include #include #include #include #include #include #include #include #inc...
  • lqrensn
  • lqrensn
  • 2012年10月18日 12:32
  • 740

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

转自:  http://www.devdiv.com/iOS_iPhone-_rtp_-thread-118648-1-1.html ios没有直接得api用来封装传输rtp,但是经...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:视频网络传输机制的设计(续)
举报原因:
原因补充:

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