利用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) 




