公司有一个新Android项目需求是要对网络摄像头抓拍功能,看似简单,确也有点小麻烦。

遇到的一些问题及解决思路:

         1 怎么获取RTSP流地址

         2 获取到流地址后播放要输密码,如何自动输入

         3 在播放视频时如何进行抓拍       

解决思路:

    1 在找资料时发现网络摄像头的标准协议ONVIF, 通过ONVIF协议可以获取到RTSP流地址。

       使用的工具为ONVIF Device Test Tool,后面发现只要IP和端口号知道就可以确定流地址了,

       比如 rtsp://@172.16.1.236:554,本来是想把ONVIF协议,发现客户需要比较简单,就没加进去了。

    2  可以把帐号和密码包含到流地址里去,这是RTSP协议的标准,比如帐号密码为admin它的地址

        为:rtsp://admin:admin@172.16.1.236:554

    3 播放视频时进行抓拍,这个花时间最多了,好多坑。主有的解决思路:

      1)找MediaPlayer是否有这个接口-------------目前大部分平台是没有的

      2)使用SurfaceView显示视频,并保存当前一帧画面---------------找了网上一些资料看似可以但确不行,有可能可以,没深入研究。

     3) 使用ONVIF协议获取抓拍地址,有的网络摄像头是有实现这个功能,只是有的。------------因为摄像头不支持,此路不通

     4) 使用带有拍照功能的软解码库,进行解码视频,然后再抓照。------------------成功

            在网上找了个例子,使用VLC进行解码,有带抓拍功能,一开始的时候就已经找到了,

             只是觉得有其他方法就没有重视,后面绕一圈还是使用这个。

           资源下载地址:。在原有的基础上进行了一些修改:

          1)修改APK名字  2)修改BUG退出再进后无法显示视频问题 3)加入按2次返回退出功能 

           4)录像不能使用,隐藏录像按钮 5)启动时显示“正在连接摄像头。。。”


总结:

      这个小功能大概花了一天多,认识了网络摄像头的一个标准协议ONVIF,抓拍功能没有提供相关接口情况下还是会比较麻烦 (大牛可以忽略。。。)