国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用Python的Flask框架實現視頻的流媒體傳輸

2020-02-23 00:28:03
字體:
來源:轉載
供稿:網友

Flask 是一個 Python 實現的 Web 開發微框架。這篇文章是一個講述如何用它實現傳送視頻數據流的詳細教程。

我敢肯定,現在你已經知道我在O'Reilly Media上發布了有關Flask的一本書和一些視頻資料。在這些上面,Flask框架介紹的覆蓋面是相當完整的,出于某種原因,也有一小部分的功能沒有太多的提到,因此我認為在這里寫一篇介紹它們的文章是一個好主意。

這篇文章是專門介紹流媒體的,這個有趣的功能讓Flask應用擁有這樣一種能力,以分割成小數據塊的方式,高效地為大型請求提供數據,這可能要花費較長的時間。為了說明這個主題,我將告訴你如何構建一個實時視頻流媒體服務器!
什么是流媒體?

流媒體是一種技術,其中,服務器以數據塊的形式響應請求。我能想到一個原因來解釋為什么這個技術可能是有用的:

    非常大的響應 。對于非常大的響應而言,內存中收集的響應只返回給客戶端,這是很低效的。另一種方法是將響應寫入磁盤,然后使用flask.send_file()返回文件,但是這增加了I/O的組合。假設數據可以分塊生成,以小塊數據的方式給請求提供響應是一種更好的解決方案。
    實時數據 。對于一些應用,需要請求返回的數據來自實時數據源。在這個方面一個非常好的例子就是提供一個實時視頻或音頻。很多安全攝像機使用這種技術將視頻數據流傳輸給Web瀏覽器。

使用Flask實現流式傳輸

Flask通過使用生成器函數對流式響應提供本機支持。生成器是一個特別的函數,它可以中斷和恢復。考慮一下下面的函數:

 def gen():    yield 1    yield 2    yield 3

這是一個運行三步的函數,其中每步返回一個值。描述生成器如何實現超出了本文的范圍,但如果你有點好奇,下面的shell會話將給你說明生成器是如何被使用的:

 >>> x = gen()>>> x<generator object gen at 0x7f06f3059c30>>>> x.next()1>>> x.next()2>>> x.next()3>>> x.next()Traceback (most recent call last): File "<stdin>", line 1, in <module>StopIteration

在這個簡單的例子中你能看到,一個生成器函數可以順序得返回多個結果。Flask使用生成器 函數這一特性來實現流式傳輸。

下面的例子說明了如何使用流式傳輸能夠產生大的數據表,而不必將整個表放入內存中:

 from flask import Response, render_templatefrom app.models import Stock def generate_stock_table():  yield render_template('stock_header.html')  for stock in Stock.query.all():    yield render_template('stock_row.html', stock=stock)  yield render_template('stock_footer.html') @app.route('/stock-table')def stock_table():  return Response(generate_stock_table())            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 菏泽市| 神农架林区| 龙州县| 静宁县| 南宫市| 海晏县| 南京市| 常山县| 双流县| 南郑县| 行唐县| 临夏县| 金塔县| 昭通市| 汤阴县| 江油市| 武汉市| 双牌县| 云南省| 丽水市| 敖汉旗| 白沙| 宁德市| 随州市| 顺义区| 永吉县| 康马县| 沙坪坝区| 同心县| 绥江县| 武隆县| 莆田市| 北京市| 景洪市| 弋阳县| 嘉峪关市| 汶上县| 沙坪坝区| 安平县| 连南| 兴和县|