浏览器支持H.265解码总结

浏览器支持H.265解码总结文章目录引言问题解决方案3.1方案1:开发自己的浏览器3.2方案2:前端JS解码+canvas显示3.3方案3:前端WebAssembly转码+video显示3.4方案4:前端W

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

文章目录

  1. 引言
  2. 问题
  3. 解决方案
    3.1 方案1:开发自己的浏览器
    3.2 方案2:前端JS解码+canvas显示
    3.3 方案3:前端WebAssembly转码+video显示
    3.4 方案4:前端WebAssembly解码+canvas显示
    3.5 总结
  4. 相关资料
  5. 参考资料
  6. 引言
    项目要求在浏览器上支持H265视频,但即使当前最新的Chrome 85.0.4183.121版本也还不支持H265的解码。

那么,在浏览器上能不能解决H265的解码及显示呢?答案是肯定的。

  1. 问题
    浏览器上支持H265,需要在浏览器上解决两个问题:

解码H265视频流
显示H265视频流
3. 解决方案
经过一番网络搜索和研究,大致有以下4种方案:

3.1 方案1:开发自己的浏览器
开发自己的浏览器

在底层实现支持H265解码
在 video 标签支持H265视频流的显示
目前公司已开发了自己的浏览器,基于Chrome 83进行开发,并增加了FFmpeg对HEVC的编解码,经测试能完美解决H265的编解码及显示。但由于存在版权风险,目前只能内部使用。

该方案可行,在测试机(i7-9700/32G)上播放16路的H265视频,整体比较流畅,但其它主流浏览器还是不支持H265,还需要研究不支持H265浏览器的解决方案。

3.2 方案2:前端JS解码+canvas显示
相关文档:Web端H.265播放器研发解密
https://blog.csdn.net/weixin_34379433/article/details/89535511

示例
https://sparkmorry.github.io/mse-learning/h265/
https://github.com/sparkmorry/mse-learning

该方案测试下来,JS解码相比较WebAssembly的解码方案,从性能来看会比较差,放弃。

3.3 方案3:前端WebAssembly转码+video显示
从ffmpegwasm上看到的一个转码示例,由于video标签不能播放H265的视频,所以先将H265视频转出H264,然后就可以通过video标签播放了

示例
https://github.com/ffmpegwasm/ffmpeg.wasm/blob/master/examples/browser/transcode.html

该方案测试下来,几秒的视频转码为H264需要近1分钟的时间,性能达不到要求,放弃。

3.4 方案4:前端WebAssembly解码+canvas显示
相关文档:Web端H.265播放器研发解密
https://blog.csdn.net/weixin_34379433/article/details/89535511

相关示例:H265播放器
(1)https://g.alicdn.com/videox/mp4-h265/1.0.2/index.html

(2)https://static-assets.cyt-rain.cn/h265/index.html

一个比较好的h265播放器
https://github.com/goldvideo/h265player

基于WASM的H265 Web播放器

文档 https://www.pianshen.com/article/3192218495/
源码 https://github.com/sonysuqin/WasmVideoPlayer
示例 https://roblin.cn/wasm/
该方案测试下来,该方案个人觉得是性能比较好的方案,在测试机(i7-9700/32G)上播放6路的H265视频,整体比较流畅。

3.5 总结
浏览器支持H265解码,初定方案:

支持H265的浏览器,如:科达浏览器,则直接使用浏览器自带的解码方案进行解码(硬解码或软解码),然后通过video标签显示出来;

不支持H265的浏览器,则采用WebAssembly技术,将FFmpeg编译为wasm,收到H265码流时,调用FFmpeg进行解码,然后通过canvas来显示视频画面;

  1. 相关资料
    janus-gateway 关于AV1和H265的协商
    https://github.com/meetecho/janus-gateway/pull/2120

How to enable HEVC/H265 and AV1 in #webrtc in your browser
https://webrtcbydralex.com/index.php/2020/04/28/how-to-enable-hevc-h265-and-av1-in-webrtc-in-your-browser/

  1. 参考资料
    Chromium媒体元素源码
    https://github.com/chromium/chromium/tree/master/media

WebAssembly
https://webassembly.org/

优秀的开源视音频处理框架FFmpeg
https://www.ffmpeg.org/
https://github.com/FFmpeg/FFmpeg
https://github.com/ffmpegwasm/ffmpeg.wasm

基于LLVM编译的WebAssembly打包工具集Emscripten
https://emscripten.org/index.html

基于WebAssembly的ogg播放器
https://github.com/brion/ogv.js

基于FFmpeg的简单播放器
https://github.com/leixiaohua1020/simplest_ffmpeg_player
from:https://blog.csdn.net/cgs1999/article/details/108847894

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167493.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux下安装opencv_linux下安装pycharm

    linux下安装opencv_linux下安装pycharm一、RabbitMQ介绍RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。AMQP,即AdvancedMessageQ…

    2022年9月28日
    1
  • Linux配置IP地址的方法

    Linux配置IP地址的方法ifconfig命令临时配置IP地址ifconfig命令:查看与配置网络状态的命令//查看当前网络状态#ifconfig//配置网卡的临时生效的IP地址#ifconfigeth0192.168.0.200netmask255.255.255.0//配置网关routeadddefaultgw192.168.0.1setup工具永久配置IP地址RedHat专有图形化工具

    2022年6月7日
    36
  • MFC Java 使用socket 中文乱码解决方法(一)「建议收藏」

    MFC Java 使用socket 中文乱码解决方法(一)「建议收藏」MFCJava使用socket中文乱码解决方法(一)1、在使用MFC做服务端,Java做客户端时(1)客户端向服务端发送数据 Java发送代码:PrintWriterprintWriter= newPrintWriter( newBufferedWriter( newOutputStreamWriter( client.getOutputStream(),”gbk”)),true); //Windows一般默认为GB

    2022年7月14日
    12
  • nessus的使用教程扫描_kali安装nessus

    nessus的使用教程扫描_kali安装nessus1.打开浏览器,输入https://localhost:8834/登录Nessus.2.输入你设置的账号密码.3.进入首页,可以使用浏览器自带的网页翻译(如谷歌)。4.点击侧边栏policies(政策),显示策略界面。5.点击newpolicy(创建新策略),显示策略模板。6.选择advancedscan(高级扫描),填写策略名称。7.单击Plugins标签,该界面显示了所有插件程序,默认全部是启动的enabled。在该界面可以单击右上角Disable..

    2022年10月19日
    2
  • 9300反编译apk「建议收藏」

    9300反编译apk「建议收藏」1.首先,下载这货apktool_ics_jb_imobile.com.cn.rar(7.39MB,下载次数:589)奇怪版本的apktool,由1.4.2和1.4.4版混和而成2.请确保你已经安装了JDK,还有WinRAR之类的解压软件,如果没有自行解决吧3.将下载好的东西解压到某个文件夹里,如图(文件以压缩包实际所含文件为准,此图仅示意,下同):…

    2022年9月16日
    2
  • java怎么测试_java中如何使用Junit测试[通俗易懂]

    java怎么测试_java中如何使用Junit测试[通俗易懂]java中如何使用Junit测试一、总结一句话总结:a、单元测试的测试代码在test文件夹下,和源码不在同一个文件夹下b、测试的类方法都以test开头,后面接要测试的类或者方法的名字1、JUnit中什么时候使用assertTrue,assertFalse语句?true通过false通过assertTrue(booleancondition);condition:如果condition结果为t…

    2022年7月8日
    19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号