如何访问HTML5视频解码功能?

时间:2017-12-12 16:44:13

标签: html5 html5-video hardware-acceleration video-codecs

HTML5具有<video/>元素,可从服务器下载视频,对其进行解码和渲染。通常,如果不是总是他们使用硬件加速解码(如果可用)。

是否可以访问解码功能?原因是我使用自定义流媒体协议,因此在客户端我编码了我需要解码和渲染的视频流。

不幸的是,视频解码器的纯JavaScript实现不适用,因为它们无法提供足够的性能。我对HVEC或h.264编解码器感兴趣。

3 个答案:

答案 0 :(得分:6)

  

是否可以只访问解码功能?

不幸的是没有。我们只能访问处理流/源文件的高级API,这些API具有有限的影响,例如基于时间的位置,播放状态和各种事件。我们可以将画框作为原始RGB(A)从当前解码的帧中绘制到画布上,但是它是关于它的。

  

原因是我使用自定义流媒体协议等   客户端我编码了我需要解码的视频流   呈现

您没有描述此协议,因此我们只能猜测,但您可以构建浏览器兼容的流,视频元素可以使用Media Source Extensions来使用。这使您可以在客户端构建自适应和自定义流式传输解决方案。

  

视频解码器的纯JavaScript实现不适用   不幸的是,因为他们无法提供足够的表现。

这不一定是真的。示例是例如纯JS实现,其实时解码MPEG1流,包括音频和视频,例如thisthis。当然,这适用于大多数浏览器目前可以做的极限。还有一个emscripten based H-264解码器似乎也可以通过WebGL使用GPU,但我不能说它的性能 - 它可能是下一段的一个很好的起点:

更好的选择是查看WebAssembly,它可以运行预编译的二进制代码,例如C / C ++源代码。这允许您在浏览器中使用以本机速度运行的HVEC / H.264解码器的开源实现(但要注意许可证和术语,especially for H.264),或使用{{3}等软件的一部分}。

  

我对任何非便携式解决方案感兴趣

在这种情况下你可能想要构建一个(linkable) ffmpeg(也就是浏览器扩展),可以使用web-extension(在这种情况下后者可能是ffmpeg,或者是一个可以处理直接流。)

这究竟是如何工作的当然取决于您使用的协议等等。

根据有限的范围/描述,只需2美分。

答案 1 :(得分:0)

此问题的解决方案是WebRTC。可以集成外部编码器或使用嵌入式编码器。在浏览器中,WebRTC客户端使用硬件解码。 WebRTC还提供实时流功能。兼容性还不错。

答案 2 :(得分:0)

经过长期研究,可以在使用媒体源扩展(MSE)的Android浏览器上使用硬件解码器解码h264 HLS TS段流。由于iOS不支持MSE,因此要使其在iOS的Safari中运行似乎是一个障碍,因为Apple不允许通过FIFO缓冲区或回调访问硬件解码器。鉴于苹果公司对WebRTC的支持,似乎进入iOS中的硬件解码器的唯一方法等同于“接收视频呼叫”流,只是输入必须是远程http流,而输出必须转至画布。