最近工作涉及一个视频监控的项目
平台:Android 2.3 /4.0
需求:能够同时本地录像、拍照(或是抓图)、远端实时视频监控
目前状态:同时录像、拍照、远端实时监控(目前只限于局域网)已经实现
技术涉及面:Android Camera Driver、Hal、Native(CameraServer、MediaRecoder等)、Jni、以及Java层应用
RTP、RTSP、H264数据格式、MP4数据格式的方面的内容
目前技术难点:
1)网络传输的稳定性(由于基于UDP可能存在这些方面的隐患、面前在调试中)
2)3G网络穿越技术(目前难点、现在只能在局域网络内使用)
就目前技术难点,求技术分享,希望有高人能够指点一二。
目前我可以分享的技术包括 Driver层、Hal层、Native层、包括应用层我也可以提供一些开源的项目代码供参考,求教外网服务器通过3G访问终端的方法。
1.每一帧都包装一个编号,当达到一定的值时还未获取到该编号的帧,则发送给客户端去获取
2.你说的穿越应该是穿透吧,你可以在客户端发送心跳包(间隔一段时间发送一个信息)到服务器端,维持客户端开放的接口,当服务器端需要发信息给客户端的时候,你可以通过该连接的地址和端口发送
嗯是的,如果服务器是在外网的话,发送心跳机制,保持连接应该是没有问题的(一般应该是基于UDP,目前在验证过程中),但是如果要基于TCP,用于信令交互的话,用socket其实是绑定port的,如果设置为复用模式,即两个socket复用一个ip:port,一个用于发送TCP 注册信息给服务器,在NAT端形成映射表,另一个socke用于监听服务器主动发送过来的信令,这中方式还需要试一下。
以及3g模式 APN方式也是需要考虑的,CMWAP、CMNET,冒失只是选择CMNET才行。
这一切还在研究过程中,由于Android java应用层,不很熟悉,以前主要精力在driver和framework,所以一些具体实现还在调研过程中,如果有感兴趣的同仁,可以向我咨询我现在已有的damo,在上面做实验,把结果告诉我。
谢谢
@AdiSky: 不客气!CMWAP不行,是不是因为他属于代理上网的,从理论上来讲不管是不是代理,都能够让服务器端的Socket访问客户端,因为他总会开放一个Port给你客户端的Socket,当然具体的我也没有试验过,或者其他的原因可能我没有考虑到!
@AdiSky: 你好!你的那个功能实现了没有,我现在也在做和你类似的一个工作,不知道你的 ( “但是如果要基于TCP,用于信令交互的话,用socket其实是绑定port的,如果设置为复用模式,即两个socket复用一个ip:port,一个用于发送TCP 注册信息给服务器,在NAT端形成映射表,另一个socke用于监听服务器主动发送过来的信令,这中方式还需要试一下。” ) 这个测试有结果了吗?
我现在内网的端口复用成功了,但是我的外网给内网用于监听的socket发送数据时,不能连接,出现连接超时,不知道你有遇到这个问题吗?
这个我倒是可以帮你一下,只是没有demo测试,如果可能可以发给我一个demo,我在上面试试看,以前做过外网pc访问安卓手机的东西,手机插一张联通3G上网卡,后来发现3G上网卡是内网IP,要么换成APN,但很麻烦,服务器必须做个数字链路也连到APN网络,费用太高,每月2M的要1880
对了,我的QQ:216980