Потоковое видео Raspberry Pi с Flask App работает с сервером разработки по умолчанию, но не в Apache. - PullRequest
0 голосов
/ 18 мая 2018

Я разместил простое приложение Flask на веб-сервере Apache на Raspberry Pi для потоковой передачи видео в реальном времени с PiCamera с использованием учебного пособия https://blog.miguelgrinberg.com/post/video-streaming-with-flask.Локально у меня все работает, и я могу получить доступ к своему http://localip:5000, чтобы получить видео в реальном времени.Теперь я хотел разместить это на рабочем сервере, и я использовал Apache.Я установил все файлы конфигурации и структуры каталогов, связанные с моим приложением Flask, и настроил сервер на порт 80. Я захожу на http://ip:80, и моя веб-страница загружается с заголовком, заголовком и статическим текстом, но видео, которое должно бытьниже это теперь изображение "сломанного изображения".Изучение видеоэлемента веб-страницы в браузере показывает, что сервер ничего не возвратил.

Я видел еще один пост Видео Straming на raspberrypi с использованием фляги apche2 и wsgi server , парня, который столкнулся с той же проблемойКак мой.Он отметил ответ, что у Apache нет корневого доступа к Picamera, и, следовательно, он не может получить к нему доступ.Я знаю, что Apache работает как пользователь группы www-данных, и я не знаю, на какую папку / файл мне следует дать разрешения, чтобы он мог получить доступ к PiCamera.Я не знаю, как это сделать. На локальном веб-сервере встроенной фляги все работает отлично, но при обслуживании через Apache камера не захватывает изображения.Пожалуйста, помогите мне.Вот мой основной код и конфигурации (имя приложения Flask VideoStream):

VideoStream.wsgi

#!/usr/bin/python3
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/VideoStream/")

from VideoStream import app as application

Файл конфигурации Apache:

<VirtualHost *:80>
                ServerName 10.0.0.69
                ServerAdmin realityreccode@gmail.com
                WSGIScriptAlias / /var/www/VideoStream/VideoStream.wsgi
                WSGIDaemonProcess VideoStream user=www-data group=www-data threads=5 home=/var/www/VideoStream/
        <Directory /var/www/VideoStream/VideoStream/>
                WSGIProcessGroup VideoStream
                WSGIApplicationGroup %{GLOBAL}
                WSGIScriptReloading On
                Order allow,deny
                Allow from all
                </Directory>
                ErrorLog ${APACHE_LOG_DIR}/VideoStream-error.log
                LogLevel warn
                CustomLog ${APACHE_LOG_DIR}/VideoStream-access.log combined 
</VirtualHost>

Структура каталогов:

/var/www/VideoStream/
VideoStream.wsgi
VideoStream/
    __init__.py
    camera_pi.py
    base_camera.py
    templates/index.html

__ init__.py - Приложение для колб:

#!/usr/bin/python3
from importlib import import_module
import os
from flask import Flask, render_template, Response
from VideoStream.camera_pi import Camera


app = Flask(__name__)


@app.route('/')
def index():
   return render_template('index.html')
def gen(camera):

while True:
    frame = camera.get_frame()
    yield (b'--frame\r\n'
           b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/video_feed')
def video_feed():

    return Response(gen(Camera()),
                mimetype='multipart/x-mixed-replace; boundary=frame')


if __name__ == '__main__':
    app.run(host='10.0.0.69', threaded=True, debug=True)
...