流媒体服务器如何让WebRTC支持H.265,同时又能支持Web Chrome硬解码、软解码:DataChannel+MSE+WASM解码H.265
为了这一整套的解决方案,调研+研发整整花费了差不多半年多的时间,需达成的目标:
- 流媒体服务器端不需要将H.265转码成H.264,就能让Chrome解码播放H.265;
注意:现在很多市面上的软硬件通过转码H.265成H.264的方式来支持WebRTC,个人理解,这既费硬件又是技术的倒退!
- Web JS解码H.265在之前就WASM(WebAssembly)一种方式,但是后来Chrome支持了H.265的硬解码,于是,Web解码H.265就有了MSE和WebCodecs多种方式;
- 既然是解码播放,那肯定有支持硬件的,也有不支持硬解码H.265的,那WebAssembly软解码H.265就成为了托底的选项;
- WASM解码H.265也有多种模式,单线程的WASM解码模式,还有多线程WASM SIMD模式,效率上差距也是不小的;
解决方案
- 我们采用了H.265+AAC(音频通过转码统一成了AAC编码格式)封装成FLV格式,然后再通过WebRTC的DataChannel方式,传输到客户端;
WebRTC有VideoChannel、AudioChannel和DataChannel,原来DataChannel只是为了传输一些私有信息,现在也用来传输视频数据了,效果挺好!
- DataChannel传输到客户端之后,回调到上层进行类似于HTTP-FLV或者WebSocket-FLV的模式,选择MSE硬件、WebCodecs硬解,或者选择WASM软解码的方式,进行解码;
- WebRTC的DataChannel可以通过UDP或者TCP进行传输,完全利用了WebRTC的高效QoS策略,用户只需要做好服务端的FLV封装和客户端的FLV解码播放就可以了!!!
效果如图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2016-08-20 EasyDarwin开源流媒体服务器支持basic基本认证和digest摘要认证解析
2016-08-20 EasyDarwin开源流媒体服务器支持basic基本认证和digest摘要认证解析
2014-08-20 专题:Windows编译x264、SDL、faac、ffmpeg过程
2014-08-20 专题:Windows编译x264、SDL、faac、ffmpeg过程