春招实习十二面的面经



前言

最近想做一个安防相关的项目,所以需要储备视频监控方案的相关知识,冲韦东山老师的视频中学到了相关知识,很好地满足我的需求。特将学习的整个过程、笔记记录下来,本系列文章将会引用许多韦老师项目的内容,有兴趣的同学可以去看看韦老师的这个课程,原理讲得不深,但是单纯应用绝对够用
韦东山老师手把手带你从0开始自己做一个视频监控项目

一、文章系列内容介绍

本文章介绍有2种视频监控方案,一种可以运行在低性能的板子上,另一种是热门的流媒体方案
1.MJPG-streamer方案
本系列的第二篇文章会讲解:
MJPG-streamer的移植、使用、框架讲解,代码讲解等内容
2.流媒体方案
本系列的第三篇文章会讲解:
流媒体方案的实现之ffmpeg的移植、使用、内部流程、参数讲解等内容;
流媒体方案的实现之Nginx的移植、多场景使用等;
3.摄像头和声卡接口
摄像头V4L2接口、声卡ALSA接口的相关函数分析及介绍
4.内网穿透
原理、两种实现方法等内容

二、软硬件准备

硬件:a. 100ASK_IMX6ULL开发板 (或其他Linux开发板);b. USB摄像头
软件:a. Ubuntu(可以用虚拟机安装Ubuntu);b. Buildroot(Buildroot会自动下载其他软件: MJPG-streamer, ffmpeg, nginx);c. 内网穿透软件: 花生壳5.0

三、方案介绍

mjpg-streamer

如果只是想在客厅查看房间的情况,不需要什么复杂的协议,我们可以用这种方案。
作为程序员,我们需要写2个程序:

  1. 在连接摄像头的ARM板子上,实现一个服务器程序:它一边读取摄像头数据,一边等待客户端连接并发送数据。
  2. 在手机或电脑上,编写客户端程序,它会从ARM板上获得数据并显示出来。

这2个程序之间,并不需要实现复杂的协议,只需要约定数据格式并传输一帧帧的数据。
实际上,我们可以使用现成的程序:
mjpg-streamer,它可运行在ARM板上,在手机上使用浏览器直接观看视频
在这里插入图片描述

方案优点:
程序简单,所有源码一目了然,便于学习
对ARM板的性能要求不高,主频200MHz的ARM芯片也能实现
方案缺点:
只能实现局域网内的视频监控
要实现互联网视频监控,需要另外实现内网穿透
mjpg-streamer没有实现声音传输
mjpg-streamer项目已经不再维护,仅仅建议用于学习

流媒体方案

作为程序员,我们需要写3个程序:

  1. 在连接摄像头的ARM板子上,实现一个推送程序:它一边读取摄像头数据,一边把数据推送给服务器
  2. 在服务器上,实现“流媒体服务器”程序:它接收ARM板发来的数据,并把数据转换格式后发给手机等客户端
  3. 在手机等客户端上,实现拉取程序:它从服务器上拉取数据,并显示出来

实际上,我们可以把互联网功能去掉:
把“推送程序”、“流媒体服务器”程序,都在ARM板上运行;手机等客户端只能在同一个局域网里观看视频
或者也使用内网穿透技术实现互联网视频监控
在这里插入图片描述
我们并不需要从头实现这些功能:
推送程序:可以用ffmpeg
流媒体服务器程序:可以用Nginx
客户端程序:可以用VLC浏览器
为此,我们需要了解一些协议:
有很多流媒体协议
RTMP、HTTP-FLV、HLS等,后面流媒体方案中我们用到了前两种协议。
在这里插入图片描述
在这里插入图片描述流媒体服务:两端加一服
注意:
RTMP可以用在双端
HTTPFLV 、HLS 只能用在拉流端

参考资料

HTTP-FLV直播初探
https://www.cnblogs.com/saysmy/p/7851911.html
理解RTMP、HttpFlv和HLS的正确姿势
https://www.jianshu.com/p/32417d8ee5b6
韦老师视频监控项目
https://www.bilibili.com/video/BV1fD4y1S7hT?p=6

更多推荐