树莓派实现云直播系统

树莓派实现云直播系统

原创文章

硬件需要

  • 树莓派
  • 舵机
  • 摄像头
  • 拥有公网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

详细信息 查看原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值