最近手机安装了一个“千里眼”和千里眼家居远程监控的应用,对里面的实时监控交通路口的状态有点好奇。以是使用相应的方法反编译看看她的原理。
对于软件“千里眼”,经过代码的翻看,发现采用的是VideoView中访问RTSP实时视频流的思路实现的。
反编译后的代码
String str = getIntent().getStringExtra(
"rtsp"
);
if
(str !=
null
)
{
VideoView localVideoView3 =
this
.videoView;
Uri localUri = Uri.parse(str);
localVideoView3.setVideoURI(localUri);
}
|
软件千里眼家居远程监控采用的是另外一种思路:
从反编译代码可以看出
boolean
bRunning =
true
;
Handler handler;
String htmlCode =
" <embed style='width:100%; height:100%' src='http://www.3gjiaoshi.com:8080/FLVPlayer.swf?fullscreen=true&video=@VIDEO@' autoplay='true' quality='high' bgcolor='#000000' name='VideoPlayer' align='middle' + width='320' height='240' allowScriptAccess='*' allowFullScreen='true' type='application/x-shockwave-flash' />"
;
String htmlPost =
"</body></html>"
;
String htmlPre =
"<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"utf-8\"></head><body style='margin:0; pading:0; background-color: black;'>"
;
AdView m_adv =
null
;
String m_strVideoPath;
WebView webView;
代码可以看出是通过Flash以及WebView的方式实现的。
经过两个项目的分析,我可以确认相应的实现思路了。本系统的架构分为三层。
1 视频实时监控层
2 视频RTSP传输控制层
3 Android手机层
第一层可以通过很多不同的方法来实现。
1 使用我们普通的摄像头,然后通过FFMpeg来获取视频流。
2 通过特殊专用的监控摄像头或者摄像机之类。然后根据摄像机的API来构造获取视频流。可以参考海康家的解决方案。之前在做某监控项目用过她家的卡,效果非常不错。
第二层的方法也很多。
1 使用FFMpeg项目的里面的FFServer来实现,可能会有延迟,但是最容易演示。
<
Feed
feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 200K
</
Feed
>
|
然后使用FFMpeg将摄像头的视频重定向到/tmp/feed1.ffm中。
ffmpeg -f video4linux -s 320*240 -r 15 -i /dev/video0 http://localhost:8090/feed1.ffm
|
在外面就可以通过
./ffplay http://localhost:8090/feed1.ffm 访问视频流了
|
这种方式目前不能商用,只能演示。商用可能需要对FFServer做很大的修改。比如将其中的select模型改为epoll或者其他。开发的时候,FFServer估计是为了保证在windows以及Linux中的兼容性而采用select模型的。
2 使用Helix家的解决方案,收费比较高。
3 使用开源的gst-rtsp-server实现。
4 使用Flash Media Server来实现。
第三层方法可以是两种
1 使用VideoView实现。
2 使用Flash的方式实现LiveStream(对应与Flash Media Server的实现)。
参考文章:
1 http://blog.sina.com.cn/s/blog_53b3dc830100mrd0.html
2 http://www.ffmpeg.org/ffmpeg.html
3 http://blog.csdn.net/seforna/article/details/3486227
4 http://blog.csdn.net/saphy/article/details/5472990
5 http://yjaps26.blog.163.com/blog/static/24483312200861091059866/
6 http://www.adobe.com/devnet/flashmediaserver/articles/webcasting_fme.html
7 http://blog.sina.com.cn/s/blog_46d93f190100us5h.html
8 http://general.blog.51cto.com/927298/200088
9 http://people.freedesktop.org/~wtay/
10 http://cgit.freedesktop.org/gstreamer/gst-rtsp-server/
11 http://blogs.gnome.org/uraeus/2008/10/13/gstreamer-rtsp-server/
12 http://gstreamer.freedesktop.org/download/
13 http://blog.csdn.net/wangjia184/article/details/6422971
14 http://www.cnblogs.com/yjmyzz/archive/2010/03/15/1686274.html
15 http://rg4.net/ezstreamsvr(封装了一个流媒体传输服务器端)