主要需要实现的功能是在Android手机上实时采集视频,并在远程比如PC机上实时显示出来,也就是以android手机作为监控摄像头。

一开始查到的是smartcam的一个开源项目,看了下源代码,发现其实现原理是利用Android 的camera图像的预采集,通过实现PreviewCallback类的回调函数onPreviewFrame,获得camera采集的原始图像数据之后,压成jpeg格式传到pc端。pc端对接收到的jpeg图像序列进行实时解压和显示,就达到了预想的效果。

虽然这种方式稍微显得比较笨拙,这个方式还可以接受。但是不可接受的是jpeg只是帧内压缩,320x280的图片序列,FPS大概是10上下,网络流量就到达了100kb/s以上。这个几乎是无法实际应用的。

于是必须直接传视频流,MPEG4或者H.264格式。貌似我的开发机上(HTC G8)只支持到MPEG4,所以还是选取MPEG4。但是如何实时采集视频流是一个大问题,毕竟在video方面,Android并没有提供一个类似于OnPreviewFrame的回调函数。

想到用opencore或者更为新一点的stagefright,大概看看了其sdk的框架后,马上泄气了,这个太庞大了。在 http://www.linuxidc.com/Linux/2011-04/34468.htm的帖子中提到一个很好的解决方案,就是利用MediaRecorder:MediaRecorder的输出路径(其实叫file descriptor)除了是本地文件路径之外,还可以绑定socket端口。也就是说,通过一个socket端口,就可以实时获得MediaRecorder的视频流数据。

(其实上面博客的内容可以在开源项目sipdroid 的 videocamera文件中找到,但是非常感谢博客主人zhangzhenj对网友提问的回答,赞一个。)

通过socket接收的视频流与直接写在本地文件的视频流数据有点不一样,因为是通过socket传输,就无法对视频文件的回写,通常MediaRecorder结束录像的时候都会对视频文件进行回写处理,这样才可以被播放器播放。所以通过socket接受到的数据,保存下来是无法播放的。16进制方式查看了一下其输出文件,发现其前32byte都是00,紧接着就是mdat。问题就出现在这了:缺少了一个ftyp box 的描述(28 bytes)以及mdat的长度描述(4 bytes).网上已经有人顺利解决这样的问题,在数据中查找moov的起始位置,发现前面会有ftyp的描述,长度刚刚好28bytes。你可以copy这28bytes到文件开始的28byte中。这ftyp的描述是从moov的起始位置 的前32byte开始一直到前4byte(后面4byte是moov的长度描述)。然后mdat的长度就是 moov的起始位置 减去 0x20,道理就不解释了。然后把这个值写到mdat的前面4byte。刚刚好填满32byte,之后就能顺利播放了。

保存好的文件能播放之后,最后一个问题,如何在实时显示这个视频流呢?查看一下mpeg4的文件格式,很快就会知道答案,答案就在mdat中。mdat之后紧跟的就是视频媒体数据,每一帧以 00 00 01 b6 为开始标志,貌似没有结束标志,分帧的话估计要用这个。开始标志后紧接着的两bit就是I、P、B帧的标志了,分别对应值为00,01,10,记住是两bit不是两byte

好了,把mdat的一帧数据取出来,可以用ffmpeg解码,然后显示,这样的路子是可行的,不过细节还是有点麻烦,关键是ffmpeg在解码mpeg4的时候一定要先指定width和height,否则解码失败。

大概思路就是这样了,完整的代码还没出来。

转载自:http://blog.sina.com.cn/s/blog_6568e7880100ttcd.html

Android用MediaRecorder实现MPEG4视频监控相关推荐

  1. Android视频监控实现(一)

    作者:华清远见 第一章 系统简介 近年来,视频监控市场的发展已经进入高速时期,与此同时,随着国内各大运营商对基础网络建设的巨大投入,快速地推动了网络摄像机在各个领域的快速发展应用.安卓在Google的 ...

  2. android 视频监控相关(打包下载)

    前段时间因为要做一个演示的Demo,了解了下视频监控相关的资料,整理了下,放在这里,以后说不定能用上. 一.手机监控-(效果图) 这是监控源(目前为我的电脑自带的摄像头) 这是手机上的截图 二.现场视 ...

  3. Android 之视频监控

    Android 视频监控已经有示例了,如http://www.open-open.com/lib/view/open1346400423609.html完全可以实现简单的监控功能.但是,如果想要在手机 ...

  4. android wifi视频监控软件,WiFi环境下Android智能视频监控系统研究与实现

    摘要: 在互联网飞速发展和移动互联网强势崛起的时代,科技产品服务于普通生活是新兴行业必然的发展趋势;监控系统是物联网时代各个领域必然争取的可控制系统.随着无线技术和移动终端设备的高歌猛进,移动终端智能 ...

  5. Android使用MediaRecorder和Camera实现视频录制及播放功能整理

    转载请注明出处:http://blog.csdn.net/woshizisezise/article/details/51878566 这两天产品经理向我丢来一个新需求,需要在项目里添加一个视频录制的 ...

  6. android jmf,基于JMF与Android的无线视频监控系统的设计与实现

    摘要: 视频监控系统是一种防范能力很强的综合系统,是安防领域的重要组成部分.随着无线网络与流媒体传输技术的飞速发展,视频监控系统也朝着无线化,高清化,智能化的方向发展.针对这一需求,通过研究JAVA多 ...

  7. Android视频监控!!!随时随地监控你的家庭

    Android视频监控!!!随时随地监控你的家庭 欢迎交流QQ:1210530255

  8. android 远程视频监控程序源码,详解基于Android已开放源代码的远程视频监控系统教程...

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.Socket的英文原义是"孔"或"插座".通常也称作"套接字 ...

  9. 视频监控客户端-GB28181之转码库-转码格式支持H265、H264、MPEG4、MPEG2

    视频监控客户端-GB28181之转码库-转码格式支持H265.H264.MPEG4.MPEG2 如需交流可联系QQ:123011785 转码库的基本内容是通过ffmepg的函数进行转码,主要针对市面上 ...

  10. android同时预览多个监控,基于VLC的Android多路视频监控系统.pdf

    2013年12月15日 现代电子技术 Dec.2013 第36卷第24期 ModernElectronicsTechnique Vol.36No.24 63 63 基于VLC 的Android 多路视 ...

最新文章

  1. 十步图解CSS的position
  2. Google Play 关联了
  3. 【转】解决:ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode
  4. Linux 软件的安装
  5. 并发编程面试题(2021最新版)
  6. protobuf入门教程(三):常用序列化/反序列化接口
  7. JVM从入门到精通(三):热加载的实现原理,Java内存模型,缓存行,指令重排,合并写技术等
  8. ibatis mysql sqlmapconfig_iBATIS sqlMapConfig配置详解
  9. redis rua解决库存问题_如何解决高并发下的库存安全问题,没你想得那么复杂(附源码)...
  10. Oracle Segments可以跨多个data files吗?
  11. WebBrowser是IE内置的浏览器控件
  12. Linux系统上安装JDK和Tomcat服务器
  13. wordpress 更新以及下载插件:wordpress 安装失败:无法创建目录
  14. asp.net开源项目及学习资料
  15. 360安全卫士加速球误关闭某个应用软件
  16. 三菱伺服驱动器说明书_干货——PLC控制伺服系统(伺服电机)
  17. Unity3d和连接MySQL数据库实现登陆注册等功能
  18. 关于Cookie和Session
  19. glib实现Socket通信
  20. 南通java行业,南通java技术培训中心

热门文章

  1. linux下如何查看tlq服务,谁能跟我讲解一下bashrc?
  2. C++:单例模式——线程安全模式、饥汉模式、懒汉模式
  3. 别错过!漂亮又好用的思维导图模板
  4. linux 取消u盘写保护,如何关闭u盘写保护?u盘写保护怎么去掉?
  5. ​5项人工智能实例,令人惊叹!
  6. 计算机网络系统承接查验,智能化系统承接查验.doc
  7. HCDA(华为认证数据通信工程师)-华为培训认证
  8. 关于子网的网络地址和广播地址的计算问题的方法
  9. linux qt 多点触摸,【转】基于Qt, TUIO和TSLIB的嵌入式Linux下的多点触摸设计
  10. TwinCAT3实现OPCUA通讯问题总结