基于H.264(x.264)编码的视频监控
大概流程为:
开发板:
1.读取摄像头
2.进行rtsp传输(live555)
3.不断的进行2和3.
pc机:
利用vlc进行接收到板子发送过来的数据并显示。
第一步移植x264到开发板:(当然我们可以交叉编译为静态链接,然后把可执行程序拷贝到开发板就可以)
参考别人的步骤:
http://blog.csdn.net/liuzongming1988/article/details/8234893
第二部移植live555到开发板:
参考别人的步骤:
http://blog.csdn.net/lawishere/article/details/8182952
注:第一步和第二步已经是很早之前完成的好像是这么回事。
第二步主要是把Live555MediaServer这个可执行文件拷贝到开发板。
第三步就是主要工作了:
这里主要是用了一个小技巧,在目录下创建一个有名fifo把读取摄像头数据的数据可以发送到live555MediaServer这个程序。
fifo就起到一个桥梁的作用。
在工作录下有两个程序(3个文件)
1.读取摄像头程序
2.live555MediaServer
3.fifo文件。
假设我们所创建的fifo名称为test.264
在pc机(我的为ubuntu)下安装vlc
打开vlc
选择Open NetWork Stream...
如上所设置,IP则开发板的IP,至于端口8000 默认的Live555MedisServer是8000的
test.264就是刚才开发板所创建的fifo文件名称。
我擦、这么晚了。。回宿舍睡觉去了。。等有空了在把代码和开发板的一些相关情况发出来。
今天也在6410上进行了硬编码的了,在pc机则用ffmpeg进行解码 opencv显示。
到时候在一起发上来。~~~~
学生党 伤不起啊!
继续!!!!!
我所用的摄像头采集的图像为yuv422(交叉YUVYUVYUV)格式,所以需要进行
格式的转换,代码里面有个函数为
yuv422Toyuv420I
作用就是格式的转换,至于怎么读取摄像头数据的话就不多说了(v4l2)。。。
软件编码的话可以详细的看代码里面,需要说明的是一个函数
x264_param_default_preset(param, "ultrafast", "zerolantency");
参数"ulrtafast"和"zerolantency"在x264源码包下common目录下有一个文件为common.c
里面有函数
void x264_param_default(x264_param_t *param);
static int x264_param_apply_preset(x264_param_t *param, const char *preset);
此时的const char *preset = "ultrafast";
static int x264_param_apply_tune(x264_param_t *param, const char *tune);
此时的const char *tune = "zerolantency";
可以到此源代码下观察还会有其他选项,对于实时监控则用此两个参数即可。
# ./live555Server
输入rtsp://172.19.69.80/test.264
IP为pc机上的IP test.264就是fifo
效果图就是如下所示:
看到它的窗口名称就是刚才vlc上所设置的。
流格式:rtsp
开发板IP:172.19.69.50
端口: 8000
文件名: test.264
附上开发板上运行的客户端程序:
http://download.csdn.net/detail/darling54454/7439873