基于Web Assembly的H265播放器实现

留略
• 阅读 3824

项目概述

随着视频编码技术的发展,相比H.264,H.265具有同等画质体积一半、画质更清晰细腻、编码效率更高等诸多优势。 但因版权等因素主流浏览器还不支持H.265的解码,因此需要专门的插件实现解码。本项目基于Web Assembly(封装FFmpeg库)、JS解封装、Canvas投影以及AudioContext,是Web端的H265播放器的完整解决方案。

播放器显示效果如下:

基于Web Assembly的H265播放器实现

功能简介

播放器主要分为UI、Loader、数据处理、数据渲染四个部分和3个线程。一个是主线程,负责界面控制、下载控制、数据流控制、音视频控制等功能;另一个是数据加载线程,负责meta数据和视频分片数据的请求;还有一个是数据处理线程,即负责视频数据的解封装和视频解码。

数据处理流程如下:
基于Web Assembly的H265播放器实现

播放器的实现主要分为以下四个部分:

  • UI:播放器显示,包括screen和controlbar两部分,screen包括视频图像展示、弹窗、海报图等。controlbar包括进度条、播放按钮、音量控制等组件。
  • Loader:负责媒体数据的加载和解析,目前仅支持HLS协议。通过worker实现数据的请求,加载完成后,根据设置缓存大小,存储请求的ts数据,当达到缓存上限后停止加载。解码器从ts数据队列获取ts后,Hls Loader会把请求过的ts释放,继续加载下一个ts,达到最大缓存限制后停止加载
  • 数据处理:主要包括数据解封装和H265解码,解封装通过demuxe.js这个类库实现,H265解码通过ffmpeg打包生成的wasm软解来实现,cpu使用率较高。
  • 数据渲染:包括视屏渲染和音频渲染,视频渲染通过ImagePlayer把解码后的yuv数据直接渲染到canvas,音频通过AudioPlayer把AAC数据解码后进行音频播放,最后通过pts实现音视频的同步。同步策略是以音频为参考,判断当前视频pts与获取到的音频pts的差值来调整视频显示时间来达到音视频同步。

项目地址

本项目是一个公开的基础可用版本,并不含有具体的业务代码。业务可基于此项目进行具体业务实现。本项目代码:https://github.com/goldvideo

包含三个相关项目:

  • demuxer: JS解封装TS/MP4工具,负责TS码流的解封装与转封装
  • decoder_wasm: 基于开源ffmpeg的H.265解码器,结合WebAssembly技术,实现前端视频解码
  • h265player: H265播放器界面,包括数据加载、控制器、播放流程与画面同步渲染等
点赞
收藏
评论区
推荐文章
小尉迟 小尉迟
2年前
mkv格式怎么在mac电脑播放,mac上5款必备的视频播放器
不同于其他视频格式,MKV更类似于一种封装的格式,这就造成了在使用播放器进行播放时容易出现解码问题,这在Mac内置的操作系统QuickTime更为常见。因此人们会需要寻找可以替代的播放器来帮助我们在Mac上播放MKV文件。我们在本文中罗列出了Mac上面优质
linbojue linbojue
1年前
Vue3+Nuxt3打造SSR网站应用,0到1实现服务端渲染
Vue3Nuxt3打造SSR网站应用,0到1实现服务端渲染download》shanxueit.com/364/项目介绍项目名称:基于Vue3ViteTS的elementplus业务组件二次封装一、项目背景和目标随着前端技术的不断发展,Vue3、Vi
Stella981 Stella981
3年前
LiveVideoStack线上分享第三季(十四):FLV封装格式介绍及解析
随着流媒体的高速发展,FLV成为了最主流的视频流传输封装格式,但是作为占市场较大份额的Web端的实际应用中,各大浏览器却没有对FLV解码做完善的支持。8月17日20:00,LiveVideoStack线上分享第三季,第十四期,高顿网校平台开发部流媒体工程师戴兵将对比FLV实际文件带大家详细了解一下它的具体格式标准。!(h
Stella981 Stella981
3年前
Android MediaCodec 硬编码 H264 文件
!(https://oscimg.oschina.net/oscnet/b4f690dee1b9fb45600265b73d94ab93051.jpg)在Android4.1版本提供了MediaCodec接口来访问设备的编解码器,不同于FFmpeg的软件编解码,它采用的是硬件编解码能力,因此在速度上会比软解更具有优势,但是由于An
Stella981 Stella981
3年前
FFMEPG 平台移植,接口简化和外部模块接入 (四)ffmpeg android移植(ffmpeg 视频编码)
FFMPEG视频编码最常见的H264,H265需要X264,X265外部模块支持,可以从我们开源平台的FFMPEG编译项目里面获取代码和配置进行一键式编译:https://github.com/Careyeteam/CareyeFFMPEG(https://www.oschina.net/action/GoToLink?urlhttps%3A
Stella981 Stella981
3年前
LiveVideoStack线上分享第五季(十三):高性能视频硬件编码
面向4G/5G场景下视频业务的爆发以及用户对于更高画质的要求(直播、短视频、视频点播等业务),更高清的画质意味着需要更大的计算资源以及网络带宽资源,而海量用户侧的画质提升/宽带降低,会导致前端以及视频平台厂商带宽的线性增长,增加运营开销。基于高性能视频编解码技术的解决方案,可以实现高清画质更快的压缩速度、更少的带宽消耗,使得视频内容生产方及运营平台,在满足用
绣鸾 绣鸾
1年前
Media Encoder 2024 for mac媒体转码器
是一款媒体转码软件,它可以将视频从一种格式转码为另一种格式,支持H.265、HDR10等多种编码格式,同时优化了视频质量,提高了编码速度。此外,MediaEncoder2024还支持收录、创建代理和输出各种格式的视频,同时可以自动执行工作流程,如使用预设
绣鸾 绣鸾
1年前
Media Encoder 2024 for mac(媒体转码器) v24.0.3
是一款媒体转码软件,它可以将视频从一种格式转码为另一种格式,支持H.265、HDR10等多种编码格式,同时优化了视频质量,提高了编码速度。此外,MediaEncoder2024还支持收录、创建代理和输出各种格式的视频,同时可以自动执行工作流程,如使用预设
云服务器比传统服务器更安全的原因与实现机制
随着互联网的普及和云计算技术的发展,越来越多的企业和组织选择使用云服务器来提供和存储数据。与传统服务器相比,云服务器在安全性方面具有诸多优势。本文将围绕云服务器比传统服务器更安全的原因,探讨其实现机制。