当前位置: 首页 > news >正文

【前端】jsmpeg 介绍及使用

文章目录

    • 一、简介
    • 二、使用方法
      • 1、HTML 元素方式
      • 2、JSMpeg.Player() 构造函数
        • 2.1 构建
        • 2.2 属性
        • 2.3 方法
    • 三、为 JSMpeg 编码视频/音频

一、简介

JSMpeg 是一个用 JavaScript 编写的视频播放器。它由 MPEG-TS 解复用器、MPEG1 视频和 MP2 音频解码器、WebGL 和 Canvas2D 渲染器以及 WebAudio 声音输出组成。JSMpeg 可以通过 Ajax 加载静态视频,并允许通过 WebSockets 进行低延迟流(~50 毫秒)

获取 JSMpeg 的主要方式是从其官方 GitHub 仓库获取:
https://github.com/phoboslab/jsmpeg

二、使用方法

JSMpeg 提供了两种基本的播放器创建方式。

1、HTML 元素方式

<div class="jsmpeg" data-url="ws://your-websocket-server:port"></div>

2、JSMpeg.Player() 构造函数

2.1 构建
var player = new JSMpeg.Player(url [, options]);

参数说明:

  • url: url 参数接受 MPEG .ts 文件或 WebSocket 服务器 (ws://…) 的 URL
  • options:
属性说明默认值
canvas用于视频渲染的 HTML Canvas 元素。如果未提供,渲染器将创建自己的 Canvas 元素-
loop是否循环播放视频(仅限静态文件)true
autoplay是否立即开始播放(仅限静态文件)false
audio是否解码音频true
video是否解码视频true
poster视频播放前显示的海报图像的 URL-
pauseWhenHidden当标签页处于非活动状态时是否暂停播放。注意浏览器通常会在非活动标签页中限制 JS 执行true
disableGl是否禁用 WebGL 并始终使用 Canvas2D 渲染器false
disableWebAssembly是否禁用 WebAssembly 并始终使用 JavaScript 解码器false
preserveDrawingBufferWebGL 上下文是否创建时带有 preserveDrawingBuffer - 对于通过 canvas.toDataURL() 进行"截图"是必需的false
progressive是否分块加载数据(仅限静态文件)。启用后,可以在整个源完全加载之前开始播放true
throttled使用渐进式加载时,是否推迟加载当前播放不需要的数据块true
chunkSize使用渐进式加载时,每次加载的数据块大小(字节)1048576 (1MB)
decodeFirstFrame是否解码并显示视频的第一帧。可用于设置 Canvas 大小并将该帧用作"海报"图像。在使用自动播放或流媒体源时无效true
maxAudioLag流媒体播放时,音频队列的最大长度(秒)-
videoBufferSize流媒体播放时,视频解码缓冲区的大小(字节)524288 (512KB)
audioBufferSize流媒体播放时,音频解码缓冲区的大小(字节)131072 (128KB)
onVideoDecode(decoder, time)每个视频帧解码和渲染后调用的回调函数-
onAudioDecode(decoder, time)每个音频帧解码后调用的回调函数-
onPlay(player)播放开始时调用的回调函数-
onPause(player)播放暂停时调用的回调函数(例如调用 .pause() 或源已结束)-
onEnded(player)播放到达源结束时调用的回调函数(仅在 loop 为 false 时调用)-
onStalled(player)当没有足够数据进行播放时调用的回调函数-
onSourceEstablished(source)源首次接收到数据时调用的回调函数-
onSourceCompleted(source)源接收到所有数据时调用的回调函数-

使用示例:

<canvas width="640" height="480"></canvas>
<script>var canvas = document.querySelector('canvas');var url = 'ws://localhost:8550';var player = new JSMpeg.Player(url, {canvas: canvas,audio: false});
</script>
2.2 属性
方法/属性说明
.volume获取或设置音频音量(0-1)
.currentTime获取或设置当前播放位置(秒)
.paused只读属性,表示播放是否处于暂停状态
2.3 方法
方法/属性说明
.play()开始播放
.pause()暂停播放
.stop()停止播放并跳转到开头
.nextFrame()前进一帧视频(不解码音频)。成功返回 true,数据不足时返回 false
.destroy()停止播放,断开数据源连接并清理 WebGL 和 WebAudio 状态。调用后播放器将不可用。如果播放器创建了 canvas 元素,则会从文档中移除

三、为 JSMpeg 编码视频/音频

JSMpeg 仅支持使用 MPEG1 视频编解码器和 MP2 音频编解码器播放 MPEG-TS 容器。视频解码器无法正确处理 B 帧(尽管现代编码器似乎默认使用这些帧),并且视频的宽度必须是 2 的倍数。

您可以使用 ffmpeg 对合适的视频进行编码,如下所示:

ffmpeg -i in.mp4 -f mpegts -codec:v mpeg1video -codec:a mp2 -b 0 out.ts
http://www.dtcms.com/a/354134.html

相关文章:

  • Libvio 访问异常排查指南:从现象到根源的深度剖析
  • 专项智能练习(关系数据库)
  • 风锐统计——让数据像风一样自由!(九)——回归分析
  • FreeRTOS内部机制理解(任务调度机制)(三)
  • opencv学习笔记
  • 基于 Docker Compose 的若依多服务一键部署java项目实践
  • 【深度学习-Day 44】GRU详解:LSTM的优雅继任者?门控循环单元原理与PyTorch实战
  • sparksql的transform如何使用
  • 8.27 网格memo
  • HTTP 头
  • Go 1.25新特性之容器感知功能详解
  • 【C++语法篇】:函数
  • 超越ChatBI!深度解析衡石HENGSHI SENSE 6.0如何实现全流程AI赋能
  • 第二阶段WinFrom-7:文件操作补充,泛型复习,协变和逆变
  • Python LangChain RAG从入门到项目实战09.:LangChain 中的 Retriever(检索器)
  • buuctf——web刷题第5页
  • Vue2 基础用法
  • CVPR深度学习研究指南:特征提取模块仍是论文创新难点
  • 吴恩达机器学习作业二:线性可分逻辑回归
  • CMake构建学习笔记21-通用的CMake构建脚本
  • Liunx内核驱动
  • Java中StringBuilder原理以及使用
  • D4145低功耗GFCI接地故障控制芯片介绍
  • 题目—移除元素
  • 作业帮,途虎养车,得物,途游游戏,三七互娱,汤臣倍健,游卡,快手26届秋招内推
  • JUC多线程个人笔记
  • 【DC工具GUI入门】
  • APP测试全流程以及测试点
  • 【开题答辩全过程】以 基于SpringBoot的流浪动物领养系统的设计与实现 为例,包含答辩的问题和答案
  • 从Java到Go:初遇Go语言的震撼体验