javascript - 在 HTML 视频标签中流式传输实时视频流量

标签 javascript html video meteor ffmpeg

我想将来自 udp 的实时视频流传输到 HTML video 标记中。 我做了一些研究,但我得到了很多信息,我很难清楚地了解我能做什么和不能做什么。

视频通量使用 H.264 和 AAC 编解码器、MP4 容器并具有 3840x2160 (4K) 分辨率。我想在 Chrome(最新版本)上播放它。

据我所知,HTML video 标签可以原生读取 H.264/AAC 视频。我让它与我服务器上的视频 direclty 一起工作(我使用的是 Meteor JS + React)。

我学会了使用 FFmpeg 流式传输由 VLC 播放器读取的 udp 通量,然后我使用 FFserver(我知道它已被弃用)创建一个 HTTP 通量也由 VLC 读取但不由 HTML 视频 标签。

所以...我的问题是:HTML video 是否可以从 HTTP 本地读取视频流?

我看过很多关于 HLS 和 DASH 的讨论,但我不明白它们是否(以及为什么)是强制性的。

我读了一篇关于有人仅使用 FFmpeg 创建 HLS m3u8 的帖子,这是一个可行的解决方案吗?

FF服务器配置

HTTPPort                        8090
HTTPBindAddress                 0.0.0.0
MaxHTTPConnections              20
MaxClients                      10
MaxBandwidth                    100000

<Feed feed.ffm>
  File                          /tmp/feed.ffm
  FileMaxSize                   1g
  ACL allow                     127.0.0.1
</Feed>

<Stream stream.mpeg>
  Feed                          feed.ffm
  Format                        mpeg
  AudioCodec                    aac
  AudioBitRate                  256
  AudioChannels                 1
  VideoCodec                    libx264
  VideoBitRate                  10000      // Total random here
  VideoBitRateRange             5000-15000 // And here...
  VideoFrameRate                30
  VideoQMin                     1
  VideoQMax                     50
  VideoSize                     3840x2160
  VideoBufferSize               20000      // Not sure either
  AVOptionVideo                 flags +global_header
</Stream>

我必须指定 QMin 和 QMax 以避免错误消息,但我真的不明白它是什么。

FFmpeg 命令行

ffmpeg -re -i bbb_sunflower_2160p_30fps_normal.mp4 -strict -2 -r 30 -vcodec libx264 http://localhost:8090/feed.ffm

这适用于 VLC。在移动到 udp 流之前,我正在处理计算机上的文件。

最佳答案

浏览器对媒体的支持是一个不断变化的环境,因此值得拥有一些地方来寻找最新的 View 。

根据我的经验,此链接中的表格通常是最新的:

您会注意到该表包括编解码器和容器 - 例如mp4 中的 h.264。理解这一点很重要,因为您的浏览器可能支持编解码器,但您想要的容器不支持该编解码器。

对于支持的容器和编解码器,HTML5 标签将支持 HTTP 流或更准确的 HTTP 下载。大多数服务器和浏览器都支持分块下载视频文件,以便您可以在视频完全下载之前开始观看。

为了在不同设备类型和不同网络条件下获得更好的性能,视频通常通过可调比特率 (ABR) 协议(protocol)(例如 HLS 或 DASH)传送。 ABR 还允许客户端设备或播放器以 block 的形式下载视频,例如 10 秒 block ,但服务器以多个不同比特率版本提供每个 block 。播放器可以从最适合当前网络条件的比特率中选择下一个 block 。另请参阅此答案中的更多信息:

关于javascript - 在 HTML 视频标签中流式传输实时视频流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52512006/

相关文章:

javascript - 使元素具有相同的高度在调整大小时不起作用

javascript - 表单未在 javascript 中验证

javascript - 如何使用 CasperJS 提交列表中的项目

html - 保持 div 位置不变

linux - 如何通过 stdin/stdout 流式传输 mp4 视频?

python - python-pptx模块可以插入视频吗?

java - Xuggler - 新 Runnable 中的视频没有愿景且无法结束

javascript - 对非阻塞脚本的痴迷

javascript - 将字符串转换为 javascript 对象

javascript - 从电子表格公式中提取有效单元格引用的正则表达式