如何从Flask生成动态应用路由?

时间:2019-06-24 21:14:39

标签: python opencv flask

说我有

@app.route('/video_feed/0')       
def video_feed0():
    return Response(gen(VideoCamera(var1)), 
                    mimetype='multipart/x-mixed-replace; boundary=frame')

@app.route('/video_feed/1')       
def video_feed1():
    return Response(gen(VideoCamera(var2)), 
                    mimetype='multipart/x-mixed-replace; boundary=frame')

其中gen()是一个生成器,可从VideoCamera(opencv)抓取视频帧

我将显示为:

<img id="bg" src="localhost:5000/video_feed/0">
and 
<img id="bg" src="localhost:5000/video_feed/1">

对任意视频源复制此内容的最佳方法是什么,例如:

def createVidFeeds():
    video_feeds = [1,'192.168.1.233:8080/video']
    for index,item in enumerate(video_feeds):
        video_feed(index,item)  
createVidFeeds()

enumerate()可以提供一个计数器变量,然后我可以将其传递给/ video_feed /

我希望它看起来像这样:

def createVidFeeds():
    video_feeds = [1,'192.168.1.233:8080/video']
    for index,item in enumerate(video_feeds):
        video_feed(index,item)  
createVidFeeds()

@app.route('/video_feed/<num>')
def video_feed(num, arg):
    return Response(gen(VideoCamera(arg)),
                    mimetype='multipart/x-mixed-replace; boundary = frame')

但是我无法使其中任何一个起作用。

现在,我已经听到很多关于app.add_url_rule()的信息,我觉得这就是答案,但是我无法确定如何在代码中实现这一点。

1 个答案:

答案 0 :(得分:0)

我这样解决了:

@app.route('/video_feed/<num>')       
def video_feed(num):
    video_feeds = [1,'http://**WEBCAM_IP**/video']
    fsrc = video_feeds[int(num)]
    return Response(gen(VideoCamera(fsrc)), 
                    mimetype='multipart/x-mixed-replace; boundary=frame')

它使用迭代次数从@ghassen建议的列表中选择。这样做有一些问题,即要从网页添加源,我必须将列表移到外面。但它确实可以正常工作。

如果有人可以告诉我如何迭代显示HTML中的视频,那将是很棒的,尽管不在问题的范围之内。