西瓜影音怎么,青柠影视在线观看免费高清

转发链接:目录细品西瓜播放器功能分析(上)「实践」本篇简介西瓜视频播放器(HTML5)一款带解析器、能节省流量的HTML5视频播放器。它从底层解析MP4、HLS、FLV探索更大的视频播放可控空间。它具

转发链接:

目录

细品西瓜播放器功能分析(上)「实践」本篇

简介

西瓜视频播放器(HTML5)一款带解析器、能节省流量的 HTML5 视频播放器。它从底层解析 MP4、HLS、FLV 探索更大的视频播放可控空间。它具有以下功能特色:

易扩展:灵活的插件体系、PC/移动端自动切换、安全的白名单机制;

更丰富:强大的 MP4 控制、点播的无缝切换、有效的带宽节省;

较完整:完整的产品机制、错误的监控上报、自动的降级处理。

背景

字节跳动的视频业务大多数是短视频,早期的时候我们在 video.js 基础上做二次开发。后来发现很多功能达不到我们的要求,比如自定义 UI 的成本、视频的清晰度无缝切换、视频流量的节省。考虑到当前点播依旧是 mp4 居多,我们做了个大胆的假设:在播放器端加载视频、解析视频、转换格式,让不支持分段播放的 mp4 动态支持,这样就无须转换源视频的格式,服务器端也无其他开销。在这个动力下,我们在 2017 年年底完成了这项开发任务,并与2018 年年初测试了稳定性和经济收益。

一、西瓜播放器架构

1.1 功能分析思维导图

二、西瓜播放器 UML

三、内置插件功能分析

西瓜视频播放器主张一切设计都是插件,小到一个播放按钮大到一项直播功能支持。想更好的自定义播放器完成自己业务的契合,理解插件机制是非常重要的,播放器本身有很多内置插件,比如报错、loading、重播等,如果大家想自定义效果可以关闭内置插件,自己开发即可。

3.1 本地预览功能

播放器预览本地视频功能,不建议改动。源码

地址:

使用方式

new Player({el:document.querySelector(&mse&39;video_url&39;div&39;&39;&34;xg-preview&39;<input type=&34;>&34;xgplayer-preview&34;input&34;xgplayer-nostart&34;localPreview",localPreview);

原理分析

视频本地预览的功能主要利用 URL.createObjectURL() API 来实现。URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的 URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。 这个新的 URL 对象表示指定的 File 对象或 Blob 对象。

注意: 此特性在 Web Worker 中可用。

注意:此特性在 Service Worker 中不可用,因为它有可能导致内存泄漏。

input file 获取本地 File 对象

把 File 对象转换为 ObjectURL

设置 Video 元素的 src 为视频本地的 ObjectURL 地址

扩展分析

1、前端本地图片预览的实现方式

前端本地图片预览,可以通过 FileReader.readAsDataURL 或 URL.createObjectURL 的方式来实现。

2、FileReader vs URL.createObjectURL

2.1 是否同步

createObjectURL 是同步执行

FileReader.readAsDataURL 是异步执行的

2.2 内存使用

createObjectURL 方法会返回一个本地的 URL 地址,对象会一直保存在内存中,直到文档触发 unload 事件(比如 document close)或者手动调用 revokeObjectURL。

FileReader.readAsDataURL 会返回 base64 格式的字符串,比 Blob URL 的方式会占用更多的内存空间,当你不需要使用它的时候,可以通过系统的垃圾回收机制来自动进行回收。

2.3 兼容性

createObjectURL:支持 IE 10 以上的主流浏览器,详细的兼容性,可以查看 caniuse - createObjectURL。

FileReader.readAsDataURL:支持 IE 10 以上的主流浏览器,详细兼容性,可以查看 caniuse - readAsDataURL

地址:

3、createObjectURL 特性检测

function createObjectURL (file) { if (window.webkitURL) { return window.webkitURL.createObjectURL(file); } else if (window.URL && window.URL.createObjectURL) { return window.URL.createObjectURL(file); } else { return null; } }

地址:

4、插件优化项

为了避免大的视频通过 createObjectURL 方式进行预览会造成大量的内存占用,是否提供一套智能的回收方案,比如在特定时机点调用 revokeObjectURL 方法。

源码中 player.config.preview.uploadEl.appendChild(preview) 只是保证对象是否存在,并没有保证传入的对象一定是 DOM 元素。判断是否为 DOM 元素,可以使用以下的方法来判断:

function isElement(obj) {try {//Using W3 DOM2 (works for FF,Opera and Chrome)return obj instanceof HTMLElement;}catch(e){//Browsers not supporting W3 DOM2 don&34;object&34;object&34;object");}}

Update 2

/Returns true if it is a DOM nodefunction isNode(o){return (typeof Node === &34; ? o instanceof Node : o && typeof o === &34; && typeof o.nodeType === &34; && typeof o.nodeName===&34;);}//Returns true if it is a DOM elementfunction isElement(o){return (typeof HTMLElement === &34; ? o instanceof HTMLElement : //DOM2o && typeof o === &34; && o !== null && o.nodeType === 1 && typeof o.nodeName===&34;);}

地址:

3.2 播放器截图

播放器内部截图,截图格式可以自定义。源码

地址:

截图功能支持用户对当前视频播放窗口进行即时截屏,截图尺寸即为当前视频播放窗口的尺寸,截图默认为 .png 格式。

使用方式

new Player({el:document.querySelector(&mse&39;video_url&39;xg-screenShot&39;<p class=&34;><span>截图</span></p>&39;xgplayer-screenShot&39;canvas&39;2d&39;click&39;touchstart&34;&34;&39;crossOrigin&39;anonymous&39;image/png&39;image/png&39;image/octet-stream&39;data:application/octet-stream&39;截图.png&39;screenShot',screenShot)

原理分析

播放器截图功能主要利用 CanvasRenderingContext2D.drawImage() API 来实现。Canvas 2D API 中的 CanvasRenderingContext2D.drawImage() 方法提供了多种方式在 Canvas 上绘制图像。drawImage API 的语法如下:

void ctx.drawImage(image,dx,dy);

void ctx.drawImage(image,dx,dy,dWidth,dHeight);

其中 image 参数表示绘制到上下文的元素。允许任何的 canvas 图像源(CanvasImageSource),例如:CSSImageValue,HTMLImageElement,SVGImageElement,HTMLVideoElement,HTMLCanvasElement,ImageBitmap 或者 OffscreenCanvas。

创建截屏按钮并添加到播放器控制条上

创建 Canvas 元素和一个 Image 实例

为截屏按钮绑定事件监听,如 click 和 touchstart 事件

用户点击截屏时,触发对应的回调函数并通过 drawImage() 获取当前视频帧

扩展分析

1、Image 元素的 crossOrigin 属性

在 HTML5 中,一些 HTML 元素提供了对 CORS 的支持, 例如 audio、image、link、script 和 video 均有一个跨域属性(crossOrigin property),它允许你配置元素获取数据的 CORS 请求。

企业回水幕电影安装、扇形水幕电影、双幕水幕电影、环形水幕电影,巨幕水幕电影就找四川鑫邦喷泉工程有限公司。十年丰富施工经验、完善后期工程维护、一站式解决方案,专注于打造有文化、有特色的标志性亮点景观。想了解更多关于水幕电影的相关讯息,。

默认情况下(即未指定 crossOrigin 属性时),CORS 根本不会使用。如 Terminology section of the CORS specification 中的描述,在非同源情况下,设置 &34; 关键字将不会通过 cookies,客户端 SSL 证书或 HTTP 认证交换用户凭据。即使是无效的关键字和空字符串也会被当作 anonymous 关键字使用。

地址:

2、HTMLCanvasElement.toDataURL()

HTMLCanvasElement.toDataURL() 方法返回一个包含图片展示的 data URI 。可以使用 type 参数其类型,默认为 PNG 格式。图片的分辨率为 96dpi。

如果画布的高度或宽度是 0,那么会返回字符串 &34;

如果传入的类型非 &34;,但是返回的值以 &34; 开头,那么该传入的类型是不支持的。

Chrome 支持 &34; 类型。

HTMLCanvasElement.toDataURL() 语法如下:

canvas.toDataURL(type,encoderOptions);

type 可选,图片格式,默认为 image/png

encoderOptions 可选

在指定图片格式为 image/jpeg 或image/webp 的情况下,可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。

const canvas = document.getElementById(&34;);const dataURL = canvas.toDataURL();console.log(dataURL);// &34;

首先,需要下载能够进行搜索和观看最新影片的西瓜影视播放器。在浏览器搜索框输入“西瓜影音1.0.0.13”,单击第一个搜索结果进入下载即可。软件大小为17M左右的为正确的版本。之所以这样做,是因为最新版的西瓜影音播放器已经。

3、前端文件下载

方案一:

方案二:

const a = document.createElement(&39;);const url = window.URL.createObjectURL(blob);const filename = &39;;a.href = url;a.download = filename;a.click();window.URL.revokeObjectURL(url);

DataURL 与 createObjectURL 方式的区别,可以阅读本地预览功能 > 扩展分析部分。

地址:

4、自定义事件

let event = document.createEvent(&39;)event.initMouseEvent(&39;,true,false,window,0,0,0,0,0,false,false, false,false,0,null)saveLink.dispatchEvent(event)

5、插件优化项

let array = [&39;,&39;] 变量命名规范化,建议 array 命名为 events。

在播放器卸载的时候,执行相关的清理操作。比如回收 let img = new Image() 插件内创建的 Image 元素并解除该元素上已绑定的事件。

3.3 下载功能

播放器下载控件,可以自定义。源码

地址:

使用方式

视频下载控件,点击后下载视频。

let player = new Player({download: true //设置download控件显示});

配置项:download

默认值:false

源码实现

import downloadUtil from &34;;const download = function() {const player = this;if (!this.config.download) {return;}let container = player.root;let util = Player.util;// util.createDom = function (el = &39;,tpl = &39;,attrs = {},cname = &39;)let downloadEl = util.createDom(&34;, `<xg-icon class=&34;></xg-icon>`, {}, &34;);let root = player.controls;root.appendChild(downloadEl);let tipsDownload =player.config.lang && player.config.lang === &34; ? &34; : &34;;// util.createDom = function (el = &39;,tpl = &39;,attrs = {},cname = &39;)let tips = util.createDom(&34;,tipsDownload,{},&34;);downloadEl.appendChild(tips);player.download = function() {const url = getAbsoluteURL(player.config.url);downloadUtil(url);};downloadEl.addEventListener(&34;,e => {e.stopPropagation();// must pass an absolute url for downloadplayer.download();});downloadEl.addEventListener(&34;,e => {e.preventDefault();e.stopPropagation();tips.style.left = &34;;let rect = tips.getBoundingClientRect();let rootRect = container.getBoundingClientRect();if (rect.right > rootRect.right) {tips.style.left = `${-rect.right + rootRect.right + 16}px`;}});};Player.install(&34;,download);

原理分析

扩展分析

1、获取绝对路径

export const getAbsoluteURL = function (url) {// Check if absolute URLif (!url.match(/^https?:\/\//)) {const div = document.createElement(&39;)div.innerHTML = `<a href=&34;>x</a>`url = div.firstChild.href}return url}

地址:

3.4 播放器贴图

播放器贴图,不建议改动。源码

地址:

使用方式

封面图是当播放器初始化后在用户点击播放按钮前显示的图像。

new Player({el:document.querySelector(&mse&39;video_url&39;//abc.com/**/*.png'});

配置项:poster

默认值:&39;

源码实现

let poster = function() {let player = this;let util = Player.util;// util.createDom = function (el = &39;,tpl = &39;,attrs = {},cname = &39;)let poster = util.createDom(&34;,&34;,{},&34;);let root = player.root;// 是否使用默认的封面图if (player.config.poster) {poster.style.backgroundImage = `url(${player.config.poster})`;root.appendChild(poster);}// 监听播放事件,播放时隐藏封面图function playFunc() {poster.style.display = &34;;}player.on(&34;,playFunc);// 监听销毁事件,执行清理操作function destroyFunc() {player.off(&34;,playFunc);player.off(&34;,destroyFunc);}player.once(&34;,destroyFunc);};Player.install(&34;,poster);

原理分析

xgplayer 的插件基于 EventEmitter 事件系统,通过监听播放器的 play 事件来隐藏 poster 海报。此外通过监听播放器的 destory 事件来实现清理操作,比如移除 play 事件的监听器和 destroy 事件。

扩展分析

1、poster.style.backgroundImage = url(${player.config.poster}) 未判断是否为有效 URL 地址

考虑到代码的健壮性,最好判断一下 player.config.poster 的属性值是否为合法的 URL 地址或 DataURL。另外为了避免用户设置的图片出现问题,导致页面出现异常,可以考虑降级处理,即设置 Fallback 图片。

div { background-image: url(&39;;);background-repeat:no-repeat;background-size: 100%;height:200px;width:200px;}

地址:

3.5 画中画

播放器画中画功能,不建议改动。源码

地址:

使用方式

new Player({el:document.querySelector(&mse&39;video_url', pip: true});

配置项:pip

默认值:false

本篇未完结,请见下一篇

推荐JavaScript学习相关文章

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

1、首先就是要下载西瓜影音最新版本安装程序。2、下载完成之后,打开安装程序,进入西瓜影音的安装。3、选择西瓜影音安装位置,设置是否作为本地默认播放器、是否开机启动以及关联的文件类型。点击下一步继续安装。4、西瓜音乐播。

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

1、首先就是要下载西瓜影音最新版本安装程序。 2、下载完成之后,打开安装程序,进入西瓜影音的安装。3、新西瓜、新体验,西瓜2.0全新版,点击开始安装!3、选择西瓜影音安装位置,设置是否作为本地默认播放器、是否开机启。

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

我们先打开西瓜影音播放器,打开浏览器然后我们“所要看的电影+西瓜影音”点击进入页面接着我们进入页面选择西瓜影音播放器一项和你要想下载的格式,BD或DVD等这时我们点击下载,进入页面,等待一小会。当影片开始播放时,打开。

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

手机版西瓜影音播放器使用方法:打开手机西瓜影音播放器。该版本的手机西瓜影音播放器检索功能并不可用,检索了一些软件首页就有资源的《失孤》,但是返回了“badrequest”页面。在首页直接点选电影进行观看还是可以的。播放界面。

西瓜影音怎么

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

西瓜影音怎么

《》

转发链接:

上一篇 2023年04月20 14:26
下一篇 2023年04月10 03:23

相关推荐

  • 怎么把视频放大

    最近在浏览GitHub的时候,偶然发现了一个非常牛逼的开源库,视频怎样放大播放,利用机器学习算法竟然把图片无损放大N倍,简直逆天!这个库叫做video2x,目前有4300+颗星星,是基于waifu2x

    2023年02月11 301
  • 怎么把视频字幕去掉,视频去除字幕怎么弄

    视频字幕提取是一种将视频中的对话或文本转换成可编辑文本的过程。这种技术可以帮助我们更轻松地查找和阅读视频中的内容,也有助于我们在视频中添加字幕借此提高可访问性和易用性。字幕提取过程可以使用各种工具和技

    2023年05月25 271
  • 怎么拼视频

    在我们的视频编辑过程中,经常会将视频内容剪辑出精彩的内容,并将它们合并成同一个视频进行编辑。但是很多小伙伴剪辑完成后都不知道如何合并,今天小编就来分享两种简单的方法,多个视频拼在一个画面,可以快速解决

    2023年02月08 262
  • 蘑菇街怎样申请当主播,蘑菇街主播怎么申请

    目前电商平台很多,很多商家在选择平台时比较盲目,不知道该如何选择。有传统的大型电商平台天猫、京东,还有新型的社交电商平台爱库存、唯代购等,实在是让人摸不着头脑。其实除却他们商业模式的分类,蘑菇街主播怎

    2023年01月04 232
  • 怎么转视频格式

    现在我们日常生活过程中有很多地方都会接触到视频,像日常的我们浏览各大网站都会有各种各样的视频内容,尤其是一些大型的视频网站像爱奇艺,优酷,芒果TV还有B站等等,很多小伙伴也喜欢下载一些视频存在自己的手

    2023年05月14 238
  • 怎样把好友从黑名单拉出来

    在我们的日常生活中,微信已经成为我们最经常用的沟通和交流工具。但是,在使用微信的过程中,有时候,我们嫌对方发朋友圈或微商的消息太多,就会把对方拉入黑名单。但是,拉入黑名单之后,偶尔又会发现,有些事情又

    2023年01月09 217
  • 直播怎么弄,我想开直播怎么开

    我多人想做直播但是不知道如何搭建直播间。场景搭建的基础常识进入个人主页后,点击右上角三个杠,在菜单栏中,选择“创作者服务中心”;然后点击“开始直播”,即可进入直播,在直播界面中,添加你的直播封面,编辑

    2023年02月08 279
  • 快手怎样直播

    快手怎么直播?快手直播开通需要什么权限?在快手上分享糊口的悲欢离合已成了很多人的习气,良多四五六线的用户,他们乃至把快手当作伴侣圈来用。可见,怎样在快手直播游戏教学视频,快手的覆盖率和渗入率都很高,愈

    2022年12月31 287
  • 头条号怎么发视频

    最近无意发现一个第三方软件,非常的方便,那就是融媒宝,融媒宝的优势在于不仅可以实现员工管理,还可以是支持图文视频一键发送,媒体号管理,还可以随时查看所有帐号的数据,对账号数据进行统计。拍自媒体一般怎么

    2023年01月19 224
  • 怎样合并视频

    怎么把多个视频合并成一个?我们在网上浏览各种视频的时候,应该经常会看到那种一日生活vlog吧,这种的一般都是在不同的时间拍摄多段视频然后后期合并而成的,那么怎么合并多个视频呢?下面我来教大家视频合并的

    2022年12月27 203
  • 为什么蛙趣视频打不开

    在区块链行业,火中取栗的故事总是层出不穷。我心向明月,奈何明月照沟渠。这句话大概可以形容中秋佳节时候,火牛视频的火钻持有者们的心情了。面对接踵而至的质疑,火牛视频的官微火牛视频FB在今天以一篇《争议与

    2023年04月19 227
  • 有线电视多少钱一年,2023有线电视费一年多少钱

    今天微博有一个热搜词条是「在电视上无阻碍看剧要花1612元」,据商业数据派统计,2023有线电视费一年多少钱,如果想要畅通无阻在电视上观看所有节目,至少需要购买爱奇艺星钻VIP(428/年)、芒果TV

    2023年02月20 247
  • yy怎么直播游戏,yy怎么直播电脑游戏

    yy怎么直播电脑游戏,全球瞩目的2022世界杯已进入倒计时,为迎接这场世界性的足球狂欢,11月19日起,YY直播推出“Yi球成名”世界杯专题企划活动,推出包含《玩转世界杯》、《世界杯前线》、《歌舞燃爆

    2023年01月14 285
关注微信