树莓派实现云直播系统
原创文章
硬件需要
- 树莓派
- 舵机
- 摄像头
- 拥有公网ip的服务器
运行原理
服务通过 linux + php + nginx + python 环境实现,整体服务搭建在内网,通过拥有公网 ip 的服务器做 frp 内网映射,将 web 公布在公网上。通过 nginx 的 base auth 做简单认证。流媒体使用 motion 软件呈现。web 页面使用 Linux + php ,云台的控制使用 web 接口,通过接口,将数据发送到 web 端,web 端发送请求到本地的 python 脚本,从而控制云台转动。
连接硬件
(略)
搭建系统
基础层 ---- python 控制云台转动
1. 安装 python3-rpi.gpio
$ sudo apt-get update
$ sudo apt-get install python3-rpi.gpio
2. 编写代码,实现使用 python 命令可以直接控制云台
#!/usr/bin/env python3
#-- coding: utf-8 --
import RPi.GPIO as GPIO
import time
import sys
#设置转动角度
def angle_to_percent_h (angle) :
if angle > 170 or angle < 10 :
return False
start = 4
end = 12.5
ratio = (end - start)/180 #计算角度
angle_as_percent = angle * ratio
print(angle_as_percent)
return start + angle_as_percent
def angle_to_percent_s (angle) :
if angle > 170 or angle < 10 :
return False
start = 2
end = 12.5
ratio = (end - start)/180 #Calcul ratio from angle to percent
angle_as_percent = angle * ratio
print(angle_as_percent)
return start + angle_as_percent
GPIO.setmode(GPIO.BOARD) #使用 Board 模式
GPIO.setwarnings(False) #禁止掉烦人的警告
# 使用 40 作为水平方向的舵机信号口
pwm_gpio_x = 40
# 使用 38 作为竖直方向的舵机信号口
pwm_gpio_y = 38
frequence = 50
GPIO.setup(pwm_gpio_x, GPIO.OUT)
GPIO.setup(pwm_gpio_y, GPIO.OUT)
h = GPIO.PWM(pwm_gpio_x, frequence)
s = GPIO.PWM(pwm_gpio_y, frequence)
# 接收参数,指定目标角度
x = int(sys.argv[1])
y = int(sys.argv[2])
# x 方向或者 y 方向没有变化,则不调用,防止抖动
if x != -1:
h.start(angle_to_percent_s(x))
if y != -1:
s.start(angle_to_percent_h(y))
# 增加睡眠时间,等待舵机转动完成
time.sleep(.5)
# 关闭并清空 gpio 状态
h.stop()
s.stop()
GPIO.cleanup()
预期目标:直接使用命令行的方式可以控制舵机转动到指定位置。以下是转动到 水平 150°竖直 60°的位置 的命令
$ python main.py 150 60
基础层 ---- 安装 motion ,实现本地访问媒体流
motion是Linux下一款开源的摄像头监控软件,用命名行运行,只保存有运动物体的图像。
$ sudo apt update
$ sudo apt install motion
安装完成后最主要的就是配置。主要修改以下配置,重要配置已做备注
$ sudo vim /etc/motion/motion.conf
- ‘daemon’ 设置为 on 。 这个是守护进程,当服务挂掉的时候尝试重启,这个很重要一定要开。
- ‘framerate’ 设置为 1000 到 1500 中间的一个数值。
- ‘Stream_port’ 设置为 8081,这个是本地访问流媒体时候的http端口,本地查看的时候,在浏览器打开 http://127.0.0.1:8081 即可。
- ‘Stream_quality’ 设置为 100。流媒体质量。
- ‘Stream_localhost’ 设置为 off。这个是 仅本地浏览 的配置,为 off 的时候,局域网或者外网可以访问,on 的时候仅本地(127)可以访问
- ‘webcontrol_localhost’ 设置为 off。仅本地可以控制,同上
- ‘quality’ 设置为 100。
- 设置宽高:‘width’ 、 ‘height’ 分别设置为 640 、 480.
- 设置’post_capture’ to 5.
- stream_maxrate 设置为 10。即 fps 。** 这个很重要,这个是控制视频流的帧率,越高画面越看起来越流畅,但是消耗的流量更多 **
到了这一步,可以启动 motion 服务了
$ sudo service motion start
本地浏览器打开 http://127.0.0.1:8081 即可查看当前实时画面
基础层 ---- 搭建 web
1. 安装 nginx 环境
$ sudo apt install nginx
详细信息 查看原文