这段时间工作上需要在Android设备上读取视频。摄像头用的是奥比中光的3D摄像头。我手上的摄像头的彩色通道使用的的UVC协议的。

在Xamarin上可用的UVC的封装基本上没有,只有一个小伙在Xamarin的论坛上说到可以绑定成功,并提供了测试的APK,可惜是是没有提供bind的库。

没有办法了,只能自力更生了。

一、绑定Java的AAR库

这里有三个原生库绑定:

  • usbcameracommon.aar
  • common.aar
  • uvccamera.aar

其中common.aar是最复杂的,里面有很多地方无法直接绑定,特别是CollectionMap,这里面很神奇的put函数怎么调整都无法绑定成功,最终只能去掉这个类了。

其他的绑定就比较容易了。

<metadata>
<attr path="/api/package[@name='com.serenegiant.media']/interface[@name='IRecorder']" name="managedName">IRecorder</attr>
<attr path="/api/package[@name='com.serenegiant.mediaeffect']/interface[@name='IEffect']" name="managedName">IEffect</attr>
<attr path="/api/package[@name='com.serenegiant.utils']/class[@name='CollectionMap']/method[@name='entrySet' and count(parameter)=0]" name="managedReturn">System.Collections.ICollection</attr>
<attr path="/api/package[@name='com.serenegiant.utils']/class[@name='CollectionMap']/method[@name='get' and count(parameter)=1 and parameter[1][@type='java.lang.Object']]" name="managedReturn">Java.Lang.Object</attr>
<attr path="/api/package[@name='com.serenegiant.utils']/class[@name='CollectionMap']/method[@name='remove' and count(parameter)=1 and parameter[1][@type='java.lang.Object']]" name="managedReturn">Java.Lang.Object</attr>
<attr path="/api/package[@name='com.serenegiant.utils']/class[@name='CollectionMap']/method[@name='values' and count(parameter)=0]" name="managedReturn">System.Collections.ICollection</attr>
<attr path="/api/package[@name='com.serenegiant.utils']/class[@name='CollectionMap']/method[@name='put' and count(parameter)=2 and parameter[1][@type='K'] and parameter[2][@type='java.util.Collection&lt;V&gt;']]" name="managedReturn">Java.Lang.Object</attr>
<attr path="/api/package[@name='com.serenegiant.utils']/class[@name='CollectionMap']/method[@name='put' and count(parameter)=2 and parameter[1][@type='K'] and parameter[2][@type='java.util.Collection&lt;V&gt;']]" name="managedReturn">Java.Lang.Object</attr>
<attr path="/api/package[@name='com.serenegiant.utils']/class[@name='CollectionMap']/method[@name='put' and count(parameter)=2 and parameter[1][@type='K'] and parameter[2][@type='java.util.Collection&lt;V&gt;']]/parameter[2]" name="managedType">Java.Lang.Object</attr>
<attr path="/api/package[@name='com.serenegiant.mediaeffect']/class[@name='MediaEffect']/method[@name='resize' and count(parameter)=2 and parameter[1][@type='int'] and parameter[2][@type='int']]" name="managedReturn">Com.Serenegiant.Mediaeffect.IEffect</attr>
<attr path="/api/package[@name='com.serenegiant.mediaeffect']/class[@name='MediaEffectGLESBase']/method[@name='resize' and count(parameter)=2 and parameter[1][@type='int'] and parameter[2][@type='int']]" name="managedReturn">Com.Serenegiant.Mediaeffect.IEffect</attr> <remove-node path="/api/package[@name='com.serenegiant.widget']/class[@name='AspectScaledTextureView']/method[@name='setSurfaceTextureListener' and count(parameter)=1 and parameter[1][@type='android.view.TextureView.SurfaceTextureListener']]" />
<remove-node path="/api/package[@name='com.serenegiant.utils']/class[@name='CollectionMap']" />
<remove-node path="/api/package[@name='com.serenegiant.widget']/interface[@name='CustomRecycleViewListener']" />
<remove-node path="/api/package[@name='com.serenegiant.glutils']/class[@name='EGLBase10']" />
<remove-node path="/api/package[@name='com.serenegiant.glutils']/class[@name='EGLBase14']" />
</metadata> 由于一个Android绑定库只能绑定一个aar,绑定好以后再引用到主项目是有问题的,所以有引用关系的绑定库之间还需要各自引用相关的的绑定库。

二、绑定Native库

Native库的绑定十分纠结,默认找到的库是armeabi-v7a的,在Android原生的环境下可以运行,但是在Xamarin的Android死活不能运行,指认arm64-v8a的库。

下载了UVCCamera源代码生成了arm64-v8a后,程序可以运行起来,可是初始化摄像头的时候出现“could not open camera:err=-1”,这个在官网看了一下,大多提到了NDK的问题,VS2019安装的NDK是1.9的。因此删除后重新安装1.4的,结果就正常了。

详细代码参见GitHub

 

Xamarin Android 绑定 UVCCamera的更多相关文章

  1. Xamarin.Android绑定库分享

    使用Xamarin.Android时,会用到各种第三方库,而这些库基本上是java编写的,要在Xamarin.Android中使用这些库,就需要通过Android Binding Project绑定对 ...

  2. Xamarin.Android 绑定友盟社会化分享组件

    Xamarin.Android 绑定友盟社会化分享组件 最近在开发博客园Android App的时候需要用到友盟社会化分享组件,在github上搜了一下都没有找到最新版本绑定好的项目,就自己动手来绑定 ...

  3. xamarin.android 绑定百度地图SDK遇到的问题

    在 xamarin.android 绑定项目中,绑定 百度地图的LBS地图SDK,参考 https://developer.xamarin.com/guides/android/advanced_to ...

  4. Xamarin Android绑定微信SDK

    现在几乎所有的APP都集成了向微博,微信等社交平台分享的功能.这些社交平台官方也提供了SDK让开发者使用,对于Android和IOS平台而言,只需要下载官方的SDK,按照官方说明文档进行集成就可以轻松 ...

  5. Xamarin Android 绑定jar库同时将so库打包进去

    1.在创建的Bindings Library项目中,新建Assets目录: 2.Assets目录下再分别创建armeabi,armeabi-v7a,x86三个目录: 3.将so文件分布copy到三个目 ...

  6. xamarin.android listview绑定数据及点击事件

    前言 listview是用来显示数据列表的一个控件,今天给大家带来如何使用cursor进行数据绑定以及点击事件. 导读 1.如何创建一个listview 2.如何使用cursor进行绑定数据 3.li ...

  7. Xamarin.Android通知详解

    一.发送通知的机制 在日常的app应用中经常需要使用通知,因为服务.广播后台活动如果有事件需要通知用户,则需要通过通知栏显示,而在Xamarin.Android下的通知需要获取Notification ...

  8. Xamarin. Android实现下拉刷新功能

    PS:发现文章被其他网站或者博客抓取后发表为原创了,给图片加了个水印 下拉刷新功能在安卓和iOS中非常常见,一般实现这样的功能都是直接使用第三方的库,网上能找到很多这样的开源库.然而在Xamarin. ...

  9. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解

    原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...

随机推荐

  1. 解决ubuntu终端无法输入中文的问题

    解决ubuntu终端无法输入中文的问题 来源: https://my.oschina.net/lvhongqing/blog/851922 首先把中文语言包安装上 打开 /var/lib/locale ...

  2. Visual Studio Code配置GoLang开发环境

    Visual Studio Code配置GoLang开发环境 在Visual Studio Code配置GoLang开发环境 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页: ...

  3. Vue神之大坑处理:获取通过URL的的参数不可直接操作

    比如: $router.query['isZero'] == 'false';  //不会生效,刷新页面又好使了.打印处理是蓝色的false,再次刷新字体就变浅黑了. 解决:($router.quer ...

  4. 使IIS服务器支持下载 apk/ipa 安装包

    默认情况下,使用IIS作为Web服务器的无法下载此文件,访问会触发404错误,服务器找不到对应资源. IIS服务器不能下载.apk文件的原因:iis的默认MIME类型中没有.apk文件,所以无法下载. ...

  5. 【Spring】Service 注入失败,空指针

    service层的类都有用@Service标识,但报空指针,注入失败,很可能是因为spring的application配置和springmvc的配置文件配置错误,导致容器冲突了. spring和spr ...

  6. 洛谷 P2347 砝码称重

    P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...

  7. HTML实体与网页编码(汉字转化为了html实体) .

    http://blog.csdn.net/f438952359/article/details/7481267 HTML实体与网页编码(汉字转化为了html实体) . htmlencodingfunc ...

  8. Windows Forms 窗体篇

    1,显示窗体 非模式: Form form = new Form(); form.Show(); 模式: Form form = new Form(); form.Show(); 2,拥有者窗体与附属 ...

  9. python登录验证程序

    自己写的一个python登录验证程序: 基础需求: 让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后退出程序 升级需求: 可以支持多个用户登录 (提示,通过列表存多个账户信息) 用户3次认证失 ...

  10. ajax获取服务器响应信息

    window.onload = function(){ document.getElementById('btn').onclick = function(){ var req = new XMLHt ...