前一段事件做了一个在android平板上跑usb摄像头的程序,该程序不许要camera框架,仅仅是调用了jni,其实和大部分

播放器的原理一样,只不过一个数据是从视频文件中读取出来的,而一个是从camera摄像头里面取出来的。

        具体代码不能贴出来但是我可以把原理说一下,你们按照这个过程就可以搞定了,你可以拿作设计的方案,最起码我可以告诉你

这个方案是可行的。

        要想一块平板能够支持usb摄像头,首先你得有usb口,因为大多没有usb口的设备都是只支持usb slave 而不支持usb host

而我们需要的是usb host,第二你的平板中要有相应的摄像头驱动,一般的通用摄像头都是v4l2+uvc 2个框架模块。

        这里我得友情提示一下了,如果你作的是系统性的 ,肯定是ok的,如果你作的是apk,这里就有一个问题了,因为当摄像头

设备被设别的时候,有些厂家会把自动生成的设备节点的权限设定为不可读,这样你可以放弃了,所以你得有心里准备。

      如果以上问题都没有问题,那么下面的就可以走入正题了,首先从摄像头取出数据,然后对每一帧进行解码,然后转换成RGB565

,最后直接丢到surface的画布上就行了。路线是  读数据-》解码-》转换RGB565-》丢给surface。

      怎么解码转码就不多说了,但是上来肯定要解码,一半的图片传输数据都是被压缩过的。下面说一下怎么丢给surface的问题,开始我们

是用C++创建的surface对象,然后用lock,unlock进行数据的推送,这样肯定是没问题的,如果你都是靠命令运行的话,但是如果做成apk

你会发现从java端用的jni是没有权限创建surface的,所以c++创建surface是行不通的。

        那么就只能在java层创建一个surfcaeview,然后把对象传到jni层,以指针的形式,同时把surfaceview的2个重要函数lock,unlockAndpost(名字

可能不对),也以指针的形式传到jni层,这样在jni 层就可以对java的surface进行数据的操作了。

        按照我说的是肯定行的通的,但是得满足我所说的条件,还有一点就是如果是用ffmpeg软解码,帧率可能有点慢,这和surface的大小,图片的分辨率都有关系

,好了就说这么多了,具体的操作得你们自己研究了,你要学会如何用c层如何调java。

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. Android实践——密码本SecretBook
  3. android上传图片并附带上传数据,文件流
  4. [置顶] Android即时通信软件设计(一)(网络通信)
  5. [置顶] 【Android】ListView、RecyclerView、ScrollView里嵌套Li
  6. Serializable 都这么牛逼了,Parcelable 还要你何用?
  7. 对Android中的Cursor一些浅显见解
  8. 视频日志之android的总结与思考
  9. Android应用开发笔记(4):再探Android多应用间数据共享机制,自定义C

随机推荐

  1. Android(安卓)应用桌面角标显示各厂商规
  2. Android开发学习笔记之 Service 的使用
  3. android 借助AccessibilityService实现模
  4. Android(安卓)Studio实现一个PC和Android
  5. [置顶] 关于Socket的简单解析
  6. android入门-----dhcp服务(上)
  7. Android拾萃 - RxJava5种响应类型的区别和
  8. 在Android设备上安装kali的最佳方案与Lin
  9. Android(安卓)仿2016版京东筛选
  10. Android炫酷之动画简记