当前位置:首页 > python代码 > 正文内容

利用python导入flv文本链接随机构造一组网页播放

王铁锹5个月前 (12-03)python代码241
引言如下

通过导入本地文件夹内的文本,引入链接调用python代码开放5000端口进行网页的flv随机播放,这个代码常用于随机测试flv的直播播放设置,亦或者监控等领域....

软件规划如下

FLV Video Player 是一个基于Web的简易视频播放器应用,使用Python的Flask框架构建。为用户提供一个简单而有效的平台来播放FLV格式的视频。

允许用户通过输入URL或者从预设的URL列表中随机选择一组视频进行播放。

主要功能

  • 用户自定义视频URL输入:用户可以通过在主页上的文本框中输入FLV视频的URL(每行一个),然后点击“Play Videos”按钮来加载和播放这些视频。

  • 随机播放预设视频组:应用从video.txt文件中读取一系列预设的FLV视频URL,并将它们分组。用户可以点击“Random Group”按钮来随机选择一组视频进行播放。

  • 响应式设计:页面布局会根据设备屏幕大小自动调整,确保在桌面和移动设备上都有良好的用户体验。

  • 集成FLV.js:利用FLV.js库实现对FLV视频格式的支持,使浏览器能够直接播放FLV视频流。

  • 视频播放控制:每个视频都带有播放、暂停、音量调节等基本控制功能,提供流畅的观看体验。

部署说明

此应用是一个简单的Flask Web应用,可以部署在任何支持Python环境的服务器上。为了方便开发和测试,应用默认运行在本地主机的5000端口上。

如果需要对外提供服务,可以通过配置Nginx或其他反向代理服务器,以及使用Gunicorn等WSGI服务器来优化性能和稳定性。


代码展示效果如下

代码展示效果图

代码部分如下

from flask import Flask, request, render_template_string, jsonify
import random

app = Flask(__name__)

# 读取并解析 36.txt 文件中的 URL
def read_flv_urls_from_file(filename):
    with open(filename, 'r') as file:
        lines = file.readlines()
        urls = [line.strip() for line in lines if line.strip()]
        grouped_urls = [urls[i:i+2] for i in range(0, len(urls), 2)]
    return grouped_urls

# 读取文件中的 URL 组
flv_url_groups = read_flv_urls_from_file('36.txt')

# 主页路由
@app.route('/', methods=['GET', 'POST'])
def index():
    flv_urls = []
    if request.method == 'POST':
        flv_urls = request.form.get('flv_url').splitlines()

    return render_template_string('''
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>FLV Video Player</title>
            <link href="https://vjs.zencdn.net/7.10.2/video-js.css" rel="stylesheet">
            <style>
                body {
                    font-family: Arial, sans-serif;
                    background-color: #f0f0f0;
                    margin: 0;
                    padding: 0;
                }
                .container {
                    max-width: 1200px;
                    margin: 0 auto;
                    padding: 50px;
                    text-align: center; /* 居中对齐 */
                }
                form {
                    background: #fff;
                    padding: 20px;
                    border-radius: 8px;
                    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
                    margin-bottom: 20px;
                    text-align: center; /* 居中对齐 */
                }
                label {
                    display: block;
                    margin-bottom: 10px;
                    font-weight: bold;
                }
                textarea {
                    width: 100%;
                    height: 100px;
                    padding: 10px;
                    border: 1px solid #ccc;
                    border-radius: 4px;
                    resize: vertical;
                }
                button {
                    background: #007bff;
                    color: #fff;
                    border: none;
                    padding: 10px 20px;
                    border-radius: 4px;
                    cursor: pointer;
                    margin-top: 10px; /* 按钮与文本区域的间距 */
                }
                button:hover {
                    background: #0056b3;
                }
                .video-container {
                    display: flex;
                    flex-wrap: wrap;
                    justify-content: space-around;
                }
                .video-item {
                    width: 45%;
                    margin-bottom: 20px;
                    background: #fff;
                    border-radius: 8px;
                    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
                    overflow: hidden;
                }
                @media (max-width: 768px) {
                    .video-item {
                        width: 90%;
                    }
                }
                .video-js {
                    width: 100%;
                    height: 300px;
                }
                #random-group-btn {
                    background-color: red; /* 设置背景色为红色 */
                    color: white; /* 设置文字颜色为白色 */
                }
            </style>
        </head>
        <body>
            <div>
                <form action="/" method="post">
                    <label for="flv_url">Enter FLV Video URLs (one per line):</label>
                    <textarea id="flv_url" name="flv_url" rows="4" cols="50">{{ '\\n'.join(flv_urls) }}</textarea>
                    <button type="submit">Play Videos</button>
                </form>
                <button id="random-group-btn">Random Group</button>

                <div id="video-container"></div>
            </div>

            <script src="https://vjs.zencdn.net/7.10.2/video.js"></script>
            <script src="https://cdn.jsdelivr.net/npm/flv.js/dist/flv.min.js"></script>
            <script>
                document.addEventListener("DOMContentLoaded", function() {
                    const flvUrls = {{ flv_urls | tojson }};
                    const container = document.getElementById('video-container');

                    function playVideos(urls) {
                        if (container) {
                            container.innerHTML = ''; // 清空之前的视频
                            urls.forEach((url, index) => {
                                const videoItem = document.createElement('div');
                                videoItem.className = 'video-item';

                                const videoElement = document.createElement('video');
                                videoElement.id = `my-video-${index + 1}`;
                                videoElement.className = 'video-js vjs-default-skin';
                                videoElement.controls = true;
                                videoElement.preload = 'auto';
                                videoElement.width = '100%';
                                videoElement.height = '300px';

                                const sourceElement = document.createElement('source');
                                sourceElement.src = url;
                                sourceElement.type = 'video/x-flv';

                                videoElement.appendChild(sourceElement);
                                videoItem.appendChild(videoElement);
                                container.appendChild(videoItem);

                                if (flvjs.isSupported()) {
                                    const flvPlayer = flvjs.createPlayer({
                                        type: 'flv',
                                        url: url
                                    });
                                    flvPlayer.attachMediaElement(videoElement);
                                    flvPlayer.load();
                                    flvPlayer.play();
                                } else {
                                    alert('FLV.js is not supported in your browser.');
                                }
                            });
                        } else {
                            console.error('Video container not found');
                        }
                    }

                    if (flvUrls.length > 0) {
                        playVideos(flvUrls);
                    }

                    document.getElementById('random-group-btn').addEventListener('click', function() {
                        fetch('/random-group')
                            .then(response => response.json())
                            .then(data => {
                                playVideos(data.urls);
                            })
                            .catch(error => console.error('Error:', error));
                    });
                });
            </script>
        </body>
        </html>
    ''', flv_urls=flv_urls)

# 随机选择一组 URL
@app.route('/random-group', methods=['GET'])
def random_group():
    if flv_url_groups:
        random_group = random.choice(flv_url_groups)
        return jsonify({'urls': random_group})
    else:
        return jsonify({'urls': []})

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

扫描二维码推送至手机访问。

微信搜索关注王铁锹公众号或者搜索王秋风。

版权声明:本文由王铁锹个人发布,如需转载请注明出处。

本文链接:https://www.3ban.cn/?id=56

“利用python导入flv文本链接随机构造一组网页播放” 的相关文章

python代码实现网页在线flv播放小工具

python代码实现网页在线flv播放小工具

项目介绍项目名称:python代码实现网页在线flv播放小工具简介:FlvPlayer 是一个简单的在线FLV格式视频播放器,它利用Python语言开发,旨在提供一种轻量级的方式让用户能够直接通过网络浏览器播放FLV格式的视频文件。此工具特别适合那些需要快速查看或分享FLV格式视频而不想下载专门的媒...

巧用python代码生成网站sitemap地图

巧用python代码生成网站sitemap地图

引言如下:在互联网的世界里,拥有一个清晰、易于导航的网站地图(sitemap)对于网站的成功至关重要。网站地图不仅有助于用户更好地了解网站结构,还能极大地提升搜索引擎优化(SEO)因为它为搜索引擎爬虫提供了发现和索引页面的有效途径。通过提供一个全面且更新及时的网站地图,我们可以确保搜索引擎能够快速找...

Python脚本实现自动检测并重命名非正常图片文件

Python脚本实现自动检测并重命名非正常图片文件

概述在日常的文件管理和数据处理中,我们可能会遇到一些文件名虽然以特定扩展名结尾,但实际内容并不符合该格式的情况。例如,某些文件可能被错误地标记为 .jpg 文件,但实际上它们可能是其他类型的文件,如视频文件。这种情况下,如果我们依赖文件扩展名来处理文件,就可能导致程序出现错误或无法正确处理文件。本文...

PHP脚本获取客户端IP地址和解析设备信息

PHP脚本获取客户端IP地址和解析设备信息

在互联网应用中,了解访问者的信息对于网站分析、用户行为跟踪以及安全控制等方面非常重要。PHP是一种广泛使用的服务器端脚本语言,它提供了多种方法来收集和处理来自客户端的数据。下面的代码片段展示了两个PHP函数,它们分别用于获取客户端的IP地址和解析用户的设备信息(包括操作系统和浏览器)。获取客户端IP...

vivo云服务照片视频批量下载代码~

vivo云服务照片视频批量下载代码~

起因,想要从vivo云服务中下载历史上传四五千张照片,结果点击全选之后,居然要我一张一张下载,需要我不停的点保存,这就很抽象了,难道我想要的批量下载不应该是打包成压缩包或者直接批量下载到文件夹中嘛?这点厂商做的甚至不如云盘,细节一点也没打磨!!!第一步打开vivo云服务官网,进入主页,打开控制台进行...