🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

2655閲覧

webアプリで動画の再生ができない

Tera0724

総合スコア18

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/03/29 09:01

編集2021/03/30 00:30

現在、flaskを使用してwebアプリについて学習しています。
動画の再生について以下のリンクを参考にプログラムを作ってみました。
参照リンク
コードに関しては以下の通りです。

python

1import os 2import glob 3 4from flask import Flask, render_template, request, redirect, url_for 5from flask_backend import Flask_Event 6 7 8app = Flask(__name__) 9 10@app.route('/video_view', methods=['GET', 'POST']) 11def video_view(): 12 # 対象のディレクトリから動画のpathを抽出 13 file_name = glob.glob("static/uploads/*.mp4") 14 # 0番目のpathをhtmlへ渡す 15 return render_template("video_player.html", file_name=file_name[0]) 16 17if __name__ == '__main__': 18 from argparse import ArgumentParser 19 20 parser = ArgumentParser() 21 parser.add_argument("-p", "--port", default=5000, 22 type=int, help="port to listen on") 23 args = parser.parse_args() 24 port = args.port 25 app.config["port"] = port 26 app.run(host="0.0.0.0", port=port, threaded=True, debug=True)

html

1<video controls width="600px" height="300px"> 2 <source src={{ file_name }} controls> 3</video>

上記のコードを動かしたところ、web上では以下のように枠のみ表示されて動かすことができませんでした。
web画像
調べてみたのですが、webに対する知識が不足しているため解決策を見つけることができませんでした。
問題点について教えていただきたいです。よろしくお願いします。
*OSはMacOS、flaskは1.1.2を使用しています。

助言をいただき、デバッグによる出力試してみました。出力に関しては以下の写真になります。。。
デバッグ出力

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msiz07

2021/03/29 13:18 編集

予想では `glob.glob("static/uploads/*.mp4")` でファイル名をうまく取得できてない感じがします。 以下のように、log設定やデバッグ出力を追加したらどうなるか追記してもらえますか?(表示の都合でインデントに全角スペースを使っているのでご注意ください) ``` import os import glob from flask import Flask, render_template, request, redirect, url_for from flask_backend import Flask_Event app = Flask(__name__) # log設定追加 import logging app.logger.setLevel(logging.DEBUG) @app.route('/video_view', methods=['GET', 'POST']) def video_view():   # 対象のディレクトリから動画のpathを抽出   file_name = glob.glob("static/uploads/*.mp4")   # デバッグ出力   app.logger.debug("file_name: {}".format(file_name)) (以下省略) ```
Tera0724

2021/03/30 01:06

回答ありがとうございます。msiz07様の助言に基づきデバッグをみてみました。画面のスクリーンショットは追記した通りです。ディレクトリ構造はmain.py(上記のpythonファイル)とstatic/が同じ階層でstatic/の中にupload/、その中に動画という構成になっています。そのためmain.pyから見たpathとしては正しいと思うのですが、動画の方に問題があるのでしょうか?
guest

回答1

0

HTMLの「<source src={{ file_name }} controls>」のリンクが問題ないか、以下のように変更して確認したらどうなるでしょうか?(「static/uploads/demo_video.mp4」ファイルがある場合)

<source src={{ url_for("static", filename="uploads/demo_video.mp4", _external=True) }} controls>

(「_external=True」はいらないかも)

うまくいった場合は、「filename=...」に適切な値を渡せるようにコードを調整すれば、動くようになるはずです。

url_for()」の出力結果を確認したい場合は、デバッグ出力を追加したあたりで以下のコードを追加すればわかると思います(「...」は適当に調整してください)。

python

1app.logger.debug("url_for returnes: {}".format(url_for(...)))

flask.url_for」については、以下のページなどを参照ください。

投稿2021/03/30 01:31

編集2021/03/30 01:35
msiz07

総合スコア172

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問