
本教程旨在解决在J*aScript中尝试流式播放本地视频文件时常见的`DOMException: The element has no supported sources`错误。我们将详细讲解如何正确地创建并配置HTML `
在尝试通过J*aScript播放本地视频文件时,开发者有时会遇到一个常见的误区:试图通过将文件路径字符串直接传递给Blob构造函数来创建视频Blob,例如:
var file = new Blob(["./video.mp4"], {"type": "video/mp4"});
var value = URL.createObjectURL(file);
console.log(value); // 输出一个Blob URL,例如 blob:http://localhost:8080/some-uuid
video.src = value; // 尝试播放时报错这种做法会导致Uncaught (in promise) DOMException: The element has no supported sources.错误。其根本原因在于,new Blob(["./video.mp4"], ...)创建的Blob对象,其内容是字符串"./video.mp4"的二进制表示,而不是实际的video.mp4文件的二进制数据。因此,当浏览器尝试解析这个Blob URL作为视频源时,它发现Blob内部的数据并非有效的视频格式,从而抛出错误。
URL.createObjectURL()的正确用途是为已经存在于内存中的二进制数据(如File对象、Blob对象或MediaSource对象)创建一个临时的、可访问的URL。它不负责从文件系统加载文件内容。
对于一个可直接通过URL访问的本地视频文件(例如,与HTML文件在同一目录下的video.mp4),最直接且有效的方法是将其路径设置为
首先,我们需要在文档中创建一个
var videoElement = document.createElement("video");
// 可以设置一些视频属性,例如控制条、自动播放等
videoElement.controls = true; // 显示播放控制条
// videoElement.autoplay = true; // 自动播放
// videoElement.loop = true; // 循环播放为了指定视频文件的来源和类型,我们需要创建一个
var sourceElement = document.createElement("source");这是关键一步。将视频文件的相对或绝对路径赋给sourceElement的src属性,并指定正确的MIME类型(例如,对于MP4视频是video/mp4)。
sourceElement.setAttribute('src', 'video.mp4'); // 假设视频文件名为 video.mp4 且与HTML文件同级
sourceElement.setAttribute('type', 'video/mp4'); // 指定视频的MIME类型注意: 确保src属性指向的文件路径是正确的,并且视频文件的MIME类型与type属性的值匹配。不匹配的MIME类型也可能导致播放失败。
android rtsp流媒体播放介绍 中文WORD版
本文档主要讲述的是android rtsp流媒体播放介绍;实时流协议(RTSP)是应用级协议,控制实时数据的发送。RTSP提供了一个可扩展框架,使实时数据,如音频与视频,的受控、点播成为可能。数据源包括现场数据与存储在剪辑中数据。该协议目的在于控制多个数据发送连接,为选择发送通道,如UDP、组播UDP与TCP,提供途径,并为选择基于RTP上发送机制提供方法。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
1
查看详情
最后,将配置好的sourceElement添加到videoElement中,然后将videoElement添加到页面的某个位置(例如document.body)。
videoElement.appendChild(sourceElement); document.body.appendChild(videoElement); // 将视频添加到文档的<body>中
结合上述步骤,完整的J*aScript代码如下:
/**
* 动态创建并加载本地视频文件到HTML页面
* @param {string} videoPath 视频文件的路径 (例如: 'video.mp4' 或 '/assets/videos/my_video.mp4')
* @param {string} mimeType 视频文件的MIME类型 (例如: 'video/mp4', 'video/webm')
*/
function loadAndPlayLocalVideo(videoPath, mimeType) {
// 1. 创建 为了运行上述代码,您需要一个HTML文件,例如index.html,以及一个名为video.mp4的视频文件(或您指定的其他文件)。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>J*aScript 播放本地视频教程</title>
</head>
<body>
<h1>使用 J*aScript 动态播放本地视频</h1>
<div id="video-container">
<!-- 视频将在这里被JS代码添加 -->
</div>
<script src="your_script.js"></script> <!-- 假设上面的JS代码保存在 your_script.js -->
</body>
</html>虽然上述方法适用于直接通过路径访问的本地文件,但在某些情况下,URL.createObjectURL 仍然非常有用,例如:
用户上传的文件: 当用户通过选择文件时,您会获得一个File对象。File对象是Blob的子类型,可以直接用于URL.createObjectURL。
document.getElementById('fileInput').addEventListener('change', function(event) {
var file = event.target.files[0]; // 获取用户选择的第一个文件
if (file && file.type.startsWith('video/')) {
var videoURL
= URL.createObjectURL(file);
var videoElement = document.createElement("video");
videoElement.src = videoURL;
videoElement.controls = true;
document.body.appendChild(videoElement);
// 当不再需要Blob URL时,应释放它以避免内存泄漏
videoElement.onended = function() {
URL.revokeObjectURL(videoURL);
console.log("Blob URL 已释放");
};
} else {
alert('请选择一个视频文件。');
}
});通过Fetch API获取的二进制数据: 当您通过fetch请求获取到视频的二进制数据(例如response.blob())时,可以创建一个Blob URL来播放它。
fetch('path/to/remote/video.mp4')
.then(response => response.blob()) // 获取响应体作为Blob
.then(videoBlob => {
var videoURL = URL.createObjectURL(videoBlob);
var videoElement = document.createElement("video");
videoElement.src = videoURL;
videoElement.controls = true;
document.body.appendChild(videoElement);
// 同样,使用后释放URL
videoElement.onended = function() {
URL.revokeObjectURL(videoURL);
console.log("Blob URL 已释放");
};
})
.catch(error => console.error('获取视频失败:', error));重要提示: 使用URL.createObjectURL()创建的URL是临时的,并且只在当前文档的生命周期内有效。为了避免内存泄漏,当不再需要这些URL时,应该调用URL.revokeObjectURL()来释放它们。
在J*aScript中播放本地视频文件,关键在于正确地指定视频源。对于可以直接通过路径访问的文件,应直接将路径赋值给
以上就是如何在J*aScript中流式播放本地视频文件的详细内容,更多请关注其它相关文章!
# 创建一个
# seo编辑优化教程
# 饲料营销推广方案模板
# 泌阳网络营销与推广
# 相城区网站建设服务价格
# 线上微信小区营销推广方案
# 古交响应式网站建设
# 当富广州网站建设
# 泉州精准营销推广系统
# 美容美发市场营销推广
# 郴州网站建设总结报告
# 并将
# 适用于
# 子类
# 流式
# 二进制数
# javascript
# 文档
# 流媒体
# 加载
# 视频文件
# 视频播放
# 区别
# html文件
# ai
# app
# 浏览器
# html5
# 视频教程
# js
# html
# java
相关文章:
“音游” × “怪文书” 题材的节奏冒险游戏 《晕晕电波症候群》确定于2026年4月发售!
Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求
AO3官方在线访问地址 Archive of Our Own最新镜像合集
C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图
J*aScript中在Map循环中检测并处理空数组元素
Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】
PHP表单隐藏域数据传递:常见问题与最佳实践
Go语言中构建可靠数据存储的原子性与持久化策略
163邮箱官方主页登录 直达网易邮箱登录核心页面
Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】
一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】
如何让 composer 信任自签名的 HTTPS 证书源?
漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口
《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!
汽水音乐网页版使用入口_汽水音乐电脑版播放指南
LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比
Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题
解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException
小米14应用无法联网原因分析_小米14网络权限修复
不会效仿卡普空!《铁拳》制作人澄清:不采取赛事付费|直播|
Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧
MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复
必由学官方平台入口 必由学在线课堂登录地址
J*aScript数组对象转换:按指定键分组与值收集
聚水潭ERP登录页面入口 聚水潭ERP官网登录界面
TikTok评论显示延迟如何处理 TikTok评论刷新优化方法
在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析
2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC
Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持
如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案
漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道
CSS图片焦点样式实现教程:理解与应用tabindex属性
MAC怎么在地图App里使用“四处看看”_MAC体验部分城市的3D实景街景
css绝对定位元素脱离父容器怎么办_确保父元素position非static
Go语言中Map存储的结构体如何调用指针方法:深入解析与实践
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制
MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏
C++如何操作注册表_Windows平台下C++读写注册表的API函数详解
Python字典中优雅地迭代剩余元素的方法
Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性
Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换
MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具
百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案
QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用
vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法
手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议
*请认真填写需求信息,我们会在24小时内与您取得联系。