基于DirectShow的嵌入式Linux视频监控系统
时间:2026-01-23
时间:2026-01-23
基于DirectShow的嵌入式Linux视频监控系统
文章编号!!""#$%&’#"#""!#"#$""%&$’&
基于!"#$%&’()*的#实用设计#
嵌入式+",-.视频监控系统
赵石磊!严国萍
"华中科技大学电子与信息工程系!湖北武汉(&)"!(#
$摘
要%提出一套完整的嵌入式*+,-.视频监控系统!被监控端建立在嵌入式*+,-.系统下!监控端系统建立在/+,0123系统
下!基于4+56789:12技术完成!并介绍被监控端涉及的多线程问题和监控端的4+56789:12技术和双缓冲技术"$关键词%4+56789:12技术#多线程#互斥锁#双缓冲队列技术#过滤器$中图分类号%;<=!!
$文献标识码%>
/,012$33$3+",-.4"3$)51),"&)#",6’78&91:;893),<"#9%&’()*
?@AB9:+$C6+&DAEF-1$G+,H
"!"#$%&’"(&)*+,"-&%)(.-/01(*)%’2&.)(+(3.(""%.(3&45267)(38(.9"%/.&:)*;-."(-"0<"-7(),)3:&=572(>?@@A>&B7.($’
$/28&#;%&%;:+3GIG65+,8510-763I,6JK60060J-C8+J60+I3-5L6+CCI,763M386JKI3601,4+56789:12867:,1C1HMN;:6365L653+06+3
K-+C81,8:6*+,-.3M386JI,08:67C+6,83+06+3K-+C81,8:6/+,01233M386J8:I8+3I771JGC+3:60KM4+56789:12867:,1C1HMN;:+3GIG65JI+,CM+,8510-7638:6J-C8+8:56I0G51KC6J+,L1CL60I88:6365L653+06&8:64+56789:12867:,1C1HMI,08:601-KC6OK-PP65C+38867:,1C1HM+,L1CL60I88:67C+6,83+06N
$=97*)#>8%4+56789:12(J-C8+8:56I0(J-86.C17Q(01-KC6$K-PP65C+38867:,1C1HM(P+C865
#
引言
立的数据结构类!
笔者提出了一套基于4+56789:12技术的嵌入式*+,(
7CI33R4I8IA0J+,Z-.视频监控系统)本系统包括客户端和服务器端)客户G51867860[
端也就是监控端&包括视频数据的接收*解码播放&它运R;MG60<85*+38\R<85*+38&<U<]FX^<AR_‘4I8I*+38(行在<R机上&基于4+56789:12技术&用SR编写而成(服R;MG60<85*+38\R<85*+38&<U<]FX^<AR_‘<11C*+38(务器端也就是被监控端&包括视频的采集*视频的编码压G-KC+7[
缩*视频的网络发送&服务器端系统运行在ATU嵌入式R4I8IA0J+,"’(试验版上&用*+,-.R编写而成)
L+58-ICaR4I8IA0J+,"’(
L1+0968VC-3:+,H"K11C+,VC-3:b85-6’(=
系统设计与实现
K11Cc3VC-3:+,H"L1+0’(?@A客户端dd*+38I0J+,+385I86+,8T6368*+38"L1+0’(=N#N#
准备工作
+,8F68*+389+e6"L1+0’(
从网络上接收压缩的图像数据&为避免网络抖动的
<U<]FX^<AR_F684I8I>-PP65"L1+0’(
影响&需要进行缓冲&为此&建立了一种专门的数据结构+,8T6C6I364I8I>-PP65"<U<]FX^<AR_G4I8I’("R4I8IA0J+,’&让接收到的数据都先转换成此数据结<U<]FX^<AR_F68/5+86>-PP65"L1+0’(
构&其原理是利用双缓冲队列技术建立两个队列!一个是+,8T6C6I36/5+86>-PP65"<U<]FX^<AR_G4I8I’(空闲的缓冲队列<11*+38&用于接收存放数据(另一个是f
尚未处理的数据缓冲队列4I8I*+38下面是接收前的准备工作&等待后续V+C865读!
<U<]FX^<AR_G4I8IbJ^G4I8I*+38O‘F68/5+86>-PP65"’(dd取得取)当91-576V+C865从网上接收到数据后&从<11*+38队数据缓冲区地址
列的头上取出一个缓冲块&存放数据&然后将这个缓冲块G4I8Ib,62U<]FX^<AR_(dd分配数据缓冲区
加入到4I8I*+38的尾部&等待后续V+C865读取&而在9GC+8(
=NXN=数据的接收
865要求读取时&91-576V+C865会从4I8I*+38队列的头上构建完客户端系统中所用到的数据结构后&就开始
取出一个缓冲块&读取数据&再将读完的缓冲块加到
数据的接收)笔者在RU60+I917Q68RC+6,8[[T676+L+,H*11G<11*+38的尾部&等待再一次的数据接收WXY)下面是笔者建
函数中实现了视频原始数据的接收&
在本函数中完成了
万方数据
!"
基于DirectShow的嵌入式Linux视频监控系统
数据缓冲区的分配!数据的接收及数据格式的转换"下面是接收数据的关键代码#
!"#$%&’$#()"*+’,%-#’.,//0’*’#!#.12""3$!"#$%4#.,.5’,67&
#.,.&819:3’;7&#.,.<(,(2’.;7&
*=(5>?@@A8#B’"@’&)CDEFG<F0%H&IFCJDIG%KD)LMFN&
O=#-’’PD>0’*’#!#.1%
4
I&)CDEFG<F0
3&81;’I&)CDEFG<F0%>?@@&
.&819:3’;3&81QR.&819:3’&.<(,(2’.;3&81QR.<(,()#B’&#@’.<(,(2’.R7%4
8O#,*=’.&819:3’%4
*(8’<G9GD&F<LG/
#@’PD2"*(-S#-’%4
PD2"*(-S#-’QRT5#,’’>?@@!&IFCJDIG%KD)LMF%&U
#@’PD3<(,(2#8,%4
I&IFCJDIG%K
3<(,(;PD3<(,(2#8,QR
C’,T5#,’V?@@’5’%&
#@’3<(,(;;WX22YYPD3<(,(2#8,QR
C’,2#8,)#B’’%ZIG%KD&G[D%\XW9%]]
4
3<(,(6.’O&IFCJDIG%K&U
#@’3<(,(^6WX22%4
P’P*3:’3<(,(!>?@@!.<(,(2’.%&PD3<(,(2#8,QR0’-’(8’T5#,’V?@@’5’3<(,(%&U
PD$O0’*!%"?.,HH&
#@’’PD$O0’*!%"?.,R6IG%KDLWL9D%\XW9%
YY
^PD>C5(3=),(5,’$%
]]当接收到的包的数量达到IG%KDLWL9D%\XW9时!则开始播放
4
__)’,F!’.,’PD3<(,(2#8,QRPD=V?@F."?1=%&PD>C5(3=),(5,’$;,5?’&UU>5’(+&UU
#@’PD3<(,(2#8,%4
PD3<(,(2#8,QR)’,S-?8=#.1’%&
!"
!""!年第"#卷第#期!总第!$!期
"
万方数据
UU
‘aJab数据的解码播放
上一篇:建构筑物消防培训气体灭火系统