使用 flask apache2 wsgi 服务器在树莓派上进行视频流
Video Straming on raspberrypi using flask apche2and wsgi server
我已经使用 flask 应用程序通过 raspberrypi 相机播放视频。我用于烧瓶应用程序的代码在这里:
https://blog.miguelgrinberg.com/post/video-streaming-with-flask
在本地服务器上它正在做视频流,但在我的网站上没有。
我正在使用具有以下 wsgi 文件的 apache2 服务器:
flaskapp2.wsgi
#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp2/FlaskApp2")
from ashish import app as application
application.secret_key ='1233883'
文件系统结构为:
/var/www/FlaskApp2/
flskapp2.wsgi
FlaskApp2/
ashish.py
camera_pi.py
templates/index.html
ashish.py 是正在做流的 flask 应用程序。
apache 中的错误日志文件是:
[Wed Nov 23 15:17:17.458803 2016] [mpm_prefork:notice] [pid 783] AH00163: Apache/2.4.10 (Raspbian) mod_wsgi/4.3.0 Python/2.7.9 configured -- resuming normal operations
[Wed Nov 23 15:17:17.459043 2016] [core:notice] [pid 783] AH00094: Command line: '/usr/sbin/apache2'
[Wed Nov 23 15:17:14.278353 2016] [wsgi:warn] [pid 662] mod_wsgi: Compiled for Python/2.7.8.
[Wed Nov 23 15:17:14.279359 2016] [wsgi:warn] [pid 662] mod_wsgi: Runtime using Python/2.7.9.
[Wed Nov 23 15:17:14.305871 2016] [mpm_prefork:notice] [pid 662] AH00163: Apache/2.4.10 (Raspbian) mod_wsgi/4.3.0 Python/2.7.9 configured -- resuming normal operations
[Wed Nov 23 15:17:14.306169 2016] [core:notice] [pid 662] AH00094: Command line: '/usr/sbin/apache2'
[Wed Nov 23 15:17:16.502484 2016] [wsgi:warn] [pid 670] mod_wsgi: Compiled for Python/2.7.8.
[Wed Nov 23 15:17:16.504897 2016] [wsgi:warn] [pid 670] mod_wsgi: Runtime using Python/2.7.9.
[Wed Nov 23 15:17:16.531217 2016] [mpm_prefork:notice] [pid 670] AH00163: Apache/2.4.10 (Raspbian) mod_wsgi/4.3.0 Python/2.7.9 configured -- resuming normal operations
[Wed Nov 23 15:17:16.531502 2016] [core:notice] [pid 670] AH00094: Command line: '/usr/sbin/apache2'
在本地主机上它可以工作,但在我的网站上不行是 wsgi 文件中有任何错误还是我需要添加一些东西。
收到 404 Not Found 时可能会遇到一些问题。
如果那个 VirtualHost
不是 Apache 配置文件中唯一的一个,那么它将永远不会被使用。这是因为您设置的 ServerName
不正确。 ServerName
目录应设置为主机名。不是 URL,不是 IP 地址。因此使用:
ServerName https://7a78657b7a.dataplicity.io
不正确。应该是:
ServerName 7a78657b7a.dataplicity.io
它必须是主机名,因为 Apache 依赖它来根据请求中的 Host
header 进行基于名称的虚拟主机匹配。如果它是错误的,那么 Apache 将不知道使用哪个 VirtualHost
是正确的。发生这种情况时,Apache 将退回到将请求发送到它在读取 Apache 配置文件时找到的第一个 VirtualHost
定义。因此,如果这不是第一个 VirtualHost
定义,它将永远不会被使用。如果在第一个 VirtualHost
中没有设置类似的 URL 处理程序,您将得到一个 404。
第二个是 WSGIScriptAlias
指令指向的 WSGI 脚本文件中的 WSGI 应用程序入口点,未调用 application
你会得到 404。你看起来确实有它称为 application
,所以你应该没问题,这不应该是问题所在。 Apache 错误日志中会有一条明显的错误消息,说明这就是问题所在。
第三个是您使用的 URL 路径没有映射到 Flask 应用程序中的路由。这实际上有两个部分。因为您是在 Apache 中的子 URL 挂载,所以 URL 路径必须至少以 /flask2
开头。使用该值意味着您需要在 Flask 应用程序中有一个与站点根目录相匹配的路由。通常在 Flask 中,这意味着您有 @app.route('/')
的路由,但我不确定当您将 Flask 应用程序安装在 Apache 中的子 URL 时它是否仍然有效。你没有显示你的路线代码,所以看不到你有什么。您至少可以尝试在 URL 中使用 /flask2/
。如果您的视频提要不在 Flask 应用程序的根目录中,而是一个子 URL,例如 post 您 link 中给出的由 @app.route('/video_feed')
设置的子 URL,那么您应该使用 /flask2/video_feed
作为 URL 路径。如果您没有使用正确的 URL,您将收到 404。
我的整个文件配置是正确的,但是因为我是 运行 apache 服务器下的 flask 应用程序,apache 无法访问 pi 相机,因为它没有对 pi.so 的 root 访问权限,在当它在 apache 上 运行 时,它在本地服务器上工作但在我的网站上不工作。
我已经使用 flask 应用程序通过 raspberrypi 相机播放视频。我用于烧瓶应用程序的代码在这里: https://blog.miguelgrinberg.com/post/video-streaming-with-flask
在本地服务器上它正在做视频流,但在我的网站上没有。
我正在使用具有以下 wsgi 文件的 apache2 服务器:
flaskapp2.wsgi
#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp2/FlaskApp2")
from ashish import app as application
application.secret_key ='1233883'
文件系统结构为:
/var/www/FlaskApp2/
flskapp2.wsgi
FlaskApp2/
ashish.py
camera_pi.py
templates/index.html
ashish.py 是正在做流的 flask 应用程序。
apache 中的错误日志文件是:
[Wed Nov 23 15:17:17.458803 2016] [mpm_prefork:notice] [pid 783] AH00163: Apache/2.4.10 (Raspbian) mod_wsgi/4.3.0 Python/2.7.9 configured -- resuming normal operations
[Wed Nov 23 15:17:17.459043 2016] [core:notice] [pid 783] AH00094: Command line: '/usr/sbin/apache2'
[Wed Nov 23 15:17:14.278353 2016] [wsgi:warn] [pid 662] mod_wsgi: Compiled for Python/2.7.8.
[Wed Nov 23 15:17:14.279359 2016] [wsgi:warn] [pid 662] mod_wsgi: Runtime using Python/2.7.9.
[Wed Nov 23 15:17:14.305871 2016] [mpm_prefork:notice] [pid 662] AH00163: Apache/2.4.10 (Raspbian) mod_wsgi/4.3.0 Python/2.7.9 configured -- resuming normal operations
[Wed Nov 23 15:17:14.306169 2016] [core:notice] [pid 662] AH00094: Command line: '/usr/sbin/apache2'
[Wed Nov 23 15:17:16.502484 2016] [wsgi:warn] [pid 670] mod_wsgi: Compiled for Python/2.7.8.
[Wed Nov 23 15:17:16.504897 2016] [wsgi:warn] [pid 670] mod_wsgi: Runtime using Python/2.7.9.
[Wed Nov 23 15:17:16.531217 2016] [mpm_prefork:notice] [pid 670] AH00163: Apache/2.4.10 (Raspbian) mod_wsgi/4.3.0 Python/2.7.9 configured -- resuming normal operations
[Wed Nov 23 15:17:16.531502 2016] [core:notice] [pid 670] AH00094: Command line: '/usr/sbin/apache2'
在本地主机上它可以工作,但在我的网站上不行是 wsgi 文件中有任何错误还是我需要添加一些东西。
收到 404 Not Found 时可能会遇到一些问题。
如果那个 VirtualHost
不是 Apache 配置文件中唯一的一个,那么它将永远不会被使用。这是因为您设置的 ServerName
不正确。 ServerName
目录应设置为主机名。不是 URL,不是 IP 地址。因此使用:
ServerName https://7a78657b7a.dataplicity.io
不正确。应该是:
ServerName 7a78657b7a.dataplicity.io
它必须是主机名,因为 Apache 依赖它来根据请求中的 Host
header 进行基于名称的虚拟主机匹配。如果它是错误的,那么 Apache 将不知道使用哪个 VirtualHost
是正确的。发生这种情况时,Apache 将退回到将请求发送到它在读取 Apache 配置文件时找到的第一个 VirtualHost
定义。因此,如果这不是第一个 VirtualHost
定义,它将永远不会被使用。如果在第一个 VirtualHost
中没有设置类似的 URL 处理程序,您将得到一个 404。
第二个是 WSGIScriptAlias
指令指向的 WSGI 脚本文件中的 WSGI 应用程序入口点,未调用 application
你会得到 404。你看起来确实有它称为 application
,所以你应该没问题,这不应该是问题所在。 Apache 错误日志中会有一条明显的错误消息,说明这就是问题所在。
第三个是您使用的 URL 路径没有映射到 Flask 应用程序中的路由。这实际上有两个部分。因为您是在 Apache 中的子 URL 挂载,所以 URL 路径必须至少以 /flask2
开头。使用该值意味着您需要在 Flask 应用程序中有一个与站点根目录相匹配的路由。通常在 Flask 中,这意味着您有 @app.route('/')
的路由,但我不确定当您将 Flask 应用程序安装在 Apache 中的子 URL 时它是否仍然有效。你没有显示你的路线代码,所以看不到你有什么。您至少可以尝试在 URL 中使用 /flask2/
。如果您的视频提要不在 Flask 应用程序的根目录中,而是一个子 URL,例如 post 您 link 中给出的由 @app.route('/video_feed')
设置的子 URL,那么您应该使用 /flask2/video_feed
作为 URL 路径。如果您没有使用正确的 URL,您将收到 404。
我的整个文件配置是正确的,但是因为我是 运行 apache 服务器下的 flask 应用程序,apache 无法访问 pi 相机,因为它没有对 pi.so 的 root 访问权限,在当它在 apache 上 运行 时,它在本地服务器上工作但在我的网站上不工作。