利用python导入flv文本链接随机构造一组网页播放
通过导入本地文件夹内的文本,引入链接调用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)