项目需求,android手机向服务器推送视频。苦战几个星期终于实现,现记录下来以免以后忘记。

没做过Java,也没做过Android开发,只能现学现卖。在网上找了下搭建开发a  ndroid环境资料,有一篇写的

比较仔细,地址是http://www.cnblogs.com/zoupeiyang/p/4034517.html。文章介绍了如何搭建Java环境,如何搭建Eclipse环境等。其实Eclipse不用搭建,现在有android studio了,直接从Google官网下载并安装即可。

环境搭建好后,可以开始写个简单的程序玩玩。Androidstudio 自带模拟器。在没有外界手机的情况下,执行Run后模拟器自动加载。你写的程序被下载到模拟器并成运行态。这一步不出意外的话轻松通过,说明你可以使用android studio开发了。

Ok,接下来理思路第一步如何获取摄像机视频流。再次在网上找了下资料:有人移植编码库到andorid平台,这方法肯定可行,但工作量一定不小。有人通过Android API 录制视频来获取视频流同时还给出了参考代码。这个方法的可行性大点。决定就这么干。

我将参考代码copy到开发环境里,结果一堆代码被划上斜杠,意思是说已经有新的API取代。去google官方网看了下发现Camera相关的API 5.0版本动了大手术.Camera 模块很多功能被Camera2模块取代,Camera2模块使用范例却很少。我在git-hub上找到了camera2 MediaRecorder相关的demo 折腾了半天编译通过,放在模拟器上也能运行,下载到手机上其实很多API找不到。坏了,手机版本太旧。我们的手机程序是面前大众的,大部分人手机版本应该都不是6.0。还得用以前的版本,4.4版本基本可以满足要求。看来还得用以前的API.

我担心被废弃的API无法在心的环境里运行,试图下载老板的SDK,不幸的是Google官方只有最新的。死马当活马医,且试试编译老版API。居然编译通过。可以进行到下一步了。

使用Android API实现录像功能,这个很容易实现,按照demo来即可。默认录像的路径是文件录像路径。我需要实时截获视频流并发出去,录像路径就不能是文件路径,而是输入流。建立一个本地socket链接,将socket输入端描述符作为录像路径。可以从socket输出端拿到视频数据。可以发送数据了。

我们的是服务端是个httpServer,手机端通过http直接推送是视频即可。android自带HttpUrlConnection可以发送数据,要命的是它不支持长连接。视频数据持续不断,用这个库的话讲会一直在创建连接、关闭连接。这是行不通的。思之再三,觉得用websocket。Git-hub中有实现websocket客户端源码,很容易合到现有的代码里。至此,手机端开发基本完成。需要注意下,websocket每次SendMessage后要稍微sleep下。要不在服务端接收到数据将是错误的。

如果要实现流共享,手机端录制视频的格式需要是mepgts。你将录制的mpegts用uedit打开会发现,同步头信息以及264的SPS,PPS只出现一次。客户端向服务端发送请求视频流命令后,服务端手机要讲同步信息及SPS,PPS信息发送个客户端,这样客户端解码器才能解码。

android手机推送视频到服务端的更多相关文章

  1. 使用极光推送(www.jpush.cn)向安卓手机推送消息【服务端向客户端主送推送】C#语言

    在VisualStudio2010中新建网站JPushAndroid.添加引用json帮助类库Newtonsoft.Json.dll. 在web.config增加appkey和mastersecret ...

  2. Android 极光推送造成IM服务绑定失败bug

    由于极光推送对8.0的支持问题,升级到了最新版本的极光推送.但是最新版本的极光推送,默认将推送服务设置到了新的进程里面,由此引发 Android 极光推送多进程造成的application运行两次 和 ...

  3. 极光推送>>java SDK服务端集成后台项目(使用详解)

    PS:如果你是第一次用推送,那就直接按照我的步骤来,再去看官方文档,这样,更容易能理解操作流程.还有——-请耐心看 极光文档(java SDK)请参考 [ 极光文档 ] 步骤一: 首先,你必须在 [极 ...

  4. 极光推送Jpush(v3)服务端PHP版本的api脚本类

    原文地址:http://www.dodobook.net/php/780 关于极光推送的上一篇文章已经说明了,此处就不多说了.使用v3版本的原因是v2使用到2014年年底就停止了.点击查看上一篇的地址 ...

  5. 极光推送Jpush(v3)服务端PHP版本集成(V3版本只调用推送API)

    因为版本升级,极光推送的API也有了V3,功能也更丰富了,但是对于我们有的用户来说,我们还是只需要调用推送的API就够了. 下载了一份PHP服务端的SDK(下载地址:http://docs.jpush ...

  6. 信鸽推送 .NET (C#) 服务端 SDK rest api 调用库(v1.2)

    信鸽推送 .NET  服务端 SDK rest api 调用库-介绍 该版本是基于信鸽推送v2版本的时候封装的,先拿出来与大家分享,封装还还凑合,不依赖其他http调用件,唯一依赖json序列化dll ...

  7. 友盟推送 .NET (C#) 服务端 SDK rest api 调用库

    友盟推送 .NET SDK rest api 介绍 该版本是基于友盟推送2.3版本封装的,网上查询了下发现没有.NET版本的调用库,官方也没有封装.NET的版本,只有python.java.php版本 ...

  8. Android融合推送MixPush SDK集成多家推送平台,共享系统级推送,杀死APP也能收到推送

    消息推送是App运营的重要一环,为了优化消息推送成功率,降低电量和流量消耗,系统级的推送服务显得尤为重要.小米和魅族由此推出了自家的推送平台,在MIUI和Flyme上共享系统级推送服务,让APP在被杀 ...

  9. 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表

    1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...

随机推荐

  1. Android开发之AlarmManager详解

    AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver ...

  2. php中使用PHPExcel操作excel(xls)文件

    读取中文的xls.csv文件会有问题,网上找了下资料,发现PHPExcel类库好用,官网地址:http://phpexcel.codeplex.com/ 1.读取xls文件内容  代码如下 复制代码 ...

  3. 密码强度的js插件(完成)

    效果如下图: 低:

  4. 20150515--关于IIS的备忘(WIN7)

    一.IIS服务位置: 1)控制面板--程序和功能 2)点击打开或关闭Windows功能, 3)Internet服务信息(英文:internet information services)--Web管理 ...

  5. PHP的接口(interface)

    接口声明了函数和字段,但不会给出实现的细节 规则: 1.类全部为抽象方法(不需要声明abstract) 2.接口抽象方法必须是public 3.成员(字段)必须是常量 interface Comput ...

  6. UI布局

    1,初始化控件一般在onCreate()中完成,由于构造器中尚未完成控件加载,不能在其内初始化控件. 2,Activity子类必须含有无参构造.Intent.startActivity()方法调用的是 ...

  7. ESB数据发布思路

    通过esb已经将数据采集进数据库,现在需要开放一个接口,接受请求参数,进而通过参数进行数据查询,返回一段json格式的数据. ▼流程图: 刚开始尝试了很多个版本,可能是esb开发工具还用不熟练的原因吧 ...

  8. startup.bat闪退---tomcat环境变量配置中遇到的问题

    常用的方法: 1.在已解压的tomcat的bin文件夹下找到startup.bat,右击->编辑.在文件头加入下面两行: SET JAVA_HOME=D:\Java\jdk1.6.0_10   ...

  9. 返璞归真vc++之字符类型

    在今天,大量使用java与.net的程序员已经很少去真实了解字符的底层表达,但是使用VC++编程,对字符的处理却非常慎重,刚学习vc++肯定会为其中的字符类型给晕头转向,今天本人学习第一节,从字符开始 ...

  10. php下载文件,添加响应头

    //下载,添加响应头信息 header('Content-type:application/octet-stream'); header('Content-Disposition:attachment ...