【问题标题】:Streaming low latency avc/h264 video to a browser with MSE使用 MSE 将低延迟 avc/h264 视频流式传输到浏览器
【发布时间】:2019-06-20 18:26:20
【问题描述】:

我目前正在编码实时视频并流式传输到浏览器。 我将 rgb->vuy->h264->Wrap in (MP4 ISO BMFF Byte Stream Format spec, section 3)-> websocket 编码到客户端。 第一个包是从 ftyp 到 moov 标签的初始化数据。

从那里开始,我将 moof 和 mdat 标签发送给客户端。 我流式传输视频。

无论 mdat 块中有多少帧。 MSE 始终缓冲数据以进行无缝播放。如何使用 MSE 覆盖它。

我在某处读到,mdat 有一种方法可以理解它是一个实时蒸汽 webm 块。但我不知道这种想法是否存在于 mp4 或完全存在。

【问题讨论】:

  • 我找到了这个,stackoverflow.com/questions/29636740/… 但没有真正的答案
  • 你是如何创建 mp4 的,你是如何控制块大小的?
  • 我使用 Microsoft sinker(碎片化版本),然后循环并更改 mp4 标签中的一些值,例如 tfdt trun 和其他东西,以使其符合 Spec 3,以便 MSE 不会抱怨。我可以完全控制编码器。所以我放入坠子的框架越多,我得到的块就越多。但问题出在客户端。即使我每块(mdat)写入 2 帧,仍然存在延迟,因为 MSE 需要在开始渲染之前进行缓冲。
  • 我从未听说过微软下沉器。谷歌没有返回任何结果。你每两帧得到一个moof吗?还是每两帧只有一个 mdat?你能发布一个示例文件吗?

标签: javascript video-streaming mp4 h.264 mse


【解决方案1】:

我每帧发送一次moof,它可以工作。

【讨论】:

  • 是的,根据我的经验,每个帧的 moof 是减少延迟的最佳方法。我实际上检查了 Chrome 源,它们还将 moofs 视为应该完全接收以开始解码的片段。
  • 我最初发送 ftyp 和 moov。然后我发送 (moof 和 mdat) 。 mdat 可能有一个或多个帧。是对的吗?我在本地网络上得到大约 1 或 2 秒的延迟。我试图达到 0.2/0.3 秒。我发送大约 20 fps。如果我达到 30 FPS,tcp 缓冲区最终会填满。我的编码速度很快,我使用 Intel 或 Nvidia 硬件编码器进行编码。所以我可以在编码方面轻松达到 60 fps。我正在流式传输我的桌面,所以我可以看到光标迟到了。屏幕分辨率为 1080x1920,因此帧大小也很重要。你们发送什么决议?
猜你喜欢
  • 2012-01-25
  • 2014-12-14
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 2015-05-22
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多