h5出现之后,在浏览器上可以做的事情越来越多。无论是桌面应用程序还是移动应用程序,都有替换这些应用程序的趋势。 ReactNative使这一趋势更加明显。在我的上一篇中,公司刚刚加入公司,而我的团队负责人谈到了js可以做什么。我说过,节点出现后,无论前端还是服务器端,js都能做任何事情。我说完之后,他首先笑了,说那很好。后续项目的项目实现遇到有关视频处理的问题。视频代码流是从硬件获得的H.264代码流。视频信息由硬件设备上的多个视频图像组成,然后传输为大视频。转到前端,然后处理大视频图像以还原原始的多通道小图像,并将其显示在页面上。通用视频标签无法解决此功能。它只能在前端解码。让我们再次进行处理。这些处理涉及视频截取,缩放等。我不知道是否无法理解这些算法。为了确保视频的实时性能和内存的影响,我们必须使用多线程,而浏览器的多线程我不想要呢?此外,网页上不仅有四个这样的视频流。主线程和子线程之间的数据传输取决于复制数据。传输1920 * 1080的图片会占用大量内存。查看webworker API,只要它是特定的数据结构,就不必在主线程和子线程之间传输数据。复制后,主线程可以直接读取子线程的内存,(似乎已经看到W3C已经具有用于主子线程的共享内存的API,但是似乎又被取消了,存在安全性问题) ,但没有用,该项目确实在运行速度方面js和C / C ++之间仍然存在很大差距。到现在为止,我想到的我们的组长的呵呵感觉到我当时还是很无知,但是事情总是如此。asm.js和webassembly的开发极大地提高了浏览器端代码的运行速度,这是适用于这种CPU密集型操作。 Webassembly是三大浏览器制造商的少数几个常见支持项目之一。目的是补偿js就运行缺陷而言,可以将asm.js理解为js的汇编语言,它适合于机器阅读,不适合人类阅读,但是如果浏览过程中没有共享内存,或者无法基本改善主线程和子线程之间的通信,我希望浏览器上的视频处理仍然无法正常工作。

尽管无法进行视频处理,但是仍然可以在网页上解码和显示视频,但是前提是只有一个视频流,并且视频的大小不能太大。我之前在github上找到了一个库,andriod该系统的解码库已转换为asm.js标准的库。用于音频和视频处理的最著名的库是著名的ffmpeg库。毫不夸张地说,它可以完成音频和视频的所有操作。我最近有个主意。也就是说,它通过Emscripten转换为wasm并在浏览器上运行。 ffmpeg.js似乎已在github上获得,该文件是asm.js的标准。根据我的理解,asm.js的速度与wasm相同。这个比率差得多,因为asm.js仍然是js,而wasm是机器代码,不需要解析和运行,并且大小较小,ffmpeg.js似乎有20M!

说到视频解码,一些老程序员通过编写插件或使用Flash做出响应,但是如今在移动终端通电时,使用插件显然不是解决问题的方法,而Flash甚至更糟。我放弃了adobe。关于视频解码的问题,幸运的是有webgl可以显示视频的YUV数据,这可以理解为GPU加速。接下来,我将与您共享一个库,该库是上述的解码库。它可以选择通过webgl显示YUV数据。或普通画布显示rgb数据,前者比后者快得多,因为yuv数据还需要进行循环嵌套,以通过大量浮点操作转换为rgb数据,并且操作数与面积成比例图像的以下项目是关于视频解码的。服务器使用节点来侦听设备以通过TCP获得视频流,并且该节点通过websokcet与浏览器进行通信。这样做的唯一优点是,即使在局域网中,延迟也比HLS协议低。延迟仍然很高。缺点是它占用太多内存并且没有声音。这是项目的地址:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-351936-1.html
估计是理亏