2024年5月29日发(作者:)

基于树莓派的安卓视频监控(v1.1)

顺应潮流,我最近也在玩Android编程。买了本《疯狂Android讲义》,看了几天,觉得

应该弄个小项目练练手,就想能不能在安卓上实现视频监控呢?

之前已经实现了mjpg-streamer的网络视频监控。网络上也有做WiFi小车的论坛,他们

已经实现了安卓端的程序,里面就包含远程视频显示。下载他们的早期版本开始研究(最新

版不开源),发现和mipg-streamer网络视频监控原理基本一样。

理解了他们的程序,就开始动手自己实现一个吧!

因为我是初学者,对安卓编程还没啥概念,因此我定下了如下目标:

1)功能尽量简单,仅仅实现一个监控功能;

2)尽量做稳定

分为三部分:mjpg-streamer原理、jpg编码格式、Android程序说明。

1

一、mjpg-streamer原理

我们既然用了mjpg-streamer,应该了解一下他的实现。理解了mjpg-streamer,后面

Android部分的jpg数据帧处理就容易了。因为没有啥文档,直接看他的源代码吧。

先来看看我们打开mjgp-streamer的命令

./mjpg_streamer -i "./input_ -d /dev/video0 -r 640*480 -f 5" -o "./output_ -p

9090 -w ./www"

这条命令使用了./input_和./output_两个动态程序,和windows下的动态

库是一个道理。mjpg_streamer是主程序,负责初始化输入(从摄像头读取jpg数据帧)和

初始化输出(http服务器端)。

input_负责采集摄像头数据,input_uvc中的input_init由主程序mjpg-streamer调

用初始化,然后mjpg-streamer继续调用input_run启动cam_thread线程。

这个线程把jpg数据帧从tmpbuffer拷贝到pglobal中供其他线程读取。

再来看output_http,同样由mjpg-streamer调用初始化接口output_init和output_run

启动server_thread线程。

server_thread线程负责监听TCP端口,等待客户端连接。

2