下载此文档

IPCam播放器端开发 2015.9.12.pptx


文档分类:IT计算机 | 页数:约27页 举报非法文档有奖
1/27
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/27 下载此文档
文档列表 文档介绍
IPCam播放器端开发
1:视频传输rtp。(缓冲机制)
2:人脸识别
3:MFC多窗口播放
视频传输rtp
这部分主要说明下从rtp接收数据以后到送往解码器的处理过程。
如果每接收一帧,就把这帧送往解码器,解码显示,就会出现花屏。造成这种现象的原因主要在于并不是所有采集的帧都送往解码器。
解决这种问题主要是采用双线程和缓冲机制。
丢帧的原因
如果接收和解码在一个线程中,那么会遇到一个问题就是如果解码一个较大的帧(比如一个I帧)所花的时间内接受2个较小的帧(P帧或B帧)。这时就只能保存一个帧,从而出现丢帧的问题。
举例说明下:
IPPPPPP
如果第一个P帧丢失,第二个P帧以第一个P帧做参考,因此第二个P帧花屏。
双线程,缓冲区
缓冲区采用循环队列的方式。
双线程: 一个线程往缓冲区里面放数据,一个线程从缓冲区里面取数据并解码。
判断缓冲区是否满的方式
1:牺牲存储空间
2:flag标记
注意:缓冲区需要存储每个帧的长度
缓冲区的访问
缓冲区互斥访问,然而互斥访问就有一个问题那就是读和写会占据一定的时间,不能同时访问。(丢帧)
采用event(事件)(缓冲区发散)。
如果解码一个很大的帧,解码线程需要花相当多的时间,这时接收数据线程传来2个event,然而传给解码进程的只有后面一个event,那么就有一帧数据永远无法从缓冲区取出来
采用信号量semaphor可以解决以上问题。接收线程每次往缓冲区里面存一个数据,,只要有数据解码线程就可以一直取,没有数据,那么解码线程阻塞等待,这样可以解决缓冲区发散的问题。
帧的存储和提取方式
存储帧大小时
Size为一帧的大小
FirstBit = size& 0xff;
SecondBit = (size>>8) & 0xff;
取帧大小时
Size=BufQue[tail] |BufQue[(tail+1)%BUF_SZIE] << 8 | BufQue[(tail+2)%BUF_SZIE] << 16 |BufQue[(tail+3)%BUF_SZIE] << 24
存储H264码流时一个小插曲
如果写文件的时候以a+,ab+,w+等方式打开文件,在写文件的时候会自动将0A转化为0D0A,这时就算发送端发送数据无误,写文件的时候也会出错。解决方式很简单。以wb+方式打开文件,这样0A就不会转化为0D0A了。
人脸识别
人脸识别主要包括人脸检测和识别2个部分。
人脸检测:Haar分类器
Const char* cascade_name = "../data/haarcascades/haarcascade_frontalf
";//分类器所在地址
CvHaarClassifierCascade* cascade =
(CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );//加载分类器
IplImage* img = cvLoadImage(“d:\\”,-1);//加载位图
IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 );
//创建一个灰度图
small_img = cvCreateImage( cvSize( cvRound (img->width/scale),cvRound (img->height/scale)),8, 1 );
// 建立缩小的图片,加快检测速度
//cvRound (double value) 对一个double型的数进行四舍五入,并返回一个整型数!
cvCvtColor( img, gray, CV_BGR2GRAY );
//转成灰度图像,Harr特征基于灰度图
cvResize( gray, small_img, CV_INTER_LINEAR );
//改变图像大小,使用双线性差值
cvEqualizeHist( small_img, small_img );
//变换后的图像进行直方图均值化处理
CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, , 2, 0, cvSize(30, 30) );
//将人脸信息保存在faces中
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
//获得第i个人脸所在的矩形区域
cvSetImageROI(small_img,*r);
//基于给定的矩形设置图像的ROI(感兴趣区域
c

IPCam播放器端开发 2015.9.12 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数27
  • 收藏数0 收藏
  • 顶次数0
  • 上传人分享精品
  • 文件大小531 KB
  • 时间2017-11-17