返回顶部
首页 > 资讯 > 精选 >html5用video标签流式加载的实现
  • 894
分享到

html5用video标签流式加载的实现

2023-06-09 10:06:13 894人浏览 薄情痞子
摘要

这篇文章主要介绍了HTML5用video标签流式加载的实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。video标签浏览器的video标签通常是接收一个src属性,然后浏览

这篇文章主要介绍了HTML5用video标签流式加载的实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

video标签

浏览器的video标签通常是接收一个src属性,然后浏览器就会根据这个src属性来自动加载视频。
这个过程是浏览器来加载video的。

这种方式有什么问题吗?

  • mp4文件不能流式加载

  • WEBm,flv,hls等格式兼容性问题

  • 播放器ui太丑,一些常用的功能都没有

  • 清晰度切换,等一些操作需要重载视频,比较慢而且还会黑屏

  • 无法对视频加密

请求video流视频

我们可以通过设置responseType为arraybuffer来获取视频流,也可以通过range字段来获取视频流片段。比如

let xhr = new window.XMLHttpRequest();xhr.responseType = 'arraybuffer'xhr.open('get', 'http://www.w3school.com.cn/i/movie.mp4')xhr.responseType = 'arraybuffer';// xhr.setRequestHeader('Range', `bytes=0-390625`)xhr.onload = function () {    if (xhr.status === 200 || xhr.status === 206) {        console.log(xhr.response)    }}xhr.send();

或者fetch的arrayBuffer方法返回视频流。

 fetch(videoUrl).then(function(response) {       return response.arrayBuffer(); })

获取到的数据是什么呢?二进制的视频流。
获取这个有什么用呢?

video去播“流”

MediaSource

MediaSource简称mse,是h6的一个api,它允许通过js生成媒体流,让浏览器播放。

使用

我们通过 URL.createObjectURL来创建一个blob格式的视频文件,来给video标签播。
具体用法就是new MediaSource,然后根据这个MediaSource生成blob文件,然后向MediaSource中添加mime和视频流。

<div class="a">        <video id="video" controls preload="auto"></video>    </div>    <script>        $(function() {            var video = document.querySelector('#video');            var mediaSource = new MediaSource();            video.src = URL.createObjectURL(mediaSource);            mediaSource.addEventListener('sourceopen', sourceOpen);            function sourceOpen(e) {                URL.revokeObjectURL(video.src);                // 设置 媒体的编码类型                var mime = 'video/webm; codecs="vorbis,vp8"';                var mediaSource = e.target;                var sourceBuffer = mediaSource.addSourceBuffer(mime);                var videoUrl = 'http://localhost:9090/examples/mp4/video.webm';                fetch(videoUrl).then(function(response) {                        console.log(response)                        return response.arrayBuffer();                    })                    .then(function(arrayBuffer) {                        sourceBuffer.addEventListener('updateend', function(e) {                            if (!sourceBuffer.updating && mediaSource.readyState === 'open') {                                mediaSource.endOfStream();                                // 在数据请求完成后,我们需要调用 endOfStream()。它会改变 MediaSource.readyState 为 ended 并且触发 sourceended 事件。                                video.play().then(function() {}).catch(function(err) {                                    console.log(err)                                });                            }                        });                        sourceBuffer.appendBuffer(arrayBuffer);                    });            }        })</script>

我们的mine是什么呢?
video/webm是视频格式,codecs后面第一段是一些视频编解码的一些重要信息,诸如编码方式、分辨率、帧率、码率以及对解码器解码能力的要求。
第二段是关于音频部分的信息。

html5用video标签流式加载的实现
 

生成这样的一个video标签。我们现在绕过了浏览器直接去请求src这一步,ajax请求视频流,然后我们可以对视频流进行处理,直接操作视频流实现我们需要的各种功能。
但是对于mp4格式,是不支持流式加载的,所以只能通过我们自己操作流来实现流式播放。

播放器

公司同事研发了一款开源播放器,https://GitHub.com/bytedance/xgplayer ,西瓜视频好几千万dau的产品实测。

播放器原理

它是利用了流式处理视频源,不仅仅是简单的请求流然后交给video标签播放,它是请求视频流然后用js解码然后进行一些需要的操作,交给video播放。

为什么要用js解码呢?

公司大部分视频是mp4,怎么让mp4支持流播放呢?我们把mp4的流拿过来,js解析出它的视频信息,然后js转换成支持视频流的fmp4格式的文件。
它的优势是

  1. 解决了chrome不支持hls格式的问题(还有各种不支持格式的问题),因为我们是直接操作二进制视频数据,所以不存在video标签不支持的情况。

  2. 解决了切换清晰度重新刷新视频的问题

  3. 对于mp4文件快进操作进行最小化的请求加载,让它支持流式加载。

  4. 支持直播和弹幕

我们直接操作的视频流,所以在对视频进行清晰度切换,或者快进的时候,我们后计算当前时间的流,然后用js加载视频的新的流,从而进行最快的加载和响应。

感谢你能够认真阅读完这篇文章,希望小编分享的“html5用video标签流式加载的实现”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: html5用video标签流式加载的实现

本文链接: https://lsjlt.com/news/255714.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • html5用video标签流式加载的实现
    这篇文章主要介绍了html5用video标签流式加载的实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。video标签浏览器的video标签通常是接收一个src属性,然后浏览...
    99+
    2023-06-09
  • HTML5的Video标签怎么用
    这篇文章主要介绍HTML5的Video标签怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! <video>标签的属性 复制代码 代码如下: src :视频的属...
    99+
    2024-04-02
  • HTML5的video标签怎么使用
    要使用HTML5的video标签,可以按照以下步骤进行操作:1. 首先,在HTML文档中添加video标签,如下所示:```html...
    99+
    2023-09-13
    HTML5
  • HTML5的audio标签和video标签怎么使用
    这篇文章主要介绍了HTML5的audio标签和video标签怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇HTML5的audio标签和video标签怎么使用文章都会有所...
    99+
    2024-04-02
  • HTML5中的Video标签如何使用
    这篇文章主要介绍“HTML5中的Video标签如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“HTML5中的Video标签如何使用”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • HTML5 video 视频标签的使用方法
    这篇文章主要介绍“HTML5 video 视频标签的使用方法”,在日常操作中,相信很多人在HTML5 video 视频标签的使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • HTML5 video标签的使用技巧有哪些
    这篇文章主要讲解了“HTML5 video标签的使用技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTML5 video标签的使用技巧有哪些”吧!...
    99+
    2024-04-02
  • HTML5如何使用video标签实现选择摄像头功能
    这篇文章主要介绍了HTML5如何使用video标签实现选择摄像头功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。详解HTML5 使用vid...
    99+
    2024-04-02
  • Vue使用video标签实现视频播放
    本文项目为大家分享了Vue使用video标签实现视频播放的具体代码,供大家参考,具体内容如下 项目需求:动态显示视频滚动条、禁止视频下载、播放时每5s更新当前时长、每10分钟暂停视频...
    99+
    2024-04-02
  • HTML5的Audio/Video标签,属性,方法,事件实例分析
    本文小编为大家详细介绍“HTML5的Audio/Video标签,属性,方法,事件实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML5的Audio/Video标签,属性,方法,事件实例分析”文章...
    99+
    2024-04-02
  • Android实现热门标签的流式布局
    一、概述: 在日常的app使用中,我们会在android 的app中看见 热门标签等自动换行的流式布局,今天,我们就来看看如何 自定义一个类似热门标签那样的流式布局吧(源码下载...
    99+
    2022-06-06
    流式布局 布局 标签 Android
  • HTML5中audio标签的使用方式
    本篇内容主要讲解“HTML5中audio标签的使用方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5中audio标签的使用方式”吧!在HTML5标准网...
    99+
    2024-04-02
  • python 实现添加标签&打标签的操作
    普通打标签 odue_df=df_train_stmt.loc[(df_train_stmt.AGE3>0)|(df_train_stmt.AGE4>0)|(df_train_stmt.AGE5>...
    99+
    2022-06-02
    python 添加标签 打标签
  • Android 实现FlowLayout流式布局(热门标签)
    先上效果图: 接着看代码实现: public class FlowLayout extends ViewGroup { protected DataSetObser...
    99+
    2022-06-06
    布局 标签 Android
  • 怎么在html5中自定义video标签实现海报与播放按钮功能
    怎么在html5中自定义video标签实现海报与播放按钮功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、问题默认播放按键不好看设置自定义封面图以上这两点都...
    99+
    2023-06-09
  • html5标签css3的常用样式有哪些
    这篇“html5标签css3的常用样式有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2024-04-02
  • HTML5怎么实现图片无限加载的瀑布流效果
    本篇内容主要讲解“HTML5怎么实现图片无限加载的瀑布流效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5怎么实现图片无限加载的瀑布流效果”吧!代码如...
    99+
    2024-04-02
  • HTML5怎样实现图片无限加载瀑布流效果
    这篇文章主要介绍了HTML5怎样实现图片无限加载瀑布流效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。代码如下:<!DOCTYPE&...
    99+
    2024-04-02
  • html5实现下拉列表的标签是什么
    这篇文章主要介绍html5实现下拉列表的标签是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! html5实现下拉列表的标签是“<select&g...
    99+
    2024-04-02
  • 怎么解决html5中的video标签ios系统中无法播放使用的问题
    这篇文章主要介绍怎么解决html5中的video标签ios系统中无法播放使用的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!先是从前端的角度去考虑,如何让safari浏览器兼容video,并支持播放(未找到解决的...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作