树莓派摄像头打造公网可访问的监视器

背景

树莓派小巧的身材、高扩展性的接口适合做一下非常geek的事情,很多人在买到树莓派后很可能也会和官方摄像头一并购买,但是摄像头的用处也往往被局限在了内网,显得很鸡肋。因此笔者就想办法让树莓派的成像在公网被访问的到,满足了很多人做监控(智能家居)的需求。

树莓派摄像头打造公网可访问的监视器_第1张图片
树莓派摄像头

材料清单:

  1. 树莓派
  2. 树莓官方摄像头(USB的也可以)
  3. 一台云服务器(阿里云、腾讯云等各种云均可)

思路

笔者尝试了motion、mjpg-streamer等,都不太理想,原因是这些局限在能访问到树莓派网络地址的网络中,也就是说如果你的树莓派没有被映射到公网中就不能从公网访问了,这是显而易见的。而用花生壳之类的公网映射服务的话,速度也不一定能得到保证,所以这些方法都被笔者否决了。

因此笔者想了另一个方法,既然视频流没有办法从公网外部直接访问,那么可以将视频流主动推送到一个大家都能访问得到的地方就行了。

所以笔者就想到了rtmp协议,rtmp协议是直播常用的流媒体传输协议,可以用其发送h264的flv流。 而树莓派可以使用ffmpeg将视频推值rtmp服务器。很简单的一个原理。

概括来说就是:
树莓派摄像头 -> ffmpeg -> rtmp -> nginx -> VLC media player


目录

1. 树莓派部分

1. 摄像头安装
2. ffmpeg安装

2. 服务器部分

1. 编译Nginx  
2. 配置
3. 推流

3. 更多的玩法 (如果没有独立的服务器,但会科学上网的话看这里)


步骤

一、树莓派部分

1. 摄像头安装

安装

如图,将可活动的固定片轻轻抽起,插入摄像头数据线,注意摄像头金属片应该朝不可活动的一端,再将活动片按下即可。
启动树莓派,在命令行中输入

$ sudo raspi-config

启动树莓派配置页面

树莓派摄像头打造公网可访问的监视器_第2张图片
配置页面

选择“Interfacing Options” -> “camera” 打开即可。
完成之后可以使用命令

$ raspistill -o hello.jpg

如果当前目录下出来了叫hello.jpg的照片的话,说明摄像头安装得当了。

2. ffmpeg安装

方法一: 命令行安装 (推荐)

ffmpeg没有在树莓派的源中,因此需要手动添加

$ sudo vim /etc/apt/sources.list

加入一行

deb http://www.deb-multimedia.org jessie main non-free

执行

$ sudo apt-get update
$ sudo apt-get install ffmpeg

就安装成功了

方法二: 源码安装

下载源码

$ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg  

配置并编译安装

$ cd ffmpeg
$ sudo ./configure --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree
$ make
$ sudo make install

其中make的时候一定要有耐心,我保守估计编译了两个小时。如果不能保证电脑常开的话,强烈推荐用screen命令在新窗口中运行,以防连接断开造成的损坏。

服务器部分

笔者的服务器是腾讯云Ubuntu 16.04版本,该方法应该能在现有服务器上跑起来。

1.编译Nginx

先把nginx和nginx-rtmp-module源码下载下来

$ wget https://nginx.org/download/nginx-1.13.4.tar.gz  # 请在nginx官网上找最新版本
$ git clone https://github.com/arut/nginx-rtmp-module.git  # 两者最好放在同一目录,方便路径书写

安装编译依赖

$ sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

解压nginx压缩包

$ tar -zxvf nginx-1.13.4.tar.gz
$ cd nginx-1.13.4

编译nginx

$ ./configure --add-module=../nginx-rtmp-module --with-http_ssl_module   # 里面nginx-rtmp-module的目录可以根据你下载的目录更换
$ make
$ sudo make install 

安装nginx启动脚本

$ sudo wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
$ sudo chmod +x /etc/init.d/nginx
$ sudo update-rc.d nginx defaults

启停一次nginx,生成配置文件

$ sudo service nginx start
$ sudo service nginx stop

安装ffmpeg

$ sudo apt-add-repository ppa:jon-severinsson/ffmpeg
$ sudo apt-get update
$ sudo apt-get install ffmpeg

服务器配置

使用vim编辑配置文件

$ sudo vim /usr/local/nginx/conf/nginx.conf

在末尾添加

rtmp {
    server {
            listen 1935;
            chunk_size 4096;

            application live {
                    live on;
                    record off;
                    exec ffmpeg -i rtmp://localhost/live/$name -threads 1 -c:v libx264 -profile:v baseline -b:v 350K -s 640x360 -f flv -c:a aac -ac 1 -strict -2 -b:a 56k rtmp://localhost/living/$name;
            }
            application liveing {
                    live on;
                    record off;
        }
    }
}

按esc,输入冒号后输入wq,回车关闭保存配置文件。

重启nginx

$ sudo service nginx restart

推流

在树莓派上打开一个screen,输入

raspivid -o - -t 0 -vf -hf -fps 10 -b 500000 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i - -vcodec copy -acodec aac -ab 128k -g 50 -strict experimental -f flv rtmp://你的服务器IP/live/任意名称

看到这些输出就说明成功了


树莓派摄像头打造公网可访问的监视器_第3张图片
输出

可以下载一个VLC播放器
在open media里面选择network,url中填写你刚才输入的rtmp链接,点击open就可以看到你的画面啦。

效果

更多的玩法

提示一下,在youtube里面的“上传”旁边,有一个“直播”

树莓派摄像头打造公网可访问的监视器_第4张图片
直播

进入后,在下面你可以看到这个编码器设置

树莓派摄像头打造公网可访问的监视器_第5张图片
编码器设置

你可以构造一个rtmp地址:

rtmp://a.rtmp.youtube.com/live2/你的密钥

将上面在树莓派中执行的那段代码的rtmp地址替换为这个就可以在youtube上看你的直播了哦,这个是不需要额外的服务器的,而且更稳定。不过你得先学会科学上网。

powered by moha.vip

你可能感兴趣的:(树莓派摄像头打造公网可访问的监视器)