web视频播放

2023-11-02

一、3大视频直播协议:

一、RTMP
全称 Real Time Messageing Protocol,实时消息传送协议;
出身:由Adobe公司基于 Flash Player 播放器对应的音视频flv封装格式提出的一种传输协议;
优点:
1、延迟很低,一般在1~3s;
2、长时间连续播放稳定;
3、一般的视频会议、互动式直播够用;
缺点:
1、基于应用层TCP长连接协议数据传输,非公共端口,可能会被防火墙拦截;
2、它是Adobe私有协议,很多设备无法播放,特别是在IOS移动端,需要使用三方解码器;
3、高并发下不稳定。
扩展:
1、RTMP是主协议,除此之外,包括 RTMPT / RTMPS / RTMPE / RTMFP 等变种;
2、其中 RTMFP 是基于UDP传输的一种协议;常用于 P2P 通信;
应用:流媒体直播(Live)、点播(VOD);更多用于推流(主播方);

*推流:内容生产者;将现场的视频信号传到网络的过程,对网络环境要求比较高,如果不稳定,就会出现直播卡顿等现象,观看体验就会差;
*拉流:内容消费者;从服务器上拉取已经有直播的数据,解析、转码,最终在终端呈现;

P2P

1、全称 peer to peer,点对点或端对端的通信技术;
2、解决的问题:不同内网环境中的设备通过各自内网IP直接进行通信;
3、基础条件:中间服务器是具有公网ip地址;NAT网络地址交换协议(Network Address Translation):内网穿透、打洞、探针、中间件等;
4、前端应用:WebRTC(Web Real-Time Communications)实时通信技术:建立浏览器之间点对点的链接,实现音视频流或其他数据的传输;在线聊5天室、屏幕共享、文件共享、大文件点对点传输、实时游戏、直播、基于p2p的web搜索;
5、中间服务:1、peerjs自带的中转服务;2、peerjs-server自己搭建;3、后端搭建中转

HLS

1、全称:HTTP Live Streaming;
2、出身:Apple公司基于HTTP的流媒体实时传输协议;
3、原理:将整个流媒体数据,切割为连续的时长较短的 ts 文件(小分片,几秒的视频),并通过 M3U8 索引文件按顺序访问 ts 文件;
4、优点:
1、基于HTTP,允许穿透任何允许HTTP数据的防火墙或代理服务器。
2、很容易使用内容分发网络来传输媒体流,提速。
5、缺点:延时高 10s+;
6、应用:点播、直播领域;
*区分点播、直播的重要标志:m3u8索引文件有无#EXT-X-ENDLIST;

HTTP-FLV

全称:HTTP FLASH VIDEO
优点:
1、基于HTTP,允许穿透任何允许HTTP数据的防火墙或代理服务器。
2、可以使用HTTPS做加密通道。
3、很好的移动端支持。
4、延时低 2s。
在这里插入图片描述

二、前端常用视频库

1、VideoJS(推荐)

官网:https://docs.videojs.com/
优点:开源免费;大而全;纯CSS+JS打造,扩展性高;兼容所有浏览器;
缺点:文档纯英文,不支持RTSP流(常用视频监控)播放,依赖flash。
注意:
1、rtmp:type设置为:rtmp/flv。
2、hls:type设置为:application/x-mpegURL。

2、CKPlayer(不推荐)

官网:https://www.ckplayer.com/
优点:功能较为齐全;独立配置文件;独立素材、皮肤支持;
缺点:不适合小屏播放,样式易错乱;UI风格不太友好;后期增加独立功能,比较困难;占用项目主包;
使用:
1、需放在public 或 assets文件中,index.html 作为静态文件引入它;
2、本地、沙盒环境UI不一致;
3、【截图按钮】在全屏下,会消失,因为它只相对父级定位;
4、视屏的功能控件,dom结构动态输出,没有class值,无法进行ui覆盖;
5、音量控件,不支持垂直展示;

3、西瓜播放器

官网:https://v2.h5player.bytedance.com/
字节跳动结合自己的业务,造的轮子;【视频截屏】有坑,没敢踩。

4、DPlayer

官网:https://dplayer.js.org/zh/
优点:
1、API简洁;
2、UI风格比较符合现代审美,按钮控件结构清晰;可通过class覆盖样式;
3、集成弹幕;
4、支持主流视频,需要结合其他组件库:hls.js、flv.js等;
5、github持续维护;Issue有解决常见问题的方案;
截图功能:
1、自带的截图配置,无法设置图片的名称;默认Dplayer.png;
2、接管截图数据,交由开发者操作:https://github.com/DIYgod/DPlayer/issues/1006
右键菜单:
1、阻止:https://github.com/DIYgod/DPlayer/issues/544
禁止m3u8和ts文件持续请求:
1、虽然播放器被销毁,但是HLS服务还在持续执行:https://github.com/DIYgod/DPlayer/issues/628
2、HLS.js配置:https://github.com/video-dev/hls.js/blob/master/docs/API.md#hlsstartlevel
vue二次封装:
https://console.cloud.baidu-int.com/devops/icode/repos/baidu/adu/v2xapp-key-vehicle-front/blob/develop:src/components/videoPlayer/dPlayer.vue

"dplayer": "^1.26.0",
"hls.js": "^1.0.5",
 
import DPlayer from '@/components/videoPlayer/dPlayer';
 
<DPlayer
    class="video-area"
    :ref=""
    :key=""
    :className=""
    :videoUrl=""
></DPlayer>

三、canvas画布污染

含义:由于在 位图中的像素可能来自多种来源,包括从 其他主机检索的图像或视频,因此不可避免的会出现安全问题。参考:https://developer.mozilla.org/zh-CN/docs/Web/HTML/CORS_enabled_image
场景:h5画分享海报、前端裁剪图片、合成图片、前端视频截图、html2Canvas插件使用等。
结果:浏览器将阻止从canvas中读取数据,如toDataURL()、toBlob()、getImageData() 方法都不可用。

在这里插入图片描述
解决方法

let video = document.querySelector('#dplayer video');
video.setAttribute('crossOrigin', 'anonymous'); // 重点,前提:服务端的视频支持跨域
 
const canvas = document.createElement('canvas');
canvas.width = this.player.video.videoWidth;
canvas.height = this.player.video.videoHeight;
canvas.getContext('2d').drawImage(this.player.video, 0, 0, canvas.width, canvas.height);
const data = canvas.toDataURL('image/jpg');

可能的解决方法:利用image标签跨域的能力

// 西瓜视频、网上大多资料的解决方案
let img = new Image();
img.setAttribute('crossorigin', 'anonymous') // 给图片设置允许跨域
image.src = canvas.toDataURL('image/png').replace("image/png", "image/octet-stream");
img.onload = function () {
    // do Something
}
img.error = function () {}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

web视频播放 的相关文章

  • 【连续和自适应资源需求估计】通过不断应用在线优化、选择和估计,SARDE能够有效地适应在线跟踪,并使用得到的集成技术减少模型误差(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据 文章
  • 5个步骤,教你瞬间明白线程和线程安全

    记得今年3月份刚来杭州面试的时候 有一家公司的技术总监问了我这样一个问题 你来说说有哪些线程安全的类 我心里一想 这我早都背好了 稀里哗啦说了一大堆 他又接着问 那你再来说说什么是线程安全 然后我就GG了 说真的 我们整天说线程安全 但是对
  • 38条Web测试经验分享

    1 页面链接检查 每一个链接是否都有对应的页面 并且页面之间切换正确 可以使用一些工具 如LinkBotPro File AIDCS HTML Link Validater Xenu等工具 LinkBotPro不支持中文 中文字符显示为乱码
  • 每天10个前端小知识 <Day 7>

    前端面试基础知识题 1 什么是尾调用优化和尾递归 尾调用的概念非常简单 一句话就能说清楚 就是指某个函数的最后一步是调用另一个函数 function f x return g x 上面代码中 函数f的最后一步是调用函数g 这就叫尾调用 尾调
  • 每天10个前端小知识 <Day 8>

    1 Javascript中如何实现函数缓存 函数缓存有哪些应用场景 函数缓存 就是将函数运算过的结果进行缓存 本质上就是用空间 缓存存储 换时间 计算过程 常用于缓存数据计算结果和缓存对象 缓存只是一个临时的数据存储 它保存数据 以便将来对
  • Android SDK开发艺术探索(五)安全与校验

    一 前言 本篇是Android SDK开发艺术探索系列的第五篇文章 介绍了一些SDK开发中安全方面的知识 包括资源完整性 存储安全 权限校验 传输安全 代码混淆等知识 通过基础的安全配置为SDK保驾护航 探索SDK开发在安全方面的最佳实践
  • socket网络编程几大模型?看看CHAT是如何回复的?

    CHAT回复 网络编程中常见的有以下几种模型 1 阻塞I O模型 Blocking I O 传统的同步I O模型 一次只处理一个请求 2 非阻塞I O模型 Non blocking I O 应用程序轮询调用socket相关函数检查请求 不需
  • 基于java的饮食分享平台系统设计与实现

    基于java的饮食分享平台系统设计与实现 I 引言 A 研究背景和动机 近年来 随着人们生活水平的提高和健康意识的增强 饮食健康已经成为越来越多人的关注焦点 因此 一个方便快捷的饮食分享平台就显得尤为重要 基于Java的饮食分享平台系统设计
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 低代码-详情页组件设计

    效果图 详情页数据结构定义 layout 按钮数据 buttonLayout headButton 页头按钮 footButton 页脚按钮 详情页表单配置 config 配置组件列表 detailLayout 默认行为 进表单初始化 只展
  • 30天精通Nodejs--第十九天:express-文件上传下载

    目录 前言 环境准备与依赖安装 文件上传功能实现 引入并配置express fileupload中间件 注意事项 文件下载功能实现 结语 前言 文件的上传和下载是许多应用程序必备的功能 Node js的Express框架同样可以通过集
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 【无标题】

    大家都知道该赛项的规程和样题向来都是模棱两可 从来不说具体的内容 导致选手在备赛时没有头绪 不知道该怎么训练 到了赛时发现题目和备赛的时候完全不一样 那么本文将以往年信息安全管理与评估赛项经验来解读今年2023年国赛的规程 帮助选手们指明方
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573
  • 每日变更的最佳实践

    在优维公司内部 我们采用发布单的方式进行每天的应用变更管理 这里给各位介绍优维的最佳实践 变更是需要多角色合作的 而且他是整体研发流程的一部分 在优维内部 我们坚持每日变更 打通开发环节到最终发布上线的全过程 在保证质量的前提下 尽可能提升
  • 获取年与年之间的所有年份

    function getYearsBetween startYear endYear var years 存放结果的数组 for var year startYear year lt endYear year years push year
  • 如何在 Python 脚本中使用 Google OAuth2

    在使用 Python 脚本将视频上传到 YouTube 频道时 若希望将视频上传到第二个频道 需要解决 OAuth2 授权的问题 解决方案 创建新的 Google Cloud 项目 from google oauth2 import ser
  • 【前端】canvas图片加文字

    注释标记了操作步骤 import React Component createRef from react class CertifyImgRender extends Component bgRef createRef

随机推荐

  • Android资源文件在配置文件中的使用与java代码对资源文件的操作

    一 学习目标 资源文件很多 本节内容只讲下面四种资源文件 1 字符串资源文件 目录 文件名 文件内容 使用 2 尺寸资源文件 目录 文件名 文件内容 使用 3 颜色资源文件 目录 文件名 文件内容 使用 4 图片资源文件 目录 文件名 使用
  • 面试题:两个按递增顺序排列的整数数组 nums1 和 nums2合并到nums1中,并递增排序,只允许开辟常量空间!!

    给你两个按递增顺序排列的整数数组 nums1 和 nums2 另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目 请你合并 nums2 到 nums1 中 使合并后的数组同样按 递增顺序 排列 只允许开辟常量空间
  • 目录树的遍历及遍历文件的处理

    在将windows上的jsp网页移植到linux环境中时 发现一个个的转换编码及修改默认编码类型太慢 写此脚本进行尝试文件遍历 bin bash SPATH root cheng DIR WebRoot DPATH web find DIR
  • Kubernetes(K8S)简介

    目录 一 使用容器原因 二 容器与虚拟机区别 虚拟机 Docker 三 使用K8s原因 四 常用概念 Master Node Pod 为什么提出Pod的概念 Labels Namespace Replication Controller R
  • sudo: /etc/sudoers is mode 0777, should be 0440终极解决之道

    不得不说 有时候手贱的把 etc sudoers文件权限改了 是一件很蛋疼的事 因为此时你会发现无论做什么都会弹出一条讨厌的提示 说没有权限执行等等 网上有介绍登入root用户 或者去grub的recovery mode选项去选择root模
  • Java(关系操作符+流程控制语句)

    学习模式 看一遍视频 手抄一遍 再看一遍视频 在线题库 学习方法 把握主线 不偏离主线 熟悉 掌握常规写法 java day3 第一板块 关系操作符 表达式与操作符 1 关系操作符 6个 2 算数操作符 3 逻辑操作福 4 赋值操作符 4
  • vue create -p dcloudio/uni-preset-vue my-project创建文件报错443

    因为使用vue3 vite uniapp vant4报错 uniapp暂不支持vant4 所以所用vue2 uniapp vant2 下载uni preset vue master 放到E Auniapp uni preset vue ma
  • Android APK 由于签名异常无法安装-- INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 解决

    前景 在安装第三方APK中会遇到部分已有签名的APK的情况 会有如下的报错信息 adb failed to install W demo apk Failure INSTALL FAILED SHARED USER INCOMPATIBLE
  • 关于 Faster RCNN正负样本选取的问题

    faster rcnn的解读这两篇文章写的很好 很清楚 面试时被问了这个问题 专门记录下来 一文读懂Faster RCNN 从编程实现角度学习Faster R CNN 附极简实现 回顾fast rcnn样本选取问题 在faster rcnn
  • AI与伦理道德

    首先 让我们初步了解什么是AI 人工智能 Artificial Intelligence 英文缩写为AI 它是研究 开发用于模拟 延伸和扩展人的智能的理论 方法 技术及应用系统的一门新的技术科学 人工智能是计算机科学的一个分支 它企图了解智
  • 浅析Oracle等待事件

    oracle 等待事件 一 简述 Oracle等待事件是在Oracle 7 0 12中引入的 当时等待事件大致有100多个 在Oracle 8 0中Oracle等待事件数目增加到150多个 在Oracle 8i中有大约220个等待事件 而在
  • 解决pyodbc.Error: (‘HY000‘, ‘[HY000] [Microsoft][ODBC Microsoft Access Driver]常见错误 无法打开注册表项“Temporary

    经过尝试 问题主要是数据库读写权限的问题 假如需要读写的数据库存放在系统C盘 就会因为权限的问题 pyodbc Error HY000 HY000 Microsoft ODBC Microsoft Access Driver 常见错误 无法
  • Node.js 开发常用到的库和插件工具,同事看到后也悄悄收藏了……

    Node js是一个功能强大 并且非常流行的 JavaScript 运行时环境 使开发人员能够高效率的构建高性能应用程序 下面介绍了8个常见的应用程序开发中用到的库和函数 可以用于缓存数据 操作日期 处理图像 发送电子邮件 发出 HTTP
  • MLCC电容为什么会啸叫?怎么让它闭嘴!

    原文来自公众号 工程师看海 公众号回复获取资料 电源 随着笔记本电脑 手机等设备的普及 由电容器振动所产生的 啸叫 问题越来越多的受到人们的关注 如何优化各电源架构的电容啸叫 让电容闭嘴 是一个有趣的问题 MLCC电容器发生啸叫主要是由陶瓷
  • 【AI绘画】我以Midjourney为主学习AI绘画效果咋样?

    上一篇博客链接 ChatGPT ChatGPT掀起AIGC与AI浪潮 山楂山楂丸的博客 CSDN博客 这周 我加入了新星计划 涉及的领域是我感兴趣以及对未来规划有帮助的 AI绘画 文章目录 前言 一 AI绘画是什么 二 AI绘画进阶 三 我
  • 误差和误差限

    误差和误差限 在数值计算中使用的数通常有两种类型 一种是能够准确反映客观事物数量关系的精确数 如班级有30人 有 1 2 frac 1 2 21 为男生 另一种是近似反映客观事物数量关系的近似数 如书重0 15kg 如果改变观测方法 提高测
  • Python串口通信模块PySerial使用教程(CH340 USB TTL转接芯片)

    CONTENTS 1 CH340 USB TTL介绍 2 PySerial教程 1 CH340 USB TTL介绍 TTL 一般是从单片机或者芯片中发出的电平 高电平为 5V 51单片机 或者 3 3V STM32 USB 转 TTL 模块
  • BP批量导入程序

    REPORT zfic cust batch upload 数据定义 TABLES sscrfields CONSTANTS cn flag TYPE char1 VALUE X DATA smp dyntxt TYPE smp dyntx
  • yolov3训练自己的数据集(MMDetection)

    用FasterRcnn训练了自己标注的数据集Voc格式 现在想用yolo来训练一下 修改了yolo文件内容 打算直接用yolo训练voc格式的数据 出现了一点问题 因为比较着急 就没有再详细研究 MMDetection中大多训练模型为coc
  • web视频播放

    一 3大视频直播协议 一 RTMP 全称 Real Time Messageing Protocol 实时消息传送协议 出身 由Adobe公司基于 Flash Player 播放器对应的音视频flv封装格式提出的一种传输协议 优点 1 延迟