树莓派+blinker物联网平台+阿里云服务器实现app远程摄像头监控

前言

最近接了个物联网小项目,需要远程监控室内温湿度,二氧化碳浓度和火灾报警等功能,本来找的机智云平台十分符合,但是后面又需要加摄像头监控功能,机智云目前还无视频服务功能,只好换平台。调研发现,onenet和阿里云物联网平台都支持视频接入,但是费用不菲还限流,而且app端并不完善,个人并不会app端开发,开发难度无疑很大,就放弃了。幸好看到blinker今年刚提供视频接口,而且app开发只需拖拽,很是方便,于是就开工了。

1.ffmpeg+nginx+hls低延迟推流

blinker的app端接入视频流很方便,只需要填入hls视频的http地址即可播放,具体可以参考blinker社区链接:blinker接入摄像头说明

由于hls延迟比较大的特性,这里使用pingos来推流github地址,可以缩短视频流延迟,不过仍然存在3~4s左右延迟,参考链接hls低延迟推流

树莓派端操作如下:

快速安装
 $ git clone https://github.com/pingostack/pingos.git
 $ cd pingos
 $ ./release.sh -i
更改配置文件

新建文件nginx.conf,填入如下内容,并替换/usr/local/pingo/conf/nginx.conf文件

user  root;
daemon on;
master_process on;
worker_processes  1;
#worker_rlimit 4g;
#working_directory /usr/local/openresty/nginx/logs;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;

worker_rlimit_nofile 102400;
worker_rlimit_core   2G;
working_directory    /tmp;

#pid        logs/nginx.pid;

events {
    use epoll;
    worker_connections  1024;
    multi_listen unix:/tmp/http 80;
}

stream_zone buckets=1024 streams=4096;

rtmp {
    log_format log_json '{$remote_addr, [$time_local]}';
    access_log logs/rtmp.log trunc=2s;
    server {
        listen 1935;
        serverid 000;
        out_queue 2048;

        application live {
            rtmp_auto_pull on;
            rtmp_auto_pull_port unix:/tmp/rtmp;
            live on;
            hls on;
            hls_path /tmp/hls;
            hls_fragment 1300ms;
            hls_max_fragment 1800ms;
            hls_playlist_length 3900ms;

            hls2memory on;
            mpegts_cache_time 20s;

            hls2_fragment 1000ms;
            hls2_max_fragment 1300ms;
            hls2_playlist_length 3000ms;

            wait_key on;
            wait_video on;
            cache_time 3s;
            low_latency off;
            fix_timestamp 0s;
# h265 codecid, default 12
            hevc_codecid  12;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_X-Forwarded-For" "$http_X-Real-IP" "$host"';


    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #reset_server_name www.test1.com www.test2.com;
    #gzip  on;
    server {
         listen 80;
        location /rtmp_stat {
            rtmp_stat all;
            rtmp_stat_stylesheet /stat.xsl;
        }

        location /xstat {
            rtmp_stat all;
        }

        location /sys_stat {
            sys_stat;
        }

         location /live {
            flv_live 1935;
         }
         location /hls {
            # Serve HLS fragments
             types {
                 application/vnd.apple.mpegurl m3u8;
                 video/mp2t ts;
             }
             root /tmp;
             expires -1;
             add_header Cache-Control no-cache;
         }

        location /hls2 {
             hls2_live 1935 app=live;
             add_header 'Access-Control-Allow-Origin' '*';
         }
         location / {
             chunked_transfer_encoding on;
             root html/;
         }
    }
}
启动服务
cd /usr/local/pingos/
./sbin/nginx
摄像头推流

我用的usb免驱摄像头,下面参数其他摄像头并不一定适合

   ffmpeg -f v4l2  -i  /dev/video0  -b:v 300k -c:v h264_omx -f flv rtmp://树莓派ip/live/01 
局域网测试

手机连接wifi,同一局域网内,打开浏览器输入以下地址即可

   http://树莓派ip/hls2/01.m3u8
blinker的测试

手机安装blinker的app,界面拖拽入视频模块,编辑模式点击视频模块,有个需要填写的url链接,填入

  http://树莓派ip/hls2/01.m3u8

2.阿里云服务器申请

自己到阿里云官网申请,有免费试用期,我申请了一个免费一个月的,带宽1M。记住公网ip,并修改登陆密码。之后可以在本地登陆

  ssh root@公网ip 

在网络与安全,安全组,配置规则中添加端口范围,类型tcp,分别添加两个端口9000/9000和7000/7000,是下面对应的frp端口。

3.frp配置

目前物联网平台没有免费提供视频流服务的,blinker也只能在局域网中实现视频监控,如果想实现远程监控,除非把视频流暴露在公网下。而我们平时使用的电脑ip基本都不是公网ip,所以需要云服务器配合frp来实现。

下载frp

地址:https://github.com/fatedier/frp/releases
需要下载服务器端和树莓派端frp软件。如果服务器端是linux64位,下载
frp_0.33.0_linux_amd64.tar.gz。树莓派端如果是32位的下载frp_0.33.0_linux_arm.tar.gz

服务器端配置

修改fprs.ini文件:

[common]
bind_port = 9000(这个端口需要阿里云服务器添加端口)
auto_token = xxxxx   #option
vhost_http_port = 7000(hls的远程映射端口,需要阿里云服务器添加端口)

开启服务:

./frps -c frps.ini
树莓派端配置

修改fprc.ini文件:

[common]
server_addr = xx.xx.xx.xx  #阿里云服务器地址,公网ip
server_port = 9000  #bind_port端口一致
auto_token = xxxxx #option
[HLS]
type = http
local_ip = 127.0.0.1
local_port = 80(这个端口表示hls的本地端口,不是1935) 
custom_domains = xx.xx.xx.xx  #阿里云服务器地址,公网ip

开启服务:

./frpc -c frpc.ini     

最终测试

blinker的app端,视频填入地址(注意加端口)

http://服务器ip:7000/hls2/01.m3u8

OK

  • 4
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值