手机Android音视频采集与直播推送,实现单兵、移动监控类应用
从安卓智能手机、平板,到可穿戴的Android Ware、眼镜、手表、再到Android汽车、智能家居、电视,甚至最近看新闻,日本出的几款机器人都是Android系统的,再把目光放回监控行业,传统监控中的移动终端设备,例如:单兵设备、手持设备、车载终端设备,包括家庭监控中用到的智能设备,都可以用Android系统替代了,不仅开发容易,而且易扩展,设备也更加智能了。...
Google I/O大会之后,不难看出安卓在Google的推进以及本身的开放性作用下,已经快延生到生活的各个方面了,从安卓智能手机、平板,到可穿戴的Android Ware、眼镜、手表、再到Android汽车、智能家居、电视,甚至最近看新闻,日本出的几款机器人都是Android系统的,再把目光放回监控行业,传统监控中的移动终端设备,例如:单兵设备、手持设备、车载终端设备,包括家庭监控中用到的智能设备,都可以用Android系统替代了,不仅开发容易,而且易扩展,设备也更加智能了。

图 - Android在手持设备中的应用
一步一步来,我们先实现Android手机的音视频采集与上传的实时监控功能。Google Code上有一个开源项目:spydroid-ipcamera,spydroid能在Android手机中建立一个精简的HTTP Server和RTSP Server,功能类似于一般的IpCamera,既能够通过网页访问摄像机并修改监控配置,还能通过http或者rtsp协议,获取监控的实时音视频,而且从其代码结构中,可以看出,spydroid已经实现了RTSPServer、RTSPClient、RTP、RTCP、H264、AAC...等等功能,总之,咱们需要的Utility都已经具备了,只要将这些功能组合到一块就能实现咱们要的直播需求了。

图 - Android实现IPCamera的功能
在之前的文章“基于Darwin实现的分布式流媒体直播服务器系统”中,我们用Windows的摄像头和麦克风分别采集音视频数据,编码成H264和AAC,再用RTP打包,推送到Darwin流媒体服务器,实现直播。同样,我们参考EasyIpCamera的设计方法,App启动后,连接并保活至中心管理服务器,接收来自CMS的控制命令。采集安卓摄像头视频和mic声音,进行H264和AAC编码(这里我们只参考spydroid实现了硬编码,软编码在后续中将会更新进来,不过经过尝试,目前大部分Android音视频采集都支持硬编码),再通过RTSP和RTP,将实时音视频数据推送到流媒体服务器,并由流媒体服务器进行转发和分发,实现直播。

图 - Android实现IPCamera的功能
这里主要就是RTSP/RTP的推送过程,这个在之前的文章“基于DSS的先侦听后推送式流媒体转发”中详细描述了这个过程,具体的推送代码也可以参考live555的DarwinInjector类实现,咱们这里直接修改spydroid中的RTSPClient就可以实现ANNOUNCE/SETUP/PLAY/RTP过程了,具体流程源代码及协议流程也可以参考“用Darwin和live555实现的直播框架”中的描述。
Android采集端下载:http://pan.baidu.com/s/1kTwrasB
EasyDSS(Win)服务器下载:http://pan.baidu.com/s/1ntoFSSh
EasyDSS(Linux)服务器下载:http://pan.baidu.com/s/1c0b6bUo
使用方法与文章“基于Darwin实现的分布式流媒体直播服务器系统”中EasyIpCamera的方法一致,只需要配置EasyDSS服务器CMS的地址和端口号,就可以接入到EasyDSS,后续所有流程与EasyIpCamera类似,只有当有客户端请求实时视频的时候才会推送音视频流,其他情况只与CMS连接保活,流媒体处于Idle状态。

图 - Android采集端配置界面
实时效果:经过测试对吧,延时性与网络和手机的相关性很大,不同网络条件,不同手机硬件,可能对比出的延时效果不一样,用三星Glaxy3手机,在网络情况比较好的情况下,实时音视频的延时大概在1.3s(公网传输)左右:

图 - 连续测试2'52',延时1.35s

图 - 连续测试9'17'',延时1.58s
未来还会继续扩展和优化Android实时音视频采集程序,包括加入录像、抓图、软编码、对讲、抖动控制、录像上传等等方面,欢迎大家共同交流和进步!
手机Android音视频采集与直播推送,实现单兵、移动监控类应用的更多相关文章
- 手机Android音视频採集与直播推送,实现单兵、移动监控类应用
最新手机採集推送直播监控以及EasyDarwin开源流媒体平台的版本号及代码: EasyDarwin 开源流媒体云平台:https://github.com/easydarwin EasyClient ...
- Android 音视频开发(七): 音视频录制流程总结
在前面我们学习和使用了AudioRecord.AudioTrack.Camera.MediaExtractor.MediaMuxer API.MediaCodec. 学习和使用了上述的API之后,相信 ...
- 基于EasyDarwin EasyPusher实现Android手机直播推送功能
EasyPusher直播推送在之前就已经稳定支持了Windows.Linux.ARM上的RTSP直播推送功能,配合EasyDarwin开源流媒体服务器,延时基本在1s以内,这个技术方案经过一年多时间, ...
- android音视频点/直播模块开发
音视频 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能,那么作为开发一个小白, ...
- Android音视频点/直播模块开发实践总结-zz
随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能.那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及 ...
- EasyPusher安卓Android手机直播推送之RTSP流媒体协议流程
EasyPusher移动端推送同我们平时用的RTSP直播推送流程一样,都是采用标准RTSP/RTP推送流程:ANNOUNCE->SETUP->PLAY->RTP/RTCP->T ...
- Android 音视频开发(一):PCM 格式音频的播放与采集
什么是 PCM 格式 声音从模拟信号转化为数字信号的技术,经过采样.量化.编码三个过程将模拟信号数字化. 采样 顾名思义,对模拟信号采集样本,该过程是从时间上对信号进行数字化,例如每秒采集 44100 ...
- EasyDarwin开源手机直播方案:EasyPusher手机直播推送,EasyDarwin流媒体服务器,EasyPlayer手机播放器
在不断进行EasyDarwin开源流媒体服务器的功能和性能完善的同时,我们也配套实现了目前在安防和移动互联网行业比较火热的移动端手机直播方案,主要就是我们的 EasyPusher直播推送项目 和 Ea ...
- EasyDarwin开源手机直播方案:EasyPusher手机直播推送,EasyDarwin流媒体server,EasyPlayer手机播放器
在不断进行EasyDarwin开源流媒体server的功能和性能完好的同一时候,我们也配套实现了眼下在安防和移动互联网行业比較火热的移动端手机直播方案,主要就是我们的 EasyPusher直播推送项目 ...
随机推荐
- JavaBean的boolean isXXX反序列化问题
JavaBean规范中规定boolean的getter/setter 为isXXX/setXXX,包装类Boolean的getter/setter 为getXXX/setXXX,其中XXX为变量名(I ...
- POJ 2075 Tangled in Cables (c++/java)
http://poj.org/problem?id=2075 题目大意: 给你一些人名,然后给你n条连接这些人名所拥有的房子的路,求用最小的代价求连接这些房子的花费是否满足要求. 思路: 昨天20分钟 ...
- 查看Linux下网卡状态或 是否连接(转)
1) 通过mii-tool指令 [root@localhost root]# mii-tool eth0: negotiated 100baseTx-FD, link o ...
- 实现ARC文件与MRC文件互转,和混合使用。
这段时间做项目是以MRC为主的 但是某些第三方现在都只能支持ARC了 找到了这篇文章 可谓是帮了大忙 亲测完全可用喔:-O 如何在未使用arc的工程中引入一个使用了arc特性的文件,如何在arc工程中 ...
- MIUI6&7桌面角标开源代码简介
MIUI6&7桌面角标开源代码简介 MIUI6&7上重新设计了桌面app图标的角标显示,基本规则如下: 一.基本介绍 1.默认的情况 当app 向通知栏发送了一条通知 (通知不带进度条 ...
- BestCoder冠军赛 - 1009 Exploration 【Tarjan+并查集缩点】
[题意] 给一个图,这个图中既有有向边,又有无向边,每条边只能走一次,问图中是否存在环. 最多10^6个点,10^6个无向边,10^6个有向边 [题解] 因为既有有向边又有无向边,所以不能单纯的用ta ...
- SpringMVC11文件上传
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- DownloadProvider调试
由于身边的同事离职,最近又接手了一个模块,DownloadProvider, 也就是安卓中自带的下载管理.此模块的代码量比较少,但是最近阅读代码却发现还是由不少知识点的.之前同事在此模块做了一个关于D ...
- 关于Jquery.Data()和HTML标签的data-*属性
人们总喜欢往HTML标签上添加自定义属性来存储和操作数据.但这样做的问题是,你不知道将来会不会有其它脚本把你的自定义属性给重置掉,此外,你这样做也会导致html语法上不符合Html规范,以及一些其它副 ...
- Python局部变量和全局变量global
当你在函数定义声明变量的时候,它们与函数外具有相同名称的其它变量没有任何关系,即变量名称对于函数来说是 局部 的.这称为变量的 作用域 .所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开 ...