视频格式、协议及其 JavaScript 本地解析

理论知识:

视频格式

视频格式封装格式编码格式组成。

  1. 封装格式(如 .mp4、.mkv、.webm):决定文件结构
  2. 编码格式:决定视频压缩方式。例如:H.264:广泛兼容的压缩方式;VP9:更适合 Web 视频;H.265:适合高清和4K视频,具有更高的压缩效率。

此外,分辨率、帧率、码率等参数决定视频的清晰度、流畅度和质量。

常见的视频格式:

  • MP4 (MPEG-4 Part 14):最常用的视频格式之一,支持 H.264 编码,广泛应用于网络视频。
  • WebM开放格式,支持 VP8/VP9 编码,适用于 Web 平台
  • OGG开源的媒体容器格式,支持 Theora 视频编码
  • AVI:较老的视频格式,不常用但仍然存在。
  • FLV:曾广泛用于 Flash 播放器,现在使用较少。
  • MKV 支持多种编解码器,适合高灵活性要求的场景

视频传输协议:

  • HTTP :最基本的传输协议,适用于静态视频文件的传输。
  • HTTPS:安全版本的 HTTP,使用 SSL/TLS 加密。
  • HLS基于 HTTP 的流媒体协议,支持分段传输和多码率自适应,适合点播(VOD)
  • DASHISO 标准流媒体协议,支持分段传输和多码率自适应,兼容性更广
  • RTMP 实时流媒体协议,延迟低,适用于直播
  • RTSP用于控制多媒体流,常与 RTP 协议结合
  • WebRTC用于实时通信(如视频会议)或互动直播,低延迟

 JavaScript 本地解析:

在前端,可以利用浏览器 API 和第三方库解析、播放各种视频格式和协议

使用 HTML5 <video> 标签

HTML5 提供了 <video> 标签,可以直接嵌入视频格式(MP4、WebM、Ogg)并进行播放HLS 和 DASH 流。

<video id="videoPlayer" controls><source src="video.mp4" type="video/mp4"><source src="video.webm" type="video/webm">
</video>

支持 HLS 和 DASH 的库:

HLS.js

用于浏览器中解析和播放 HLS 流媒体的 JavaScript 库,兼容性好。

<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<video id="videoPlayer" controls></video>
<script>if (Hls.isSupported()) {const video = document.getElementById('videoPlayer');const hls = new Hls();hls.loadSource('https://example.com/video/stream.m3u8');hls.attachMedia(video);hls.on(Hls.Events.MANIFEST_PARSED, () => {video.play();});}
</script>

DASH.js

用于播放 DASH 流的 JavaScript 库,支持自适应流。

<script src="https://cdn.dashjs.org/latest/dash.all.min.js"></script>
<video id="videoPlayer" controls></video>
<script>const video = document.getElementById('videoPlayer');const url = 'https://example.com/video/stream.mpd';if (dashjs.MediaPlayer.isSupported()) {const player = dashjs.MediaPlayer().create();player.initialize(video, url, true);}
</script>

WebRTC 实时视频

WebRTC 提供了 getUserMediaRTCPeerConnection 等 API,用于实现实时音视频通信。常用于视频通话或低延迟直播场景。

// 获取本地摄像头视频流
navigator.mediaDevices.getUserMedia({ video: true, audio: true }).then((stream) => {const video = document.getElementById('localVideo');video.srcObject = stream;video.play();}).catch((error) => {console.error('Error accessing media devices.', error);});

 本地解析视频

可以使用 File API 和 Blob 对象读取和处理本地视频文件。

<input type="file" id="videoFileInput" accept="video/*">
<video id="videoPlayer" controls></video><script>
document.getElementById('videoFileInput').addEventListener('change', (event) => {const file = event.target.files[0];if (file) {const videoPlayer = document.getElementById('videoPlayer');const objectUrl = URL.createObjectURL(file);videoPlayer.src = objectUrl;}
});
</script>

拓展学习:

HTML5 Video API

HLS.js 文档

DASH.js 文档

WebRTC 官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/12296.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

caozha-ip(IP地址查询源码)

caozha-ip&#xff0c;是基于原生PHP写的一套完整的IP转地址模块源码&#xff0c;支持自动获取IP&#xff0c;也支持查询指定IP&#xff0c;同时支持输出json、jsonp、text、xml、js等多种IP和地址格式&#xff0c;还可以细分为国家、省、市、地区&#xff0c;方便在各种系统里…

【Android、IOS、Flutter、鸿蒙、ReactNative 】文本Text显示

XML布局 参考 android:text <TextViewandroid:id"id/textview"android:layout_width"wrap_content"android:layout_height"wrap_content"android:text"Android Java TextView"app:layout_constraintBottom_toBottomOf"paren…

FPGA学习笔记#7 Vitis HLS 数组优化和函数优化

本笔记使用的Vitis HLS版本为2022.2&#xff0c;在windows11下运行&#xff0c;仿真part为xcku15p_CIV-ffva1156-2LV-e&#xff0c;主要根据教程&#xff1a;跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 学习笔记&#xff1a;《FPGA学习笔记》索引 FPGA学习笔记#1 HLS简介及…

深入浅出JUC常用同步器

文章目录 1.JUC下同步器1.1 CountdownLatch 倒计数锁存器1.2 CyclicBarrier回环屏障1.3 Semephone 信号量 2.小结 1.JUC下同步器 日常开发会遇到主线程开启多个子线程去并行执行任务&#xff0c;并且主线程需要等待所有子线程执行完后在进行汇总的场景。 同步器出现之前&…

工位管理新策略:Spring Boot企业级应用

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

CAN总线物理层特性详细分析

目录 1. 简介 2. CAN总线拓扑图 3. CAN硬件电路 4. CAN电平标准 5. CAN收发器-TJA1050&#xff08;高速CAN&#xff09; 6. CAN物理层特性 1. 简介 CAN总线&#xff08;Controller Area Network Bus&#xff09;控制器局域网总线&#xff0c;是由BOSCH公司开发的一…

2024AAAI | DiffRAW: 利用扩散模型从手机RAW图生成单反相机质量的RGB图像

文章标题&#xff1a;《DiffRAW: Leveraging Diffusion Model to Generate DSLR-Comparable Perceptual Quality sRGB from Smartphone RAW Images》 原文链接&#xff1a;DiffRAW 本文是清华大学深圳研究院联合华为发表在AAAI-2024上的论文&#xff08;小声bb&#xff1a;华…

idea出现的问题

1.idea正常的运行,但是debug失败 原因&#xff1a;debug模式中使用的jdk和你在环境变量中配置的不是同一个jdk。或者说三处地方修改一致即可 1.File/Project Structure/Project Settings/Modules中的SDK 2.File/Project Structure/Platform Settings 中的SDKS 3.Run/Debug Conf…

uni-app之数据驱动的picker选择器( uni-data-picker)之可以选择到任意级别

背景说明 uni-app 官方的插件市场有数据驱动选择器&#xff0c;可以用作多级分类的场景。本人引入插件后&#xff0c;发现&#xff0c;在h5和微信小程序都只能选择到叶子级。而在给出的官方组件示例中确并非如此。 以选择年级&#xff0c;而不选择班级。然后&#xff0c;想试试…

vue3如何修改element ui input中type属性为textarea的高度

效果&#xff1a; 方法一&#xff1a;直接使用autosize <el-input:maxlength"500":autosize"{ minRows: 5, maxRows: 5 }"type"textarea"v-model"form.description"placeholder"请输入描述"></el-input> 方法二…

紫光展锐携手上赞随身Wi-Fi,让5G触手可及

近年来&#xff0c;随着各类移动应用层出不穷&#xff0c;人们对随时随地上网的需求日益增强&#xff0c;随身 Wi-Fi 设备以其便捷性、灵活性和相对较低的成本&#xff0c;成为用户满足办公、社交、娱乐等多元化需求的重要工具。5G技术的逐步普及为随身Wi-Fi市场注入了新的活力…

第四十三章 Vue之mapMutations简化mutations操作

目录 一、引言 二、完整代码 2.1. App.vue 2.2. main.js 2.3. Son1.vue 2.4. Son2.vue 2.5. index.js 一、引言 本章节我们通过掌握辅助函数mapMutations&#xff0c;来简化前面章节中调用mutations函数的繁琐方式。mapMutations 和 mapState很像&#xff0c;它是把位于…

C++编程语言:抽象机制:派生类(Bjarne Stroustrup)

第20章 派生类(Dirived Classes) 目录 20.1 引言 20.2 派生类 20.2.1 类成员函数 20.2.2 类构造函数和析构函数 20.3 派层次结构 20.3.1 类型域(Type Fields) 20.3.2 虚函数(Virtual Functions) 20.3.3 显式修饰(Explicit Qualification) 20.3.4 覆盖控制(O…

Qt--命令行终端程序开发

提示&#xff1a;本文为学习记录&#xff0c;若有错误&#xff0c;请联系作者&#xff0c;谦虚受教。 文章目录 前言一、头文件二、cpp文件三、使用流程如图所示 总结 前言 Constant dropping wears the stone. 一、头文件 #ifndef TERMINALWIDGET_H #define TERMINALWIDGET_…

一文了解珈和科技在农业遥感领域的服务内容和能力

2020年&#xff0c;农业农村部、中央网信办联合印发了《数字农业农村发展规划&#xff08;2019-2025年&#xff09;》&#xff0c;对数字农业农村建设作出了具体部署。其中&#xff0c;农业遥感作为推进数字农业农村的重要力量贯穿《规划》始终。 今年10月&#xff0c;农业农村…

D65【python 接口自动化学习】- python基础之数据库

day65 SQL-DQL-分组聚合 学习日期&#xff1a;20241111 学习目标&#xff1a;MySQL数据库-- 133 SQL-DQL-分组聚合 学习笔记&#xff1a; 分组聚合 总结 分组聚合的语法 分组聚合的注意事项 group by 中出现了哪个列&#xff0c;哪个列才能出现在select中的非聚合中

初学mongoDB

MongoDB 是一个开源的 NoSQL 数据库&#xff0c;由 C 语言编写。它与传统的关系型数据库不同&#xff0c;MongoDB 使用的是一种基于文档的存储模型&#xff0c;不需要定义固定的表结构&#xff0c;可以灵活地存储和管理大量的非结构化数据。下面是 MongoDB 的一些核心特性&…

DAY59||并查集理论基础 |寻找存在的路径

并查集理论基础 并查集主要有两个功能&#xff1a; 将两个元素添加到一个集合中。判断两个元素在不在同一个集合 代码模板 int n 1005; // n根据题目中节点数量而定&#xff0c;一般比节点数量大一点就好 vector<int> father vector<int> (n, 0); // C里的一…

基于Spring Boot的乡政府管理系统设计与实现,LW+源码+讲解

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装乡政府管理系统软件来发挥其高效地信息处理的作用&#xf…

【NLP】使用 PyTorch 从头构建自己的大型语言模型 (LLM)

读完这篇文章后&#xff0c;你会取得什么成就&#xff1f;你将能够自己构建和训练大型语言模型 (LLM)&#xff0c;同时与我一起编写代码。虽然我们正在构建一个将任何给定文本从英语翻译成马来语的 LLM&#xff0c;但你可以轻松地修改此 LLM 架构以用于其他语言翻译任务。 LLM…