解码控件开发说明文档.docx
- 文档编号:203843
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:26
- 大小:28.98KB
解码控件开发说明文档.docx
《解码控件开发说明文档.docx》由会员分享,可在线阅读,更多相关《解码控件开发说明文档.docx(26页珍藏版)》请在冰点文库上搜索。
解码控件开发说明文档
文档说明书
WDMMSDK版本号:
1.0.7.0更新日期:
2011.7.8
1.前言
该SDK中负责从网络上接收流媒体数据并进行解码和播放,适合于网络多媒体处理中不同应用的一套SDK。
可选择的开发工具有:
VC,VB,javascript,vbscript。
该控件WDMMSDK.dll(SDK)在进行开发和使用之前首先进行注册,要支持MPEG4视频解码要保证在WDMMSDK.dll文件的同级目录下要增加videocodec目录并且把MPEG4的解码库mpeg4codec.dll拷到目录下(该动态连接库不需要注册),也可以拷到和控件WDMMSDK.dll同一目录下。
说明:
该sdk为MPEG2/4解码控件,其中WDMMSDK.DLL为解码控件,需要注册才能使用,该控件支持了MPEG2视音频的解码,同时该控件可以自动加载其他视频压缩格式的解码库,其中视频解码库放置的目录为:
控件WDMMSDK.DLL所在的文件目录下的videocodec文件夹里(该文件夹内的解码库不需要注册)或者控件WDMMSDK.DLL所在的文件目录下。
注意:
1)要保证wdmmsdk.dll在全英文的目录下;
2)同时用多个控件解码时候,最多只能有一个控件播放音频,其余都要关闭音频播放,否则可能访问声卡冲突,出问题。
2.接口
1)Connect
longConnect(BSTRurl,VARIANTreserver)
接口功能:
连接一个视频源
参数说明:
●url:
BSTR,视频源的URL地址,格式如下:
a.file:
//文件地址,如:
file:
//c:
\test.mpg
b.udp:
//udp地址:
端口号,如:
udp:
//192.168.0.21:
8000
c.tcp:
//tcp地址:
端口号,如:
tcp:
//192.168.0.21:
8000
d.disk:
//e:
e.remote:
//地址:
端口,如:
remote:
//192.168.0.22:
4000
f.relay:
//relay服务器地址:
返回视频数据端口@视频源地址:
视频源端口|转发的组播地址[可选],如:
relay:
//192.168.0.22:
4000@225.0.0.1:
4500|225.0.1.2
g.http:
//地址:
端口号/stream/n,:
端口号可选,如果不加端口号,默认为80端口,地址可以是IP地址,也可以是机器名,n是指设备的第n路视频,如:
http:
//192.168.0.21:
8000/stream/1,http:
//192.168.0.21/stream/1,:
8000/stream/1等都合法。
h.以上的URL之一[空格]–audio=MP2@以上URL之一,视频和音频分开传输第一个URL传视频,第二个URL传音频,目前单独传输的音频只支持MpegAudioLayer2,以后会扩展。
例如:
http:
//192.168.0.99:
6100/stream/1-audio=MP2@udp:
//225.1.1.5:
4005
udp:
//225.1.1.4:
4001-audio=MP2@udp:
//225.1.1.5:
4005
为了尽快解出图像,可以用URL+MUXTYPE:
TS[PS,VES]指定媒体流的类型,和下面reserver定义一致,也就是说,reserver里的很多参数可以在URL里输入,而不必用reserver传入。
如果不指定MUXTYPE,控件会自动分析码流。
●reserver:
VARIANT,开始连接的选项,格式为:
选项1:
参数+选项2:
参数+……+选项n:
参数,选项支持如下:
1.MUXTYPE:
TS[PS,VES,PES],目前参数只能是TS、PS或者VES流,该选项指定视频流的复用类型,当使用该选项时,当时接收的视频源地址可以没有数据,而解码立即返回,解码软件处于等待状态,注:
当打开的视频源地址不是UDP模式时候无效;
2.RECFROM:
URL,url为ip地址,如192.168.0.2,该选项表示在接收视频数据时使用了recfrom的过滤功能,指定只对该ip地址(参数传入)编码器的视频数据进行解码而避免多个视频源冲突,参数有几个特殊值:
0.0.0.0表示不进行过滤,它的效果等同于没有该选项,255.255.255.255表示保留最后一次设置的过滤地址。
(注:
在每次连接的时候假如没有该选项或者选项为0.0.0.0则不采取过滤功能,以前设置的无效。
在连接后可以通过SendCommand函数改变过滤地址,详情请看函数的MPLAYER_CMD_PEEK命令);
3.RECTIMEOUT:
n,表示进行UDP/HTTP连接开始要等待数据的时间,假如超过该等待时间没有收到数据则Connect失败,不进行解码,如果不指定超时则缺省值是5秒,n表示等待的时间,单位为秒,n大于等于0有效,n等于0表示不做超时处理,永远等待。
注:
在配置文件中当有选项UdpTimeout且配置的时间大于0时候取配置超时,换句话说:
配置文件的配置优先级大于连接选项;n等于0 时候要指定MUXTYPE,否则只有等收到数据Connect才返回,如果没有数据则应用程序处于挂起状态,没有反应。
4.SHOT:
path,表示连接成功后立刻进行抓拍,path为抓拍文件路径。
返回值:
long型,返回执行的结果,0表示执行成功,其它表示失败或者警告,如MSG_E_INOPEN,MSG_E_DEMUX,表示的意义请查看OnMPMessage返回的消息;Connect方法在等到有数据或者超时后才返回,在等待过程中应用程序处于挂起状态。
如果指定MUXTYPE同时指定RECTIMEOUT为0,马上返回。
如果没有指定MUXTYPE同时指定RECTIMEOUT为0,则Connect方法一直等到有数据才返回,在等待过程中应用程序处于挂起状态。
2)Disconnect
HRESULTDisconnect()
接口功能:
断开连接。
3)GetInfo
HRESULTGetInfo(longID,VARIANTparam,[out]VARIANT*retval)
接口功能:
获取信息,包括视频,音频,SDK等信息
接口参数:
ID:
long,获取信息的ID号,在以下表1中描述;
param:
VARIANT,传入的参数,在表1中描述,它由ID值决定;
表1GetInfo中各个参数描述
#defineMPLAYER_INFO_INPROTOCAL0x02010100//获得现在支持的输入模块的协议,用BSTR表示,两个协议之间用“+”隔开,该版本返回file+disk+udp
#defineMPLAYER_INFO_DEMIMETYPE0x02010200//获得该版本支持的文件类型,用BSTR表示,如:
*.MPG等,中间用“+”隔开,该信息可以用在打开文件的对话框里,以便过滤特定的文件后缀
#defineMPLAYER_INFO_DEPROTOCAL0x02010201//获得该版本支持的媒体类型用BSTR表示,如MPEG1/2,MPEG4等,中间用“+”隔开
#defineMPLAYER_INFO_TOTALTIME0x02010202//返回该播放文件的总播放时间,用long表示,单位为秒,当返回小于等于0的时候表示该媒体流不能跳转,对于文件是否能够跳转应该以MPLAYER_INFO_SEEKABLE的信息为准,详情请查阅下面文档
#defineMPLAYER_INFO_VDPROTOCAL0x02010300//获得该版本支持的视频格式,规定如上
#defineMPLAYER_INFO_ADPROTOCAL0x02010400//获得该版本支持的音频格式,规定如上,BSTR表示,中间用用“+”隔开
#defineMPLAYER_INFO_CURTIME0x02060000//获得当前的播放时间描述,用long表示,单位为秒
#defineMPLAYER_INFO_SEEKABLE0x02010203//查询该播放文件的是否能拖动,返回BOOL,ture表示能够拖动,否则不能。
对于有些格式的音视频数据没有随机播放的能力,所以由MPLAYER_INFO_TOTALTIME返回的值小于或者等于0并不能完全的决定该视频源是否能够跳转
#defineMPLAYER_INFO_SPULANG0x02010600//获得子图像流的流号和所对应的语言种类信息,返回BSTR数组,共32项,假如该ID号没有对应的子图象则返回””,利用该信息可以选择某一个子图象,只要调用MPLAYER_CMD_SPUCH命令传入对应的ID值既可。
#defineMPLAYER_INFO_ALANG0x02010601//获得音频流的流号和所对应的语言种类信息,返回BSTR数组,共8项,假如该ID号没有对应的音频流则返回””,利用该信息可以选择某一个音频流,只要调用MPLAYER_CMD_AUDIOCH命令传入对应的ID值既可
#defineMPLAYER_INFO_PEEKADDR0x02020005//返回当前视频源过滤的地址,返回过滤的IP地址如:
192.168.0.111
#defineMPLAYER_INFO_SPEED0x02030001//返回该媒体类型能支持的播放速度,返回long数组,播放速度是以64的倍数标志,正负号表示向前或者向后,-号表示向后播放,+表示向前播放,如64表示向前一倍速播放,-128向后2倍数播放
#defineMPLAYER_INFO_DVDFLAG0x02030002//返回DVD标志,返回bool,true表示该格式为DVD视频格式,否则不是,对于目前只有DVD格式才有多种子图象(字幕)和多种音频流
#defineMPLAYER_INFO_PAUSEFLAG0x02030003//返回暂停标志,返回BOOL,true表示暂停,否则表示播放
#defineMPLAYER_INFO_CURSPEED0x02030004//返回当前的播放速度,返回long值,速度的规定与MPLAYER_INFO_SPEED规定一样
#defineMPLAYER_INFO_CUR_PROCESS0x02030005//返回当前的播放进度,返回long值,进度的为百分比,0-100,如果返回-1,表示不能表示进度和跳转(网络视频)
#defineMPLAYER_INFO_CURSUB0x02040001//获得当前选择的音频流,返回long,对应于ID值
#defineMPLAYER_INFO_CURAD0x02050000//获得当前选择的音频流,返回long,对应于ID值
#defineMPLAYER_INFO_VIDEOMODE0x02080001//获取当前视频显示模式,返回long,-1,表示没有视频播放,0:
强制半场,1:
强制全场,2:
自动,这时效果最好,但可能增加处理量
#defineMPLAYER_INFO_PROBEFLAG0x02080002//获取是否显示探针标志,返回BOOL,true表示使用探针,否则不使用探针,探针表示对某个范围进行运动侦测,假如有运动存在则返回MSG_N_MOVE消息
#defineMPLAYER_INFO_TOTALFRAME0x02010204//返回当前播放文件的总帧数,long型
#defineMPLAYER_INFO_CURFRAME0x02060001//获得当前的播放帧数,long型
#defineMPLAYER_INFO_PLAYING0x02040003//获取控件播放信息可,返回long型,由低位到高位,第1位:
是否接收数据(只限UDP方式)(0,不接收;1,接收);第2位:
是否正在播放视频(0,不播放;1,播放);第3位:
是否处于暂停状态(只对文件播放有效)(0,不暂停;1,暂停);第4位:
是否设定了录像标志(不区分是否接收到数据)(0,不录像;1,录像);第5位:
是否处于禁音状态(0,不禁音;1,禁音);
返回值:
retval:
VARIANT,存放返回的信息;
4)SetCallbackOwner
BOOLSetCallbackOwner([in]longid,[out]VARIANT*ret)
接口功能:
设置callback的标志,区分各个流的视音频数据。
5)SendCommand
BOOLSendCommand([in]longid,[in]VARIANTparam,[out]VARIANT*ret)
接口功能:
向SDK发送控制命令,如设置播放速度,录像等命令
接口参数:
id:
long,表示控制类型,在表2中描述
param:
VARIANT,表示控制参数,在表2中描述
返回值
ret:
返回:
BOOL,true表示命令被执行,false表示命令执行失败或者没有被执行
表2SendCommand中各个参数描述
#defineMPLAYER_CMD_REG0x01010001//注册控件,param
类型为BSTR的注册码
#defineMPLAYER_CMD_ENABLEMEMU0x01010002//是否需要右键菜单,param
类型为bool,true表示使用系统菜单,false表示不使用系统菜单
#defineMPLAYER_CMD_INITFRAME0x01010003//设定缓冲帧数,该Command必须在构造完成之后,Connect接口调用之前使用,param类型为VT_I2,取值范围为1至30,若设置的帧数低于1,则系统设定为1,若帧数超过30,则系统设定为30,若不调用该命令,则系统使用的默认值为5;
#defineMPLAYER_CMD_RECORD0x01020000//录像的文件名地址,param为BSTR类型,当param为0(用int表示)时表示关闭录像
#defineMPLAYER_CMD_PAUSE0x01030000//暂停播放,param为NULL(NULL表示无意义)
#defineMPLAYER_CMD_NEXTFRAME0x01030018//播放下一帧,注意当前播放状态必须是暂停。
param类型为VT_BOOL,值为0。
#defineMPLAYER_CMD_PREFRAME0x0103001B//播放上一帧,注意当前播放状态必须是暂停。
param类型为VT_BOOL,值为1。
#defineMPLAYER_CMD_RESUME0x01030001//继续播放,param为NULL
#defineMPLAYER_CMD_JUMP0x01030002//跳转到的时间,param为long表示跳转到的位置
#defineMPLAYER_CMD_JUMP_PROCESS0x01030017//跳转到的进度,param为long表示跳转到的进度(百分比,取值范围0-100)
#defineMPLAYER_CMD_SPEED0x01030005//设置播放速度,param用long表示,64表示1X,128表示2X,32表示1/2X,负号表示反向
#defineMPLAYER_CMD_MUTE0x01030007//禁音,param为bool值,ture为关闭声音,false为打开声音
#defineMPLAYER_CMD_SWITCHSRC0x01030011//切换视频源,param为BSTR,表示切换到新的一个视频源地址,于Connect函数的url格式一样,该命令只对网络的url有效
注:
1.当param为udp:
//0.0.0.0:
0的时候表示不切换到任何地址,只是离开多播组;
2.当使用recfrom过虑时,传入的参数在后面加入选项的协议,格式为:
udp:
//udp地址:
端口+选项1:
参数+选项2:
参数+……+选项n:
参数,具体的意义和MPLAYER_CMD_PEEK一样,即:
不传入或者传入RECFROM:
0.0.0.0时表示取消最后设置的过滤地址,传入RECFROM:
255.255.255.255时候保持最后设置的过滤地址,两者都不是时表示重新设置过滤地址;
#defineMPLAYER_CMD_SHOT0x01060000//抓拍一幅图画,param用BSTR表示保存的文件名,目前支持bmp和jpg两种格式,通过文件扩展名区别
#defineMPLAYER_CMD_VOLUME0x01070000//设置音量大小,param用long表示,高字节表示右声道,低字节表示左声道,大小表示百分比
#defineMPLAYER_CMD_GOTOC0x01020002//跳到一个文件,对于DVD则可能是跳到章节,param用long表示,对应于该文件的ID号
#defineMPLAYER_CMD_PEEK0x01020004//增加过滤选项,当param=0.0.0.0时候表示不进行过滤,param=255.255.255.255表示不改变,否则解码软件只对数据源地址等于param的视频源进行解码,注:
在connect前可以先进行设置,但设置后connect的保留选项一定要传入RECFROM:
255.255.255.255选项以保持最后的过滤地址,否则设置将在connect后无效。
#defineMPLAYER_CMD_SPUCH0x0103000F//选择一个子图像,param为long,子图象ID号
#defineMPLAYER_CMD_AUDIOCH0x01030010//选择一个音频流,param为long,音频流的ID号
#defineMPLAYER_CMD_SETSHMODE0x01060005//设置显示模式,param为long,
//参数:
0:
半场,1:
全场,2:
mean方式,3:
线性插值,4:
Blend方式
#defineMPLAYER_CMD_SETPROBLE0x01060006//设置能否显示探针,param为BOOL,TRUE表示使用探针,false表示不使用探针,该命令不管是否播放都有效
#defineMPLAYER_CMD_DDMODE0x01060009////设置显示模式,0:
表示自动模式(即优先考滤overlay,初始化失败再使用offsetscreen),1:
表示overlay,2:
表示offsetscreen,默认为overlay模式,控件每次启动只需要设置一次以后每次播放都按照最后设置播放
#defineMPLAYER_CMD_SHOW0x0106000A//设置是否解码,0:
表示不解码,1:
表示解码
#defineMPLAYER_CMD_OSDTEXT0x0106000C//设置叠加显示的字符串,param用BSTR表示要显示的字符串
#defineMPLAYER_CMD_OSD_X0x0106000D//设置叠加显示字符串的横坐标,param用long表示要显示字符串相对于控件左侧的位置,单位是像素
#defineMPLAYER_CMD_OSD_Y0x0106000E//设置叠加显示字符串的纵坐标,param用long表示要显示字符串相对于控件上方的位移,单位是像素
#defineMPLAYER_CMD_OSD0x01060003//控制叠加字符串的显示,param用long型,0表示不要显示字符串,1表示显示
#defineMPLAYER_CMD_SHOT_DEINTERLACER0x01060017//设置抓拍的效果处理,param分别取以下值,”lb”,”li”,”ci”,”md”,”fd”等5种不同的处理效果
#defineMPLAYER_CMD_OSD_FONTNAME0x0106001A//设置OSD字符串的显示字体,param用字符串(VT_BSTR),如"TimesNewRoman"
#defineMPLAYER_CMD_OSD_FONTSIZE0x0106001B//设置OSD字符串的字体大小,param用unsignedchar(VT_UI1)型
#defineMPLAYER_CMD_OSD_FONTCOLOR0x0106001C//设置OSD字符串的字体颜色,param用long(VT_I4)型,如RGB(255,0,0)
#defineMPLAYER_CMD_WINDOWHIDE0x0106001D//小窗口隐藏时停止该窗口的图像绘画处理,param用BOOL型(VT_BOOL)
#defineMPLAYER_CMD_BKGCOLOR0x01010004//设置解码控件的背景颜色,param用long(VT_I4)型,如RGB(255,0,0)
#defineMPLAYER_CMD_FULLSCREEN0x01060029//设置控件全屏及恢复,param用long(VT_I4)型,非0置为全屏,0取消全屏
#defineMPLAYER_CMD_HTTP0x01020005//HTTP协议命令,param用long(VT_I4)型,1为暂停,2为恢复。
原始数据回凋命令:
函数功能:
取得视音频原始数据
函数原型:
回凋函数:
typedefint(DataCallBack)(longhandle,void*buf,longparam);
只要向控件发以下控制id的命令则进行设置不同类型的数据回凋函数,把回凋函数的指针强制转化为int的类型传入,如传入的参数为0,则表示取消数据回凋。
#defineMPLAYER_CMD_ACB0x01030012//设置取得音频数据的回凋函数
buf的类型以下数据结构的指针
structbuf_element_t
{
unsignedchar*mem;
unsignedchar*content;/*startofrawcontentinpMem(withoutheaderetc)*/
uint32_tsize;/*sizeof_content_*/
uint32_tmax_size;
uint32_ttype;
int64_tPTS;/*presentationtimestamp,usedfora/vsync*/
int64_tSCR;/*systemclockreference,usedfordiscont.detection*/
int64_tinput_pos;/*rememberwherethisbufcamefromintheinputsource*/
int64_tinput_time;/*timeoffsetinsecondsfrombeginningofstream*/
uint32_tdeco
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 解码 控件 开发 说明 文档