用途:项目需求网页有实时视频功能,可以没有声音,大致原理树莓派开启usb摄像头并启动到本地端口可以通过不断请求图片的形式实现可以通过python做一次转发到服务器上,服务器再转发到网页上,实现网页视频
手动打开摄像头,具体原理不清楚,做硬件的哥哥让我执行就ok
LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_uvc.so" -o "output_http.so -w /usr/local/www"
输入上面代码到树莓派,同一网络电脑打开树莓派ip:8080端口看看有显示的么,如果没有就不用接着看
树莓派上python脚本
服务器端
nginx端配置
在树莓派上运行python3 clientCamera.py http://你自己的ip:8080/api/Info
今天离职了,没树莓派能让我接着写打开摄像头的判断的操作了,如果本文对你有用的话,评论区留个言就是对我最大的鼓励!
import os
import sys
import time
import json
import time
# 传入需要转发的摄像头的外网地址,本地刷新时间
def get(serverAdderss, localPort):
import requests
local_img = 'http://127.0.0.1:%s/?action=snapshot&n=1'%localPort
print(local_img)
global stopstatus
try:
img = requests.get(url=local_img, timeout=1).content
print('Get local img success')
try:
response = requests.post(url=serverAdderss, files={'file': img}, timeout=1).text
print('send remote server success')
global isStop
# 通过判断返回的状态判断是否结束死循环 success为False停止循环,False必须为大写
isStop = json.loads(response)['success']
stopstatus = 0
except:
stopstatus += 1
print('send fail')
if stopstatus > 100:
print('远程服务器连接失败')
sys.exit(0)
except:
print('本地服务启动可能尚未启动,请检查树莓派')
stopstatus = stopstatus+1
if stopstatus > 100:
sys.exit(0)
def openCamera():
# 打开启动摄像头脚本
response = os.popen('LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_uvc.so" -o "output_http.so -w /usr/local/www"').read()
if __name__ == '__main__':
# java掉python传的参数,或者命令行输底下的示例,记着树莓派安装python和requests库
param_address = sys.argv[1]
param_time = float(sys.argv[2])
param_localPort = sys.argv[3]
print('传入参数格式:\r外网接口地址\r刷新频率单位(秒)\r本地启动摄影功能服务的端口\n示例 python3 clientCamera.py http://192.168.0.2:8080/api/Camera 1 8080')
# 是否停止
stopstatus = 0
isStop = True
while isStop:
get(param_address, param_localPort)
time.sleep(param_time)