阿嚏_ 2024-05-10 23:05 采纳率: 25%
浏览 0

下拉菜单选择播放视频后如何更改video标签

在Flask框架中我想要通过下拉菜单来选择播放的视频是什么,那么我将如何做才能先选择播放哪一个视频在渲染video标签呢?


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/video_stream" method="post">
        <select name="my_select">
            {% for option in options %}
                <option value="{{ option }}"
                        {% if option == selected_option %}
                        selected="selected"
                        {% endif %}>
                    {{ option }}
                </option>
            {% endfor %}
        </select>
        <input type="submit" value="Submit">
    </form>
    <video controls>
         <source src="{{ url_for('video_stream') }}" type="video/mp4">
        Your browser does not support the video tag.
    </video>
</body>
</html>

  • 写回答

2条回答 默认 最新

  • 笑面虎 2024-05-10 23:05
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您想要解决的问题是如何在Flask框架中通过下拉菜单选择不同的视频文件,然后根据选择更新<video>标签的<source>属性,以便播放用户选择的视频。

    【问题出现原因】:问题出现的原因是您的HTML页面中的<video>标签的<source>属性目前是静态的,它总是指向同一个视频流,而不是根据下拉菜单的选择动态变化。

    【问题解决方案】:为了实现这个功能,您需要在Flask后端处理表单提交,并根据用户的选择动态生成视频源的URL。然后,您需要将这个动态生成的URL传递回前端并更新<video>标签的<source>属性。

    以下是解决这个问题的步骤:

    1. 在Flask后端,创建一个路由来处理表单提交,并根据用户的选择返回相应的视频文件路径。
    2. 使用JavaScript(例如jQuery)来处理表单的提交,避免页面刷新,并动态更新视频源。
    3. 修改HTML模板,以便它可以接收并显示由后端处理后的视频URL。

    提供代码

    Flask后端代码示例(app.py):

    from flask import Flask, render_template, request, url_for, send_from_directory
    
    app = Flask(__name__)
    
    # 假设您有一个函数来根据选项获取视频文件的路径
    def get_video_path(selected_option):
        # 根据selected_option返回视频文件的路径
        video_paths = {
            'video1': '/path/to/video1.mp4',
            'video2': '/path/to/video2.mp4',
            # 更多视频路径...
        }
        return video_paths.get(selected_option)
    
    @app.route('/video_stream', methods=['POST'])
    def video_stream():
        selected_option = request.form['my_select']
        video_path = get_video_path(selected_option)
        if video_path:
            return send_from_directory('.', video_path, as_attachment=True)
        else:
            return "Video not found", 404
    
    @app.route('/')
    def index():
        options = ['video1', 'video2']  # 视频选项列表
        selected_option = None
        return render_template('index.html', options=options, selected_option=selected_option)
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    前端JavaScript代码示例(在HTML文件中):

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
    $(document).ready(function() {
        $('form').submit(function(event) {
            event.preventDefault();
            var selectedVideo = $('select[name="my_select"]').val();
            // 使用AJAX请求后端以获取视频URL
            $.post("/video_stream", { my_select: selectedVideo }, function(data, status) {
                // 更新video标签的source
                $('video source').attr('src', data);
            });
        });
    });
    </script>
    

    代码运行方式:您需要在具有Flask环境的服务器上运行这段代码。确保您的视频文件在服务器上的正确路径,并且app.run(debug=True)在您的开发环境中。

    代码预期运行结果:用户从下拉菜单中选择一个视频,提交后,页面不会刷新,但是视频播放器将开始播放用户选择的视频。

    推荐相关链接

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月10日

悬赏问题

  • ¥20 C#调用虚拟键盘TabTip.exe
  • ¥15 Qt4代码实现下面的界面
  • ¥15 CCS离散化传递函数与仿真不一致
  • ¥15 prism提示我reinstall prism 如何解决
  • ¥15 asp.core 权限控制怎么做,需要控制到每个方法
  • ¥20 while循环中OLED显示中断中的数据不正确
  • ¥15 这个视频里的stm32f4代码是怎么写的
  • ¥15 JNA调用DLL报堆栈溢出错误(0xC00000FD)
  • ¥15 请教SGeMs软件的使用
  • ¥15 自己用vb.net编写了一个dll文件,如何只给授权的用户使用这个dll文件进行打包编译,未授权用户不能进行打包编译操作?