h264html实时播放,H5播放H264之websocket

本文介绍了如何利用WebSocket在Web前端实时播放H264视频流。通过Emscripten将C/C++编译为JavaScript,结合Asm.js优化性能,使用wfs库处理二进制数据并通过WebSocket传输,实现在浏览器中流畅播放H264视频。
摘要由CSDN通过智能技术生成

一、简介

关于前端使用websocket播放音视频我倒是没想过,但是理论上确实是可行的,因为websocket是长连接,虽然知道web端的常见用法,但是作为c++开发人员我最疑惑的问题就是:使用js处理二进制?这个做法很不常见,恕我没太多了解,我一直以为js一般处理二进制不方便,所以脑海里一直自以为是

js编解码效率高吗?因为是基于浏览器的脚本语言的二不是直接基于系统api的独立进行,转行较多,效率应该不高,所以我也一直避讳用js去处理编解码

其实,我自以为的经过不断的探索发现也确实是对的,相对而言js确实能够处理二进制流(使用ArrayBuffer)但是操作不方便且效率相对较低,不过对于web端播放来讲,第一是播放量不太,一般不会出现9路以上主码流播放的情况(一般是一路并发),第二就是web端播放编解码其实并不是像通过c/C++那样将所有的数据一步一步解码出来,而是可以借助EMS转换工具将C库直接转换为js脚本,我们只需要用c或c++语言进行开发即可!

二、c/C++转js

我这里多说一句,我看到有将c语言直接转换为js语言的库的时候,我是一愣,这不说来所谓的前端js的音视频开发的开源库那么多,都可以使用c语言直接开发出来?因为开源的有如下问题:有些部分开源,不免费

有些有讨厌的logo,无法定制

有些有bug,并不完善

有些没有bug但是无法定制(比如延迟较高、播放长时间会变慢等疑难杂症)

如果能够用c或cpp编程开发,对于熟悉擅长这块的我岂不乐哉!于是我搜索了一下c或cpp转js的库ecmascripten

Emscripten,基于LLVM可将C/C++代码编译为js的工具。Asm.js

Asm.js来自于JavaScript应用的一个新领域:编译成JavaScript的C/C++应用。它是JavaScript应用的一个全新流派,由Mozilla的Emscripten项目催生而来。

Emscripten项目提供了可以编译C和C++(或其他任何可转换为LLVM IR的语言)代码为asm.js的工具,如下c语言代码:int (int i)

{

return i + 1;

}

Emscripten将输出下列JavaScript代码:function (i)

{

i = i | 0;

return (i + 1) | 0;

}

Emscripten目的就是将c/c++进程编译成js或者H5应用,asm.js的产生是为了提高Emscripten转换后的代码执行效率的。流程是C++ -> Emscripten -> asm.js -> 浏览器运行。

我们知道js的性能是无法跟C++这种高效语言相比的,但是Asm.js比较注意性能优化,一般情况下,对于复杂的应用Asm.js的性能仅仅比普通C++编译的慢两倍(可以和Java或者C#相媲美)。

Asm.js为了优化性能,做了一下几点:所有外部数据在一个称为堆的对象中存储并被引用。堆在本质上是一个大数组(应当是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值