当前位置:   article > 正文

android实现onvif(rtsp)转GB28181_android onvif

android onvif

     现在因为众所周知的原因,海思的芯片价格疯狂的上涨, 行业的摄像机多采用华为海思的芯片,其制作成本水涨船高。

     我们其实可以通过一个低配的android盒子,装一个apk,就可以实现将普通的onvif摄像头转成GB28181的摄像头接入到GB28181平台,实现GB28181的联网共享。

     其数据流逻辑图如下:

由上图可知,通过android实现一个onvif转gb28181的网关,安装在android的设备上即可。该网关首先要具有onvif搜索功能,搜索到设备,通过设备的onvif用户名和密码,获取设备的rtsp url与设备信息,然后以GB28181视音频源设备的身份注册到GB28181平台,每个onvif设备以其一个通道的身份接入,比如局域网内有5个设备,那么转换为GB28181其实就是以一个带有5个视音频通道的设备注册到GB28181平台中。实现需要实现onvif的jni,同时实现gb28181设备端的JNI。由于GB28181设备端的其他文章已描述,可以参考文件https://blog.csdn.net/wangjie_jack/article/details/102968738

  本文着重描述onvif的jni接口,如下:

  1. public static native void OnvifInit(String localip);
  2. public static native void OnvifUnInit();
  3. //查找设备
  4. public static native String[] OnvifDiscoveryDevice();
  5. //获取设备的媒体url
  6. public static native String OnvifGetUrl(String deviceurl, String user, String pwd);
  7. //获取设备信息
  8. public static native DeviceInformation OnvifGetDeviceInformation(String jdevice_url, String user, String psw);

其中类DeviceInformation为设备信息类,定义如下:

  1. package com.shiyue.onvif;
  2. public class DeviceInformation
  3. {
  4. public String szManufacturer;
  5. public String szModel;
  6. public String szFirmwareVersion;
  7. public String szSerialNumber;
  8. public String szHardwareId;
  9. public DeviceInformation(String Manufacturer, String Model,String FirmwareVersion,String SerialNumber,String HardwareId)
  10. {
  11. this.szManufacturer = Manufacturer;
  12. this.szModel = Model;
  13. this.szFirmwareVersion = FirmwareVersion;
  14. this.szSerialNumber = SerialNumber;
  15. this.szHardwareId = HardwareId;
  16. }
  17. }

android基于onvif进行设备搜索代码如下:

  1. //设备搜索
  2. ImageButton imageButton = findViewById(R.id.search);
  3. imageButton.setOnClickListener(new View.OnClickListener() {
  4. @Override
  5. public void onClick(View v) {
  6. progressSearch.setVisibility(View.VISIBLE);
  7. new Thread(new Runnable(){
  8. @Override
  9. public void run() {
  10. SYGbtDeviceApp.getInstance().urls = OnVifNative.OnvifDiscoveryDevice();
  11. if(SYGbtDeviceApp.getInstance().urls.length > 0)
  12. {
  13. SYGbtDeviceApp.getInstance().deviceurls = new String[SYGbtDeviceApp.getInstance().urls.length];
  14. System.arraycopy(SYGbtDeviceApp.getInstance().urls, 0, SYGbtDeviceApp.getInstance().deviceurls, 0, SYGbtDeviceApp.getInstance().urls.length);
  15. }
  16. Message msg = Message.obtain();
  17. msg.what = SYGbtDeviceApp.getInstance().urls.length ;
  18. sthandler.sendMessage(msg);
  19. }
  20. }).start();
  21. }
  22. });

输入onvif用户名和密码,获取设备的rtsp url代码如下:

  1. //弹用户名和密码对话框
  2. final int index = position;
  3. LayoutInflater factory = LayoutInflater.from(ActivityDevice.this);
  4. final View textOnvifView = factory.inflate(R.layout.dialog_set_user_pwd, null);
  5. final EditText edit_onvif_user = (EditText) textOnvifView.findViewById(R.id.onvif_user);
  6. final EditText edit_onvif_pwd = (EditText)textOnvifView.findViewById(R.id.onvif_pwd);
  7. AlertDialog.Builder ad1 = new AlertDialog.Builder(ActivityDevice.this);
  8. ad1.setTitle("设置onvif用户密码:");
  9. ad1.setIcon(R.mipmap.set);
  10. ad1.setView(textOnvifView);
  11. ad1.setPositiveButton("保存", new DialogInterface.OnClickListener() {
  12. public void onClick(DialogInterface dialog, int i) {
  13. String url = OnVifNative.OnvifGetUrl(SYGbtDeviceApp.getInstance().urls[index], edit_onvif_user.getText().toString(), edit_onvif_pwd.getText().toString());
  14. if(url != null)
  15. SYGbtDeviceApp.getInstance().urls[index] = url;
  16. mAdapter.notifyDataSetChanged();
  17. //添加到map
  18. OnvifUser ou = new OnvifUser();
  19. ou.user = edit_onvif_user.getText().toString();
  20. ou.pwd = edit_onvif_pwd.getText().toString();
  21. SYGbtDeviceApp.getInstance().onvif_map.put(SYGbtDeviceApp.getInstance().deviceurls[index],ou);
  22. }
  23. });
  24. ad1.setNegativeButton("取消", new DialogInterface.OnClickListener() {
  25. public void onClick(DialogInterface dialog, int i) {
  26. }
  27. });
  28. ad1.show();// 显示对话框

 

打开demo app,搜索后会出现设备的url列表,点击输入onvif用户名和密码后会变成rtsp的url,如下图:

点击列表中指定的设备列表,可以进行设备的实时视频预览,如下图:

如果点击接入平台,注册到GB28181平台上后,平台上会出现1个带有5个视频通道的设备,点击任意通道都可以通过GB28181协议预览视频,如下图(以视跃的realgbs平台为例):

demo可免费下载并免费试用,下载地址

 

更多信息

e-mail: yujesoft@163.com

tel: 13971177602

web:www.founu.com

 

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号