基于Web Assembly的H265播放器实现

项目概述

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

播放器显示效果如下:

功能简介

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

数据处理流程如下:

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

  • 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播放器界面,包括数据加载、控制器、播放流程与画面同步渲染等

原文地址:https://www.cnblogs.com/goldvideo/p/12264706.html

时间: 2024-10-08 07:01:58

基于Web Assembly的H265播放器实现的相关文章

基于canvas和Web Audio的音频播放器

wavesurfer.js是一款基于HTML5 canvas和Web Audio的音频播放器插件.通过wavesurfer.js你可以使用它来制作各种HTML5音频播放器,它可以在各种支持 Web Audio 的浏览器中工作.包括 Firefox, Chrome, Safari, Mobile Safari 和 Opera浏览器. 在线演示:http://www.htmleaf.com/Demo/201503151525.html 下载地址:http://www.htmleaf.com/html

最简单的基于FFMPEG+SDL的音频播放器:拆分-解码器和播放器

本文补充记录<最简单的基于FFMPEG+SDL的音频播放器>中的两个例子:FFmpeg音频解码器和SDL音频采样数据播放器.这两个部分是从音频播放器中拆分出来的两个例子.FFmpeg音频解码器实现了视频数据到PCM采样数据的解码,而SDL音频采样数据播放器实现了PCM数据到音频设备的播放.简而言之,原先的FFmpeg+SDL音频播放器实现了: 音频数据->PCM->音频设备 FFmpeg音频解码器实现了: 音频数据->PCM SDL音频采样数据播放器实现了: PCM->

基于jQuery仿QQ音乐播放器网页版代码

基于jQuery仿QQ音乐播放器网页版代码是一款黑色样式风格的网页QQ音乐播放器样式代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="m_player" id="divplayer" role="application" onselectstart="return false" style="left: 0px;"> <div class=&

基于MFC的Media Player播放器的制作(3---功能实现)

|   版权声明:本文为博主原创文章,未经博主允许不得转载. 下面我们试试一下,按下退出Button退出播放器的功能: 首先,我们双击退出Button按钮,就会弹出下图的框: 上面的弄好之后我们就实现退出函数的功能: 这个代码写好之后,我们可以运行一下,在单击退出按钮,可以发现,按下之后我 们的播放器自动退出 下面我们在实现打开文件的功能,这个功能比较复杂,第一步我们首先双击打开文件按钮,在CPandaPlayerDlg.cpp中创建函 数OnOpenfile():创建过程同上. 可以看到函数:

演示基于SDL2.0+FFmpeg的播放器

SDL是一个跨平台的渲染组件,目前已经推出到2.0.3版本,支持Win/Linux/OSX/Android.网上很多介绍大多是基于SDL1.2版本的,与2.0版本有一定的差别,本文演示如何用SDL2.0版本播放视频(仅视频). SDL下载网站:http://libsdl.org 参考网址:http://blog.csdn.net/dawdo222/article/details/8692834 上代码: // 演示如何用SDL2进行播放 //可参考http://blog.csdn.net/daw

最简单的基于FFMPEG+SDL的音频播放器 ver2 (采用SDL2.0)

简介 之前做过一个简单的音频播放器:<最简单的基于FFMPEG+SDL的音频播放器>,采用的是SDL1.2.前两天刚把原先做的<最简单的基于FFMPEG+SDL的视频播放器>更新采用了SDL2.0,于是顺手也把音频播放器更新成为SDL2.0. SourceForge项目主页:https://sourceforge.net/projects/simplestffmpegaudioplayer/ 完整工程下载地址:http://download.csdn.net/detail/leix

基于MFC的Media Player播放器的制作介绍

|   版权声明:本文为博主原创文章,未经博主允许不得转载. 因为这次多媒体课程设计做一个基于MFC的播放器,因为本人实力太菜,需要播放音乐或视频文件时候,自己写不出解码 函数,所以准备使用第三方多媒体库或是第三方控件辅助播放,找来找去还是觉得用Windows Media Player控件来编写比较 方便,因此这次播放器的制作主要是根据Media Player控件来实现,因为在微软平台已经封装好了一系列的解码方法(如声音解 码和视频解码)和一些常用的操作方法(如声音音量的增加,快进等等),因此使

一个使用 Web Components 的音乐播放器: MelodyPlayer

先上效果预览: Web Components 首先,什么是 Web Components ? MDN 给出的定义是: Web Components 是一套不同的技术,允许您创建可重用的定制元素(它们的功能封装在您的代码之外)并且在您的web应用中使用它们. ... ... 实现web component的基本方法通常如下所示: 使用 ECMAScript 2015 类语法创建一个类,来指定web组件的功能(参阅类获取更多信息). 使用 CustomElementRegistry.define()

[VCB-Studio 科普教程 2.5] 基于 PotPlayer 和 madVR 的播放器教程(已更新 XySubFilter)

Potplayer 是高清影视常用的播放器,界面简洁,功能齐全,比 MPC-HC 和 MPC-BE 更人性化:但其默认方案十分糟糕,预设过多错误,无法正确播放 10-bit 视频,一直饱受诟病.VCB-Stuido 以往发布的数篇高清教程大多偏重于 madVR,在 PotPlayer 的设置方面有些错漏.为了广大观众能正确.便捷地用 PotPlayer 享受高清影视,我们为大家带来一篇基于 PotPlayer 的高清影视全套 64-bit 工具链完整配置图文详解教程. 本教程花大力气调整 Pot