热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python开发视频播放器_基于Flask的在线视频播放器

项目描述使用Flask实现的简单网页视频播放器。开发准备:Python3功能简介在线视频播放视频列表浏览上传共享视频基于socket的多人弹幕评论功能

项目描述

使用 Flask 实现的简单网页视频播放器。

开发准备:Python3

功能简介

在线视频播放

视频列表浏览

上传共享视频

基于socket的多人弹幕评论

功能演示

5dfc4a584e18

项目结构

Vision

—— blueprints (注册蓝图)

—— sockets (内嵌 socket ,用于实现在线评论等功能)

—— static (静态资源目录)

———— css ( css 文件)

———— js ( Javascript 文件)

———— img (静态图片资源)

———— image (视频缩略图)

———— video (视频源文件)

———— upload (保存视频格式文件)

—— templates (网页模板文件)

—— utils (功能文件夹)

—— app.py (系统启动文件)

1. 上传视频

定义/play/upload接口,用于提供上传视频页面。

定义/play/music/upload接口,用于网页通过POST请求上传视频到后台。

bp = Blueprint('play',__name__,url_prefix="/play")

@bp.route('/upload', methods=['GET'])

def upload():

return render_template('play/upload.html')

@bp.route('/music/upload', methods=['POST'])

def doupload():

id = random_name()

# 下载视频

video = request.files['video']

video.save('static/video/' + id + file_extension(video.filename))

# 下载视频缩略图

image = 'static/image/' + id + '.jpg'

capture('static/video/' + id + file_extension(video.filename), image)

data = {

"author": request.form["author"],

"date": now(),

"image": "/" + image,

"video": "/static/video/" + id + file_extension(video.filename),

"title": request.form["title"]

"description": request.form["description"]

}

# 保存视频格式化文件

with open("static/upload/" + id + ".json", "w") as f:

json.dump(data, f)

return redirect(url_for('play.index'))

default.json(视频保存格式):

{

"author": "管理员",

"date": "2019-03-21 15:33",

"image": "/static/image/wsl.png",

"video": "/static/video/wsl.mp4",

"title": "一笑倾城",

"description": "我想和你唱 汪苏泷"

}

提示:所有格式化文件均保存在upload文件夹中。

上传视频表单:

返回

分享人:

长度1~5个字符

标题:

长度1~20个字符

视频:

请使用mp4格式

2. 滚动弹幕评论

服务端

基于flask_socketio;

监听用户登录(connect)、登出(disconnect)状态;

一旦监听到用户评论信息(imessage),就向客户端广播 message 信息。

from flask_socketio import emit

namespace = "/comment"

@socketio.on('imessage', namespace=namespace)

def test_message(message):

emit('message', {'data': message['data']}, broadcast=True, namespace=namespace)

@socketio.on('connect', namespace=namespace)

def connected_msg():

"""socket client event - connected"""

socketio.emit('message', {'data': '系统消息:欢迎进入!!!'}, namespace=namespace)

print('client connected!')

@socketio.on('disconnect', namespace=namespace)

def disconnect_msg():

"""socket client event - disconnected"""

socketio.emit('message', {'data': '系统消息:有人离开了!!!'}, broadcast=True, namespace=namespace)

print('client disconnected!')

客户端

基于socket.io.min.js ;

监听所有 message 信息,并提取内容产生滚动弹幕;

获取用户评论信息,并以 imessage 消息形式发送给服务端。

var namespace = '/comment';

var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port + namespace);

socket.on('message', function (msg) {

$('body').barrager({'href': '#', 'info': $('


').text(decodeURI(msg.data)).html()});

});

$("#comment").keypress(function (e) {

if (e.which == 13) {

socket.emit('imessage', {data: encodeURI($('#comment').val())});

$('#comment').val('');

}

});

3. 项目启动入口

app.py:

from flask import *

from flask_socketio import SocketIO

from blueprints import play

from sockets import comment

app = Flask(__name__)

app.config['SECRET_KEY'] = '123456'

@app.route('/')

def index():

return redirect(url_for("play.index"))

app.register_blueprint(play.bp)

socketio = SocketIO(app)

comment.register_comment(socketio)

if __name__ == '__main__':

socketio.run(app, host='0.0.0.0', port=80, debug=True)

在命令行中执行python app.py,启动系统,如果提示有工具包未安装,使用pip install即可 。默认运行在80端口,你可以在浏览器中访问localhost或者电脑的局域网IP地址。启动成功后,赶紧把你的服务IP地址告诉小伙伴,一起交流分享视频资源吧!

完整项目代码可以在微信公众号【四元群】,后台回复「播放器」获取。


推荐阅读
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
author-avatar
傻傻的不敢看结5_749
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有