精华内容
下载资源
问答
  • ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)-附件资源
  • 在前一篇文章中讲到如何安装gsoap,本篇文章将介绍如何使用gsoap获取onvif协议,并通过onvif协议在客户端获取RTSP地址。 1. 通过gsoap获取onvif协议 首先要明白gsoap只是一个工具 ...

    前一篇文章中讲到如何安装gsoap,本篇文章将介绍如何使用gsoap获取onvif协议,并通过onvif协议在客户端获取RTSP地址。

    2. 通过gsoap获取onvif协议

    首先要明白gsoap只是一个工具,该工具能通过WSDL自动生成C/C++语言的客户端或服务端的框架代码。其中wsdl2h和soapcpp2为核心,能实现上述功能。wsdl2h根据WSDL文成C/C++头文件,soapcpp2根据该头文件生成C/C++的框架源码。
    然后需要了解Onvif只是一个网络协议,原为安讯士、博世、索尼等三家公司在2008年共同成立的一个国际性开放型网络视频产品标准网络接口 的开发论坛。后由于行业标准化,直接将该论坛名设为协议名。它制订了网络视频的模型、接口、数据类型以及数据交互的模式。我们直接使用这个协议就能获取到摄像头的相关信息,从而进行数据传输。
    gsoap和onvif的预备知识这里不再赘述网上有大量信息可供参考。下面正式开始获取onvif部分。

    1.1 生成onvif框架

    准备工作,电脑联网,新建一个文件夹,后面将把你生成的相关文件放在这个目录下。进入该文件夹打开terminal,输入如下指令

    wsdl2h  -c  -s  -t  typemap.dat  -o  onvif.h http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl http://www.onvif.org/onvif/ver20/analytics/wsdl/analytics.wsdl http://www.onvif.org/onvif/ver10/analyticsdevice.wsdl http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl http://www.onvif.org/onvif/ver10/deviceio.wsdl http://www.onvif.org/onvif/ver10/display.wsdl http://www.onvif.org/onvif/ver10/event/wsdl/event.wsdl http://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.wsdl http://www.onvif.org/onvif/ver10/recording.wsdl http://www.onvif.org/onvif/ver10/replay.wsdl http://www.onvif.org/onvif/ver10/search.wsdl http://www.onvif.org/onvif/ver10/receiver.wsdl http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl 

    wsdl2h是之前安装gsoap后的一个工具,后面几个参数含义可使用

    wsdl2h -h

    查看,也可以在网上查找。

    -o onvif.h

    代表输入文件名为onvif.h

    等待一段时间后刚刚新建的文件夹下多出onvif.h文件。这样onvif框架就生成了。

    1.2 生成onvif框架源码
    由于很多摄像头需要鉴权,需要使用soap_wsse_add_UsernameTokenDigest函数授权,而生成的onvif.h中不包含授权部分,故需添加相关文件,否则后面生成的源文件在需要鉴权时功能不完整会报错。
    第一步在onvif.h文件开头添加

    #import “wsse.h”

    接下来生成源文件,在terminal中键入

    soapcpp2 -2 -C -L -c onvif.h -x -I ./

    各参数具体含义可以通过

    soapcpp2 -h

    获取,这里不再赘述。等待一段时间后就能得到有用的源文件了。

    在该过程中可能会出现如下错误

    wsa5.h(288): **ERROR**: service operation name clash: struct/class 'SOAP_ENV__Fault' already declared at wsa.h:273

    这是因为onvif.h头文件中同时#import“wsdd10.h”和#import“wsa5.h”,此时修改wsa5.h文件,将int SOAP_ENV__Fault修改为int SOAP_ENV__Fault_alex.再次执行生成源文件命令即可。
    最后复制gsoap中相关文件到目录下
    最终文件夹中包括生成的和复制的文件总共如下
    dom.h dom.c
    mecevp.h mecevp.c
    smdevp.h smdevp.c
    soapH.h
    soapStub.h
    stdsoap2.h stdsoap2.c
    threads.h threads.c
    wsaapi.h wsaapi.c
    wsdd.h
    wsseapi.h wsseapi.c
    soapC.c
    soapClient.c
    合计19个文件
    到这里就大功告成,剩下的需要我们编写主函数,调用相关接口,获取rtsp地址。将在下一章给出具体代码。

    展开全文
  • Atitit onvif协议获取rtsp地址播放java语言attilx总结

    千次阅读 热门讨论 2016-12-23 16:17:40
    Atitit onvif协议获取rtsp地址播放java语言 attilx总结     1.1. 获取rtsp地址的算法与流程1 1.2. Onvif摄像头的发现,ws的发现机制,使用xcf类库1 2. 调用getStreamUri 获得rtsp地址 ,使用类库ONVIF Java ...

    Atitit onvif协议获取rtsp地址播放java语言attilx总结

     

     

    1.1.获取rtsp地址的算法与流程1

    1.2.Onvif摄像头的发现,ws的发现机制,使用xcf类库1

    2.调用getStreamUri 获得rtsp地址 ,使用类库ONVIF Java Library by Milgo2

    2.1.问题为什么使用这个得到的地址不能播放4

     

     

     

    1.1. 获取rtsp地址的算法与流程 

    动态发现onvif设备

    调用getProfiles  获取Profile列表,

    调用getStreamUri 获得rtsp地址( 使用Profile参数)

     

     

     

    1.2. Onvif摄像头的发现,ws的发现机制,使用xcf类库

     

    Onvif协议建立在webservice协议基础上。他的发现机制就是ws的发现机制。。

     

    import java.util.List;

    import javax.xml.ws.EndpointReference;

    import org.apache.cxf.ws.discovery.WSDiscoveryClient;

     

    public class Main

    {

        public static void main(String[] args)

        {

            WSDiscoveryClient client = new WSDiscoveryClient();

            client.setVersion10(); // use WS-discovery 1.0

            client.setDefaultProbeTimeout(1000); // timeout 1s

     

            System.out.println("Probe:" + client.getAddress());

            List<EndpointReference> references = client.probe();

     

            System.out.println("Nb answsers:" + references.size());

            for (EndpointReference ref : references)

            {

                System.out.println(ref.toString());

            }

        }

    }

    Probe is :soap.udp://239.255.255.250:3702

    Nb answsers:1

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?><EndpointReference xmlns="http://www.w3.org/2005/08/addressing"><Address>http://192.168.31.144:10080/onvif/device_service</Address><ReferenceParameters/></EndpointReference>

     

     

    返回的ws服务地址  http://192.168.31.144:10080/onvif/device_service

     

    2. 调用getStreamUri 获得rtsp地址 ,使用类库ONVIF Java Library by Milgo

    根据上异步获得的ws服务地址,提取ipport。。调用getStreamUri 获得rtsp地址

     

    返回的rtsp地址  rtsp://192.168.31.144:10554/tcp/av0_0

     

     

    package com.attilax.video;

     

    /**

     *@author attilax

     *2016年12月21日 下午10:38:11

     */

    import java.io.IOException;

    import java.net.ConnectException;

    import java.util.List;

     

    import javax.xml.soap.SOAPException;

     

    import org.onvif.ver10.media.wsdl.GetStreamUri;

    import org.onvif.ver10.media.wsdl.GetStreamUriResponse;

    import org.onvif.ver10.schema.Profile;

    import org.onvif.ver10.schema.StreamSetup;

    import org.onvif.ver10.schema.Transport;

     

    import de.onvif.soap.OnvifDevice;

     

    public class OnvifTest {

    public static void main(String[] args) {

    // org.apache.commons.codec.binary.Base64

    // org.apache.commons.codec.binary.Base64

    try {

    // OnvifDevicenvt = new OnvifDevice("192.168.0.20", "admin",

    // "password");

    OnvifDevice nvt = new OnvifDevice("192.168.31.144:10080", "", "");

    List<Profile> profiles = nvt.getDevices().getProfiles();

    for (Profile profile : profiles) {

    // String profileToken = profiles.get(0).getToken();

    System.out.println(profile);

    }

     

    // System.out.println("Snapshot URI: "+nvt.getMedia().getSnapshotUri(profileToken));

    String profileToken = profiles.get(0).getToken();  //PROFILE_000

    StreamSetup streamSetup = new StreamSetup();

    String getStreamUri = nvt.getMedia().getStreamUri(profileToken, streamSetup);

    System.out.println("getStreamUri:" + getStreamUri);

    } catch (ConnectException e) {

    System.err.println("Could not connect to NVT.");

    } catch (SOAPException e) {

    e.printStackTrace();

    }

    }

     

     

     

     

    2.1. 问题为什么使用这个得到的地址不能播放

     

    返回的rtsp地址  rtsp://192.168.31.144:10554/tcp/av0_0

     

    使用VLC播放器和onvif测试工具都不能播放。。设备也没有设置用户名密码的。

     

     

    作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

    捕鸟王"Bird Catcher 王中之王King of Kings 虔诚者Pious 宗教信仰捍卫者 Defender Of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak

    简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

    全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon bin adam Al Rapanui 埃米尔阿提拉克斯 阿克巴 马哈茂德 阿提拉 所罗门 本亚当  阿尔 拉帕努伊

    常用名:艾提拉(艾龙), EMAIL:1466519819@qq.com

     

     

    头衔:uke总部o2o负责人,全球网格化项目创始人,

    uke宗教与文化融合事务部部长, uke宗教改革委员会副主席

    Uke部落首席大酋长,

    uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,

    奶牛科技cto ,uke 首席cto

    uke波利尼西亚区大区连锁负责人,克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke汤加王国区域负责人。布维岛和南乔治亚和南桑威奇群岛大区连锁负责人

     Uke软件标准化协会理事长理事长 uke终身教育学校副校长

    Uke 数据库与存储标准化协会副会长 uke出版社编辑总编

    Uke医院方面的创始人

     

    转载请注明来源:attilax的专栏  ?http://blog.csdn.net/attilax

    --Atiend

     

     

    展开全文
  • ONVIF TestConformance Test Tool获取RTSP地址及VLC播放音频 一、目的 通过VLC软件网络串口流播放拾音器的声音。 二、设备 笔记本 IP 10.0.1.203 拾音器:淘宝某款 IP 10.0.1.201,该拾音器实际就是IPCAMRA主板加...

    ONVIF TestConformance Test Tool获取RTSP地址及VLC播放音频

    • 一、目的
      通过VLC软件网络串口流播放拾音器的声音。
    • 二、设备
    1. 笔记本 IP 10.0.1.203
    2. 拾音器:淘宝某款 IP 10.0.1.201,该拾音器实际就是IPCAMRA主板加麦克风,支持ONVIF协议
    • 三、思路
      支持Onvif协议的摄像机可直接通过rtsp协议进行视频播放。但要获取摄像机的rtsp url,可通过Onvif 工具方式准确获取。
      ONVIF结构
    1. 安装VLC media player 3.0.6
    2. 安装ONVIF测试软件 ONVIF Conformance Test 10.0.1.201
    3. 使用ONVIF测试软件获得拾音器的RTSP地址
    4. 使用VLC播放RTSP地址的音频
    • 四、步骤
    1. ONVIF测试软件Discovery界面
      在左侧NIC中选择网卡,勾选Use Hardware Notation,点击Discovery Devices,然后在设备列表清单中选择拾音器的IP地址10.0.1.201;
      在右侧User Name和Password 中填写拾音器的用户名密码,点击check按钮,下方Metadata Version、Brand、Model、Firmware Version的相关信息就会显示出来,即表示设备通讯正常。
      Discovery界面
    2. ONVIF测试软件Test界面
      在左侧Test Cases中Real Time Streaming>Audio Streaming>Unicast目录下,勾选一个G711测试项,在右侧Step Details中会显示该测试项的所有步骤,然后点击Run Current 按钮,如果执行成功该测试项会变为绿色,此时点击右侧Step Details中step6 Getting Stream URI,下方Response页内 tt:Urirtsp://10.0.1.201:554/11</tt:Uri>行中rtsp://10.0.1.201:554/11即是拾音器音频RTSP地址
      Test界面

    参考

    [1]: http://www.itnotepad.cn/Home/Article/num/31.html [2]:https://blog.csdn.net/benkaoya/article/details/72453403#commentBox

    展开全文
  • Atitit onvif协议获取rtsp地址播放java语言 attilx总结 1.1. 获取rtsp地址的算法与流程1 1.2. Onvif摄像头的发现,ws的发现机制,使用xcf类库1 2. 调用getStreamUri获得rtsp地址 ,使用类库ONVIF Java ...

     

     

    Atitit onvif协议获取rtsp地址播放java语言 attilx总结

     

     

    1.1. 获取rtsp地址的算法与流程1

    1.2. Onvif摄像头的发现,ws的发现机制,使用xcf类库1

    2. 调用getStreamUri 获得rtsp地址 ,使用类库ONVIF Java Library by Milgo2

    2.1. 问题为什么使用这个得到的地址不能播放4

     

     

     

    1.1. 获取rtsp地址的算法与流程 

    动态发现onvif设备

    调用getProfiles  获取Profile列表,

    调用getStreamUri 获得rtsp地址 ( 使用Profile参数)

     

     

     

    1.2. Onvif摄像头的发现,ws的发现机制,使用xcf类库

     

    Onvif协议建立在webservice协议基础上。他的发现机制就是ws的发现机制。。

     

    import java.util.List;

    import javax.xml.ws.EndpointReference;

    import org.apache.cxf.ws.discovery.WSDiscoveryClient;

     

    public class Main

    {

        public static void main(String[] args)

        {

            WSDiscoveryClient client = new WSDiscoveryClient();

            client.setVersion10(); // use WS-discovery 1.0

            client.setDefaultProbeTimeout(1000); // timeout 1s

     

            System.out.println("Probe:" + client.getAddress());

            List<EndpointReference> references = client.probe();

     

            System.out.println("Nb answsers:" + references.size());

            for (EndpointReference ref : references)

            {

                System.out.println(ref.toString());

            }

        }

    }

    Probe is :soap.udp://239.255.255.250:3702

    Nb answsers:1

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?><EndpointReference xmlns="http://www.w3.org/2005/08/addressing"><Address>http://192.168.31.144:10080/onvif/device_service</Address><ReferenceParameters/></EndpointReference>

     

     

    返回的ws服务地址  http://192.168.31.144:10080/onvif/device_service

     

    2. 调用getStreamUri 获得rtsp地址 ,使用类库ONVIF Java Library by Milgo

    根据上异步获得的ws服务地址,提取ipport。。调用getStreamUri 获得rtsp地址

     

    返回的rtsp地址  rtsp://192.168.31.144:10554/tcp/av0_0

     

     

    package com.attilax.video;

     

    /**

     * @author attilax

     *2016年12月21日 下午10:38:11

     */

    import java.io.IOException;

    import java.net.ConnectException;

    import java.util.List;

     

    import javax.xml.soap.SOAPException;

     

    import org.onvif.ver10.media.wsdl.GetStreamUri;

    import org.onvif.ver10.media.wsdl.GetStreamUriResponse;

    import org.onvif.ver10.schema.Profile;

    import org.onvif.ver10.schema.StreamSetup;

    import org.onvif.ver10.schema.Transport;

     

    import de.onvif.soap.OnvifDevice;

     

    public class OnvifTest {

    public static void main(String[] args) {

    // org.apache.commons.codec.binary.Base64

    // org.apache.commons.codec.binary.Base64

    try {

    // OnvifDevice nvt = new OnvifDevice("192.168.0.20", "admin",

    // "password");

    OnvifDevice nvt = new OnvifDevice("192.168.31.144:10080", "", "");

    List<Profile> profiles = nvt.getDevices().getProfiles();

    for (Profile profile : profiles) {

    // String profileToken = profiles.get(0).getToken();

    System.out.println(profile);

    }

     

    // System.out.println("Snapshot URI: "+nvt.getMedia().getSnapshotUri(profileToken));

    String profileToken = profiles.get(0).getToken();  //PROFILE_000

    StreamSetup streamSetup = new StreamSetup();

    String getStreamUri = nvt.getMedia().getStreamUri(profileToken, streamSetup);

    System.out.println("getStreamUri:" + getStreamUri);

    } catch (ConnectException e) {

    System.err.println("Could not connect to NVT.");

    } catch (SOAPException e) {

    e.printStackTrace();

    }

    }

     

     

     

     

    2.1. 问题为什么使用这个得到的地址不能播放

     

    返回的rtsp地址  rtsp://192.168.31.144:10554/tcp/av0_0

     

    使用VLC播放器和onvif测试工具都不能播放。。设备也没有设置用户名密码的。

     

     

    作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

    捕鸟王"Bird Catcher 王中之王King of Kings 虔诚者Pious 宗教信仰捍卫者 Defender Of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak

    简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

    全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon bin adam Al Rapanui 埃米尔 阿提拉克斯 阿克巴 马哈茂德  阿提拉 所罗门 本亚当  阿尔 拉帕努伊

    常用名:艾提拉(艾龙),  EMAIL:1466519819@qq.com

     

     

    头衔:uke总部o2o负责人,全球网格化项目创始人,

    uke宗教与文化融合事务部部长, uke宗教改革委员会副主席

    Uke部落首席大酋长,

    uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,

    奶牛科技cto ,uke 首席cto

    uke波利尼西亚区大区连锁负责人,克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke汤加王国区域负责人。布维岛和南乔治亚和南桑威奇群岛大区连锁负责人

     Uke软件标准化协会理事长理事长 uke终身教育学校副校长

    Uke 数据库与存储标准化协会副会长 uke出版社编辑总编

    Uke医院方面的创始人

     

    转载请注明来源:attilax的专栏  ?http://www.cnblogs.com/attilax/

    --Atiend

     

     

     

    转载于:https://www.cnblogs.com/attilax/p/6215184.html

    展开全文
  • 视频监控安防平台-国标28181(GB28181)平台通过http请求获取rtsp地址再通过rtsp请求视频(HTTP服务转GB28181) 最近在整理一些小型平台的功能,由原来的GB28181_RTSP小型平台改造成http服务+rtsp服务+httpclient等...
  • Java onvif协议通用协议获取rtsp地址

    千次阅读 热门讨论 2020-09-11 18:04:27
    吐槽下可搜索的资源真的是少,好多都是4 5年前的资料 onvif协议大部分是c或者android 资料 java的比较少 感谢大佬留下的...前言:因为例子有限,没有历史流rtsp地址的使用,在参考例子和源码下,走了很多坑 上代...
  • 为实现onvif协议下客户端获取rtsp地址功能,首先需要安装gsoap软件。 1.Linux下gsoap安装 首先下载需要的gsoap安装包给出链接 GSOAP 并解压出来。 然后安装依赖工具 sudo apt - get install build - ...
  • extern "C"{ static struct soap* ONVIF_Initsoap(struct SOAP_ENV__Header *header, const char *was_To, const char *was_Action, int timeout); int ONVIF_ClientDiscovery( ); int ONVIF_Capabilities(struct __...
  • ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)

    万次阅读 多人点赞 2014-05-25 10:13:01
    目前ONVIF协议家族设备已占据数字监控行业半壁江山以上,亲,作为...最后,能获得rtsp地址之后,然后去做其他功能比如录像,ptz这些就非常得心应手了。本文出自CSDN-固本培元 ,转载注明出自:leolupy@gmail.com。
  • 转载地址:http://blog.csdn.net/gubenpeiyuan/article/details/25618177 ...本文介绍了ONVIF客户端从设备搜索,鉴权,能力获取,媒体信息获取,URI地址获取的整套流程。文章只讲述了比较重要或其他博文没有讲述的
  • onvif学习笔记10:获取RTSP地址

    千次阅读 2019-04-15 23:04:52
    网友购买了我的ONVIF视频课程,问了我几个问题,其中一个是实现ONVIF服务器的获取RTSP地址功能,本文整理出一个思路,愿帮到在学习ONVIF路上的诸君。 我录制的视频是很早之前的,一直没抽时间再录一个实战视频,...
  • 已知一个RTSP流媒体地址,例如为rtsp://online.AAABBBCCC.com/1A。同时又知道该路径下存在其他流媒体(可能存在rtsp://online.AAABBBCCC.com/2B,rtsp://online.AAABBBCCC.com/3C等流媒体,但不知道具体名字),是否...
  • Go语言实现Onvif客户端:6、获取rtsp地址 文章目录Go语言实现Onvif客户端:6、获取rtsp地址1、代码2、结果:3、查看 1、代码 获取并选择Profile token后获取rtsp地址也是调用接口即可: /** * @Description:...
  • GB28181流媒体服务搭建 ...配置RTSP端口 注意 在 Linux 下面开启 554 端口通常需要 root 权限, 需要以 sudo 来运行 livesms 服务程序 ...获取RTSP流 拉取一路直播流, 通过接口 /api/v1/stream/list 可以查看流...
  • 获取rtsp流方式

    2018-11-28 17:25:32
    监控视频RTSP对接文档,加上java代码,可以实现对各大厂商提供的rtsp流完美对接
  • int PraseURL(const char *url, char *szip, int *iport) { char *dstIP = NULL; int len = 0; char *s = NULL, *ss = NULL;...=0 || _strnicmp(url, "rtsp://", 7)) {//1.先找到rtsp这个协议字段 return -1;.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,716
精华内容 3,486
关键字:

如何获取rtsp地址