流媒体服务器如何让WebRTC支持H.265,同时又能支持Web js硬解码、软解码(MSE硬解、WASM软解)

news/2024/11/8 20:22:07/

为了这一整套的解决方案,调研+研发整整花费了差不多半年多的时间,需达成的目标:

  1. 流媒体服务器端不需要将H.265转码成H.264,就能让Chrome解码播放H.265;

注意:现在很多市面上的软硬件通过转码H.265成H.264的方式来支持WebRTC,个人理解,这既费硬件又是技术的倒退!

  1. Web JS解码H.265在之前就WASM(WebAssembly)一种方式,但是后来Chrome支持了H.265的硬解码,于是,Web解码H.265就有了MSE和WebCodecs多种方式;
  2. 既然是解码播放,那肯定有支持硬件的,也有不支持硬解码H.265的,那WebAssembly软解码H.265就成为了托底的选项;
  3. WASM解码H.265也有多种模式,单线程的WASM解码模式,还有多线程WASM SIMD模式,效率上差距也是不小的;

解决方案

  1. 我们采用了H.265+AAC(音频通过转码统一成了AAC编码格式)封装成FLV格式,然后再通过WebRTC的DataChannel方式,传输到客户端;

WebRTC有VideoChannel、AudioChannel和DataChannel,原来DataChannel只是为了传输一些私有信息,现在也用来传输视频数据了,效果挺好!

  1. DataChannel传输到客户端之后,回调到上层进行类似于HTTP-FLV或者WebSocket-FLV的模式,选择MSE硬件、WebCodecs硬解,或者选择WASM软解码的方式,进行解码;
  2. WebRTC的DataChannel可以通过UDP或者TCP进行传输,完全利用了WebRTC的高效QoS策略,用户只需要做好服务端的FLV封装和客户端的FLV解码播放就可以了!!!

效果如图:
<a class=WebRTC支持H.265" />

<a class=WebRTC支持H.265" />


http://www.ppmy.cn/news/1516192.html

相关文章

HaProxy学习 —300K的TCP Socket并发连接实现(翻译)

HaProxy学习 —300K的TCP Socket并发连接实现&#xff08;翻译&#xff09; 1 原文链接2 原文翻译2.1 调整Linux系统参数2.2 调整HAProxy 1 原文链接 Use HAProxy to load balance 300k concurrent tcp socket connections: Port Exhaustion, Keep-alive and others&#xff0…

数字签名和CA数字证书的核心原理和作用

数字证书&#xff1a; 需要使用 CA 来解决公钥的信任问题&#xff08;客户端可能收到第三方的公钥&#xff09;。服务端在发送之前需要先把用来给客户端加密的公钥放到 CA 中&#xff0c;CA 根据公钥以及其他信息生成了数字证书&#xff0c;数字证书就相当于把这把公钥和该网站…

基于Spark计算网络图中节点之间的Jaccard相似性

基于Spark计算网络图中节点之间的Jaccard相似性 Jaccard 相似度是一种较为常用的衡量两个集合相似性的指标&#xff0c;用于计算两个集合的交集与并集的比率。具体来说&#xff0c;它的计算公式为&#xff1a; 在网络图中同样经常使用Jaccard来计算节点之间的相似性&#xff…

FPGA开发——verilog的运算符以及相关优先级的介绍

一、简介 在我们学习任何一门编程语言时&#xff0c;不可避免的都会遇见运算符和相关的运算优先级的问题&#xff0c;只有掌握了各个运算符的优先级关系我们才能进行更好的代码编写。在前面的时候因为我没有遇到因为优先级而导致的工程结果错误&#xff0c;所以没有过多注意&am…

【全开源】php在线客服系统源码 (搭建教程+全新UI)

PHP在线客服系统是一种基于PHP编程语言开发的在线客服系统&#xff0c;它可以为网站提供实时的在线客服支持&#xff0c;方便用户与客服人员进行即时的沟通和交流。作为一种开源的系统&#xff0c;它的源码可以供开发者进行二次开发和定制&#xff0c;以满足不同网站的需求。 …

美团一面部分问题

多个线程同时争抢同一把锁阻塞的情况下&#xff0c;如何唤醒指定线程? 在Java中&#xff0c;当多个线程同时争抢同一把锁时&#xff0c;通常使用synchronized关键字或ReentrantLock来实现同步。默认情况下&#xff0c;当一个线程持有锁时&#xff0c;其他线程会阻塞等待这把锁…

深入理解微服务中的负载均衡算法与配置策略

负载均衡算法 我们首先来探讨一下默认情况下Ribbon使用的负载均衡算法。有些人可能会说它使用轮询算法&#xff0c;因为在本地测试时&#xff0c;我们经常会看到轮询的效果。然而&#xff0c;简单地依赖这种表面的观察来回答面试题是有风险的。实际上&#xff0c;忽略了深入理解…

git submodule

文章目录 环境准备用法添加子模块添加b添加c提交总结 其它用户获取子模块其它总结 更新子模块内容方式1&#xff1a;独立更新其它 方式2&#xff1a;在主模块嵌套下更新总结 总结参考 写的有点乱&#xff0c;凑合理解一下吧。另外常用命令总结一下&#xff1a; git submodule …