Django实现视频播放的具体示例

 更新时间:2022年05月31日 11:14:47   作者:Candyeel  
本文主要介绍了Django实现视频播放的具体示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下<BR>

view视图

import re
import os
import mimetypes
from wsgiref.util import FileWrapper
from django.http import StreamingHttpResponse
from django.shortcuts import render
from django.conf import settings

def file_iterator(file_name, chunk_size=8192, offset=0, length=None):
    # 每次最多读取8Kb
    with open(file_name, "rb") as f:
        f.seek(offset, os.SEEK_SET)
        remaining = length  # 还有多少未读取
        while True:
            bytes_length = chunk_size if remaining is None else min(remaining, chunk_size)
            data = f.read(bytes_length)
            if not data:  # 没有数据了 退出
                break
            if remaining:
                remaining -= len(data)
            yield data


def stream_video(request):
    """将视频文件以流媒体的方式响应"""
    range_header = request.META.get('HTTP_RANGE', '').strip()
    range_re = re.compile(r'bytes\s*=\s*(?P<START>\d+)\s*-\s*(?P<END>\d*)', re.I)
    range_match = range_re.match(range_header)
    path = request.GET.get('path')
  #这里根据实际情况改变,我的views.py在core文件夹下但是folder_path却只到core的上一层,media也在core文件夹下
    video_path = os.path.join(settings.BASE_DIR, 'static', 'video')  # 视频放在目录的static下的video文件夹中
    file_path = os.path.join(video_path, path) #path就是template ?path=后面的参数的值
    size = os.path.getsize(file_path)  # 文件总大小
    content_type, encoding = mimetypes.guess_type(file_path)
    content_type = content_type or 'application/octet-stream'
    if range_match:
        # first_byte播放到的位置
        # 下次播放的位置 
        first_byte, last_byte = range_match.group('START'), range_match.group('END')
        first_byte = int(first_byte) if first_byte else 0
        # 从播放的位置往后读取10M的数据
        last_byte = first_byte + 1024 * 1024 * 10
        if last_byte >= size:  # 如果想读取的位置大于文件大小
            last_byte = size - 1  # 最后将图片全部读完
        length = last_byte - first_byte + 1  # 此次读取的长度(字节)
        resp = StreamingHttpResponse(file_iterator(file_path, offset=first_byte, length=length), status=200, content_type=content_type)
        resp['Content-Length'] = str(length)
        resp['Content-Range'] = 'bytes %s-%s/%s' % (first_byte, last_byte, size)
    else:
        resp = StreamingHttpResponse(FileWrapper(open(file_path, 'rb')), content_type=content_type)
        resp['Content-Length'] = str(size)
    resp['Accept-Ranges'] = 'bytes'
    return resp
 

前端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
</head>
<body>
<video id="media" src="" width="720" height="480" controls autoplay>浏览器不支持video标签 </video>
</video>
</body>
<script>
    $(function () {
            $("#media").attr('src', '/test_resp/?path=/media/video.mp4');
     })

</script>
</html>

到此这篇关于Django实现视频播放的具体示例的文章就介绍到这了,更多相关Django 视频播放 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pytorch模型保存与加载中的一些问题实战记录

    pytorch模型保存与加载中的一些问题实战记录

    一般来说,保存模型是把参数全部用model.cpu().state_dict(),然后加载模型时一般用model.load_state_dict(torch.load(model_path)),下面这篇文章主要给大家介绍了关于pytorch模型保存与加载中的一些问题实战记录,需要的朋友可以参考下
    2022-10-10
  • python解析yaml文件过程详解

    python解析yaml文件过程详解

    这篇文章主要介绍了python解析yaml文件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 为Python的Tornado框架配置使用Jinja2模板引擎的方法

    为Python的Tornado框架配置使用Jinja2模板引擎的方法

    Jinja2是人气Web框架Flask中的内置模板引擎,而且与Django的模板引擎比较类似,这里我们就来看一下为Python的Tornado框架配置使用Jinja2模板引擎的方法
    2016-06-06
  • Python当中的array数组对象实例详解

    Python当中的array数组对象实例详解

    这篇文章主要介绍了Python当中的array数组对象,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-06-06
  • python条件语句和while循环语句

    python条件语句和while循环语句

    这篇文章主要介绍了python条件语句和while循环语句,文章基于python的相关资料展开对其条件语句及while循环语句的详细内容介绍,需要的小伙伴可以参考一下
    2022-04-04
  • Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解

    Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解

    这篇文章主要介绍了Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法,结合实例形式总结分析了Python GUI编程tkinter中messagebox、filedialog控件基本功能、用法与操作注意事项,需要的朋友可以参考下
    2020-03-03
  • 公众号接入chatGPT的详细教程 附Python源码

    公众号接入chatGPT的详细教程 附Python源码

    这篇文章主要介绍了公众号接入chatGPT教程附Python源码,这里需要大家准备一个域名,一台服务器和一个公众号,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Python 抓取动态网页内容方案详解

    Python 抓取动态网页内容方案详解

    这篇文章主要介绍了Python 抓取动态网页内容方案详解,首先通过Chrome的工具来进行分析,然后再使用python进行处理,最终得到我们需要的内容,非常的方便,这里也算是给大家提供一个思路
    2014-12-12
  • Python排序函数的使用方法详解

    Python排序函数的使用方法详解

    这篇文章主要给大家介绍了关于Python排序函数使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 详解Django中类视图使用装饰器的方式

    详解Django中类视图使用装饰器的方式

    这篇文章主要介绍了详解Django中类视图使用装饰器的方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08

最新评论