版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录产品概述 . 2产品连接示意图 . 2产品解码显示模块示意图 . 3产品部分功能及sdk开发接口说明(可以参考网络sd k的 nvd视频上墙 demo , 在网络 sdk开发包“分类应用 nvd视频上墙 nvdsdkdemo”下) . 4nvd (嵌入式解码器)开发说明文档产品概述嵌入式解码器的主要功能是在联网监控项目中,把网络传输过来的视频图像进行解码上墙的工作。解码器的输入信号, 是网络音视频信号,相对应的前端编码设备是我司所有的前端设备,包括 dvr、nvs、ipc、ip 球等等。解码器的输出信号,一般传送给dlp 屏、监视器等显示设备。产品连接示意图产品解码显示模块示意图解码器常用
2、功能:(1)解码通道的视频源可以采用两种方式得到:1. 解码器取我司前端设备, 包括 dvr 、nvs 、ipc、ip 球等等的码流,这种方式属于拉模式, 需要给解码器的各个解码通道输入前端设备的ip, port ,username等信息;2. 把标准码流送入指定的端口(每个解码通道都有指定的端口),这种方式属于推模式。(注意:对同一个解码器, 所有解码通道工作在一致的模式下, 或推模式或拉模式 , 不能有些通道是推模式有些是拉模式. )(2) 可以控制 tv输出的画面分割( 1画面和 4 画面)(3) 可以得到解码器的各个解码通道的解码信息,包括解码状态(数据是监视 / 回放) ,数据的分辨
3、率,帧率,解码速度等信息。(4) 每台解码器一个tv可以输出四个解码通道。(5) 解码器 tv轮巡:包括显示轮巡和解码轮巡(6) tv 调节:具有 tv调节能力的解码器才可以调节,通过查询tv信息,可以知道是否具有tv调节能力。产品部分功能及 sdk 开发接口说明(可以参考网络sd k的 nvd 视频上墙demo, 在网络 sdk开发包“分类应用 nvd视频上墙 nvdsdkdemo”下)1.拉模式:给解码器的各个解码通道输入前端设备的信息,包括设备名称、设备ip、端口、设 备用户名和密码等信息。解码器自动跟前端设备进行连接取流进行解码, tv 输出。a先登录解码器 client_api lo
4、ng call_method client_login(char *pchdvrip, word wdvrport, char *pchusername, char *pchpassword, lpnet_deviceinfo lpdeviceinfo, int *error = 0); b查询解码器信息client_api bool call_method client_querydecoderinfo(long lloginid, lpdev_decoder_info lpdecinfo, int waittime=1000); 函数说明:查询解码器信息。给解码器的各个解码通道配置前端设备
5、之前,先查询解码器信息,再进行解码器tv 画面切换参数说明:inlloginid 登入返回的设备句柄outlpdecinfo 输出参数,用于接收查询返回的数据的缓存。这里为结构体 lpdev_decoder_info 。inwaittime 查询状态等待时间。c 解码器 tv 画面切换client_api long call_method client_switchdectvencoder(long lloginid, int ndecoderid, lpdev_encoder_info lpencoderinfo, void* userdata=null); 函数说明:解码器 tv 画面切换
6、,接口为异步方式。参数说明:inlloginid 登入返回的设备句柄inndecoderid 解码通道inlpencoderinfo连接的前端设备的信息inuserdata用户数据。备注:接口为异步方式,接口操作结果由异步回调函数返回。client_api bool call_method client_setoperatecallback(long lloginid, fmessdatacallback cbmessdata, dword dwuser); 简单使用例子/ 异步回调函数void callback messdatacallbackfunc(long lcommand, lpne
7、t_callback_data lpdata, dword dwuser) cnvdsdkdemodlg *dlg = (cnvdsdkdemodlg *)dwuser; if (dlg = null | lpdata = null) return; dlg-messdatacallback(lcommand, lpdata); void cnvdsdkdemodlg:messdatacallback(long lcommand, lpnet_callback_data lpdata) if (lpdata-userdata = null) return; switch(lcommand) c
8、ase response_decoder_ctrl_tv:/ client_ctrldectvscreen接口 break; case response_decoder_switch_tv: / 对应 client_switchdectvencoder接口 break; case response_decoder_playback: / 对应 client_dectvplayback接口 break; default: break; / 登陆解码器int nerrorcode = 0; net_deviceinfo studevinfo = 0; longlloginhandle = clie
9、nt_login(szdevip, ndevport, szdevuser, szdevpwd, &studevinfo, &nerrorcode); if (lloginhandle != 0) / 设置异步回调函数client_setoperatecallback(lloginhandle, messdatacallbackfunc, (dword)pparentdlg); / 查询解码器信息bool bret = client_querydecoderinfo(lloginhandle, pdecoderinfo); if (bret) / 得到解码器信息,包括tv 个数
10、,解码通道个数,各个tv 的画面分割数,各个tv 使能/ 用于界面状态显示 . / 使解码器解码前端设备的数据,以指定的分割画面tv 输出。dev_encoder_info stuencoderinfo = 0; . switch_tv_param *pswitchtvparam = new switch_tv_param; / 由于 client_switchdectvencoder接口为异步方式,因此要自定义一个操作参数pswitchtvparam,以便在异步回调函数处理界面的变化。long loperatehandle = client_switchdectvencoder(llogin
11、handle, ndecoderid, &stuencoderinfo, pswitchtvparam); if (loperatehandle = 0) / 操作失败delete pswitchtvparam; else . 2.推模式:把标准码流送入指定的端口(每个解码通道都有指定的端口)进行解码, tv 输出。应用说明平台从前端设备(ipc 等)取视频流,送入nvd 解码上墙,采用rtp 方式。简单例子/ 登陆前端设备取流,采用数据回调的方式。int nerrorcode = 0; net_deviceinfo studevinfo = 0; longlloginhandle =
12、 client_login(szdevip, ndevport, szdevuser, szdevpwd, &studevinfo, &nerrorcode); if (lloginhandle != 0) / 设置套接字m_saddrin.sin_addr.s_un.s_addr = inet_addr(m_saddress); m_saddrin.sin_family = af_inet; m_saddrin.sin_port = htons(nnvdport); / nnvdport为解码器解码通道的端口,解码通道的端口与解码通道 i 的对应关系是nnvdport = i
13、 * 2 + 8000 m_socket = socket(af_inet, sock_dgram, ipproto_udp); / 设备取流long lret = client_realplay(lloginhandle, nplaychannel, null); if(0 != lret) m_lplayid = lret; / 调用回调函数接收实时流,并发送到解码器相应的解码通道client_setrealdatacallbackex(lret, realdatacallbackex, (dword)this, 0 x1f); else messagebox(convertstring(
14、fail to play!), convertstring(prompt); / 数据回调void callback realdatacallbackex(long lrealhandle, dword dwdatatype, byte *pbuffer, dword dwbufsize, long lparam, dword dwuser) if(dwuser = 0) return; crtpdemodlg *dlg = (crtpdemodlg *)dwuser; switch(dwdatatype) case 0:/original data dlg-sendplayinfo(dwda
15、tatype, pbuffer, dwbufsize); break; case 1:/standard video data break; case 2:/yuv data break; case 3:/pcm audio data break; case 4:/original audio data break; default: break; #define max_size 1400 / 数据发送到解码器void crtpdemodlg:sendplayinfo(dword dwdatatype, byte *pbuffer, dword dwbufsize) / 发送实时流int r
16、len = 0; int sendlen = 0; bool bover = false; byte* src = pbuffer; / 根据数据大小,分批发送 , udp发送,均匀发送,减少丢包。while(!bover) if(dwbufsize sendlen + max_size) sendlen += max_size; rlen = max_size; else rlen = dwbufsize - sendlen; bover = true; / 打包并发送当前文件流crtppacket rtppacket; rtppacket.setpayloadtype(96); rtppa
17、cket.setpayloaddata(unsigned char*)src, rlen); src += rlen; rtppacket.setmarker(false); int nlen = 0; unsigned char *ppayloaddata = rtppacket.getrtpbuffer(nlen); int i = 0; i = sendto(m_socket, (char *)ppayloaddata, nlen, 0, (sockaddr*)&m_saddrin, sizeof(m_saddrin); / 释放报文空间delete(ppayloaddata);
18、 / 停止解码上墙void crtpdemodlg:stopsend() if(0 != m_lplayid) closesocket(m_socket); client_stoprealplay(m_lplayid); m_lplayid = 0; 3.控制 tv 输出的画面分割client_api long call_method client_ctrldectvscreen(long lloginid, int nmonitorid, bool benable, int nsplittype, byte *pencoderchannel, int nbuflen, void* userd
19、ata=null); 函数说明:控制解码器tv 画面分割,接口为异步方式。参数说明:in lloginid 登入返回的设备句柄innmonitorid tv 的 id,0 开始inbenable 控制画面分割使能innsplittype切割方式inpencoderchannel当前tv显示的解码通道, 以数组表示,数组值的类型为 byte ,表示解码通道号。innbuflenpencoderchannel 的长度,即解码通道个数。inuserdata用户数据。备注:接口为异步方式,接口操作结果由异步回调函数返回。client_api bool call_method client_setope
20、ratecallback(long lloginid, fmessdatacallback cbmessdata, dword dwuser); 应用说明控制 tv 输出的画面分割,一般是1 画面分割和四画面分割,并且可以指定tv 的各个分割画面显示的解码通道。简单例子/ 控制 tv 输出的画面分割,进行四画面分割,并把解码14 通道在该tv 显示byte bencoderchannel4 = 0; bencoderchannel0 = 0;/解码 1 通道bencoderchannel1 = 1; /解码 2 通道bencoderchannel2 = 2; /解码 3 通道bencoderc
21、hannel3 = 3; /解码 4 通道 . ctrl_tv_param *pctrltvparam = new ctrl_tv_param; / 由于 client_ctrldectvscreen接口为异步方式,因此要自定义一个操作参数pctrltvparam ,以便在异步回调函数处理界面的变化。long loperatehandle = client_ctrldectvscreen(lloginid, nmonitorid, true, nsplitnum, bencoderchannel, 4, pctrltvparam);if (loperatehandle = 0) / 操作失败d
22、elete pctrltvparam; else . 4.得到解码器的各个解码通道的解码信息client_api bool call_method client_querydecchannelflux(long lloginid, int ndecoderid, lpdev_decchannel_state lpchannelstateinfo, int waittime=1000); 函数说明:查询当前解码通道流信息。参数说明:in lloginid 登入返回的设备句柄inndecoderid 解码通道outlpchannelstateinfo 输出参数,用于接收返回的当前解码通道的解码信息
23、缓存。这里为结构体lpdev_decchannel_state。inwaittime超时时间应用说明查询当前解码通道流信息,可以得到解码器的各个解码通道的解码信息,包括解码状态(数据是监视 / 回放) ,数据的分辨率,帧率,解码速度等信息。简单例子dev_decchannel_state stchannelstate = 0; bool bret = client_querydecchannelflux(loginid, ndecoderid, &stchannelstate, 1000);if (bret = 0) / 操作失败 else . 5.解码器 tv 轮巡a.显示轮巡应用说
24、明指定的几个解码通道的图像在tv 中轮巡显示。相关接口如下:(1) client_querydecodertour(long lloginid, int nmonitorid, lpdec_tour_combin lpdectourinfo, int waittime=1000); 函数说明:查询当前tv 的轮巡信息。参数说明:in lloginid 登入返回的设备句柄innmonitorid tv 的 id outlpdectourinfo 输出参数,用于接收返回的当前tv 的轮巡信息缓存。这里为结构体lpdec_tour_combin。inwaittime超时时间(2) client_qu
25、erytourcombin(long lloginid, int nmonitorid, int ncombinid, lpdec_combin_info lpdeccombininfo, int waittime=1000); 函数说明:解码器画面组合信息参数说明:in lloginid 登入返回的设备句柄innmonitorid tv 的 id inncombinid tv 的 id outlpdeccombininfo 输出参数,用于接收返回的解码器画面组合信息缓存。这里为结构体 lpdec_combin_info 。inwaittime超时时间(3) client_addtourcom
26、bin(long lloginid, int nmonitorid, int nsplittype, byte *pencoderchannnel, int nbuflen, int waittime=1000); 函数说明:增加画面组合参数说明: in lloginid 登入返回的设备句柄innmonitorid tv 的 id innsplittype 切割方式inpencoderchannel当前tv显示的解码通道, 以数组表示,数组值的类型为 byte ,表示解码通道号。innbuflenpencoderchannel 的长度,即解码通道个数。inwaittime超时时间返回值:返回组
27、合 id(=0)(4) client_deltourcombin(long lloginid, int nmonitorid, int ncombinid, int waittime=1000); 函数说明:删除画面组合参数说明: in lloginid 登入返回的设备句柄innmonitorid tv 的 id inncombinid 组合 id inwaittime超时时间(5) client_settourcombin(long lloginid, int nmonitorid, int ncombinid, int nsplittype, byte *pencoderchannel,
28、int nbuflen, int waittime=1000); 函数说明:修改画面组合参数说明: in lloginid 登入返回的设备句柄innmonitorid tv 的 id inncombinid 组合 id innsplittype 切割方式inpencoderchannel当前tv显示的解码通道, 以数组表示,数组值的类型为 byte ,表示解码通道号。innbuflenpencoderchannel 的长度,即解码通道个数。inwaittime超时时间(6) client_setdecodertour(long lloginid, int nmonitorid, lpdec_t
29、our_combin lpdectourinfo, int waittime=1000); 函数说明:设置轮巡操作参数说明: in lloginid 登入返回的设备句柄innmonitorid tv 的 id inlpdectourinfo解码器轮巡信息。inwaittime超时时间b.解码轮巡应用说明每个解码通道可以轮巡解码前端32 个编码器通道,通过配置配置好后,再通过调用接口控制解码器轮巡(1)client_setdevconfig(long lloginid, dword dwcommand, long lchannel, lpvoid lpinbuffer, dword dwinbu
30、ffersize, int waittime=500); 函数说明:设置配置信息参数说明: in lloginid 登入返回的设备句柄indwcommand 设备配置命令参见配置命令inlchannel通道号,如果设置全部通道数据为0 xffffffff ,如果命令不需要通道号, 该参数无效。in lpinbuffer 数据缓冲指针,indwinbuffersize 数据缓冲长度(以字节为单位).inwaittime超时时间简单例子int nret = client_setdevconfig(loginid, dh_dev_decoder_tour_cfg, ndecoderid, &
31、m_stutourcfginfo, sizeof(dhdev_decoder_tour_cfg), 2000); if (nret) / 成功 else messagebox(convertstring(failed to set!), convertstring(prompt); (2) client_getdevconfig(long lloginid, dword dwcommand, long lchannel, lpvoid lpoutbuffer, dword dwoutbuffersize, lpdword lpbytesreturned,int waittime=500); 函
32、数说明:查询配置信息参数说明: in lloginid 登入返回的设备句柄indwcommand 设备配置命令参见配置命令inlchannel通道号,如果设置全部通道数据为0 xffffffff ,如果命令不需要通道号, 该参数无效。out lpoutbuffer 数据缓冲指针,indwinbuffersize 数据缓冲长度(以字节为单位). out lpbytesreturned 实际收到数据的长度inwaittime超时时间简单例子dword dwretlen = 0; int nret = client_getdevconfig(loginid, dh_dev_decoder_tour_
33、cfg, ndecoderid, &m_stutourcfginfo, sizeof(dhdev_decoder_tour_cfg), &dwretlen, 2000); if (nret & dwretlen = sizeof(dhdev_decoder_tour_cfg) / 成功 else messagebox(convertstring(failed to query!), convertstring(prompt); (3) bool client_ctrldecodertour(long lloginid, int nmonitorid, dec_ctrl_
34、tour_type emactionparam, int waittime = 1000); 函数说明:解码器控制轮巡参数说明: in lloginid 登入返回的设备句柄innmonitorid tv 的 id inemactionparam 解码器轮巡控制类型inwaittime超时时间简单例子dec_ctrl_tour_type emactionparam = (dec_ctrl_tour_type) nctrltype; int nret = client_ctrldecodertour(lloginid, ndecoderid, emactionparam, 1500); if (n
35、ret = false) messagebox(convertstring(failed to control decoder tour.), convertstring(prompt); 6.解码器 tv 画面回放(1)client_dectvplayback(long lloginid, int ndecoderid, dec_playback_mode emplaybackmode, lpvoid lpinbuffer, dword dwinbuffersize, void* userdata=null); 函数说明:解码器 tv 画面回放,接口为异步方式。参数说明:inlloginid
36、 登入返回的设备句柄inndecoderid 解码通道inemplaybackmode解码器回放类型in lpinbuffer 数据缓冲指针,如果emplaybackmode = dec_by_device_file ,指针类型为dec_playback_file_param 如果emplaybackmode = dec_by_device_time,指针类型为dec_playback_file_paramindwinbuffersize 数据缓冲长度(以字节为单位).inuserdata用户数据。备注:接口为异步方式,接口操作结果由异步回调函数返回。client_api bool call_
37、method client_setoperatecallback(long lloginid, fmessdatacallback cbmessdata, dword dwuser); (2)client_ctrldecplayback(long lloginid, int ndecoderid, dec_ctrl_playback_type emctrltype, int nvalue, int waittime=1000); 函数说明:解码器 tv 画面回放控制。参数说明:inlloginid 登入返回的设备句柄inndecoderid 解码通道inemctrltype解码器回放控制类型i
38、n nvalue 数据大小,如果 emctrltype = dec_playback_seek ,nvalue为文件偏移大小,单位为 kb,emctrltype为其他类型时, nvalue为 0inwaittime 超时时间(3)client_setdecplaybackpos(long lloginid, fdecplaybackposcallback cbplaybackpos, dword dwuser); 函数说明:设置回放进度回调函数。参数说明:inlloginid 登入返回的设备句柄incbplaybackpos 回放进度回调函数,函数原型为typedef void (callba
39、ck *fdecplaybackposcallback)(long lloginid, int nencoderid, dword dwtotalsize, dword dwplaysize, dword dwuser); indwuser 用户参数简单使用例子/ 异步回调函数void callback messdatacallbackfunc(long lcommand, lpnet_callback_data lpdata, dword dwuser) cnvdsdkdemodlg *dlg = (cnvdsdkdemodlg *)dwuser; if (dlg = null | lpda
40、ta = null) return; dlg-messdatacallback(lcommand, lpdata); void cnvdsdkdemodlg:messdatacallback(long lcommand, lpnet_callback_data lpdata) if (lpdata-userdata = null) return; switch(lcommand) case response_decoder_ctrl_tv:/ client_ctrldectvscreen接口 break; case response_decoder_switch_tv: / 对应 client
41、_switchdectvencoder接口 break; case response_decoder_playback: / 对应 client_dectvplayback接口 break; default: break; void callback decplaybackposfunc(long lloginid, int nencoderid, dword dwtotalsize, dword dwplaysize, dword dwuser) . / 登陆解码器int nerrorcode = 0; net_deviceinfo studevinfo = 0; longlloginhan
42、dle = client_login(szdevip, ndevport, szdevuser, szdevpwd, &studevinfo, &nerrorcode); if (lloginhandle != 0) / 设置异步回调函数client_setoperatecallback(lloginhandle, messdatacallbackfunc, (dword)pparentdlg); / 设置回放进度回调函数client_setdecplaybackpos(lloginhandle, decplaybackposfunc, (dword)pparentdlg);
43、/ 解码器 tv 画面回放switch_tv_param *pplaybacktvparam = new switch_tv_param; / 由于 client_dectvplayback接口为异步方式,因此要自定义一个操作参数pplaybacktvparam,以便在异步回调函数处理界面的变化。dec_playback_file_param stuplaybackparam = 0 .; long loperatehandle = client_dectvplayback(lloginhandle, ndecoderid, dec_by_device_file, (lpvoid)&stuplaybackparam, sizeof(dec_playback_file_param), pplaybacktvparam
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025出租车司机聘用合同2
- 2025年度文化创意产品订货合同模板2篇
- 二零二五年度农业种植与农业保险合作合同3篇
- 2025木材买卖的合同范本
- 二零二五年度出差文化与价值观融入协议3篇
- 二零二五年度智能厂房安全责任协议2篇
- 二零二五年度金融许可证转让合同3篇
- 2025年度农村房屋租赁权转让与装修改造服务合同
- 二零二五年度绿色建筑项目投资合作协议3篇
- 2025年度公司对赌协议合同-绿色金融与可持续发展3篇
- 2024年全国《国防和兵役》理论知识竞赛试题库与答案
- 企业知识产权保护策略及实施方法研究报告
- 2024年07月11026经济学(本)期末试题答案
- 2024年中小企业股权融资合同3篇
- 2024年01月11289中国当代文学专题期末试题答案
- 2024年秋季生物教研组工作计划
- 2024年云南高中学业水平合格考历史试卷真题(含答案详解)
- 2025年董事长年会发言稿范文
- 医院廉洁购销合同
- 车间设备线路安装方案
- 专题11 名著阅读之《童年》(考题猜想)(期中真题速递20题)(含答案解析)
评论
0/150
提交评论