Javascript HTML视频标签中的流实时视频流

Javascript HTML视频标签中的流实时视频流,javascript,html,video,meteor,ffmpeg,Javascript,Html,Video,Meteor,Ffmpeg,我想将来自udp的实时视频流传输到HTMLvideo标记中。 我做了一些研究,但我得到了很多信息,我很难对我能做什么和不能做什么有一个清晰的概述 视频流量使用H.264和AAC编解码器、MP4容器,分辨率为3840x2160(4K)。我想在Chrome(最新版本)上玩 据我现在了解,HTMLvideotag可以在本地读取H.264/AAC视频。我在我的服务器上使用了视频direclty(我使用的是MeteorJS+React) 我学会了使用FFmpeg流传输VLC播放器读取的udp流量,然后我使

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

视频流量使用H.264和AAC编解码器、MP4容器,分辨率为3840x2160(4K)。我想在Chrome(最新版本)上玩

据我现在了解,HTML
video
tag可以在本地读取H.264/AAC视频。我在我的服务器上使用了视频direclty(我使用的是MeteorJS+React)

我学会了使用FFmpeg流传输VLC播放器读取的udp流量,然后我使用FFserver(我知道它不推荐使用)创建HTTP流量,VLC也可以读取,但不能通过HTML
video
标记读取

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

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

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

FFserver配置

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>
HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 20
MaxClients 10
最大带宽100000
文件/tmp/feed.ffm
FileMaxSize 1g
ACL允许127.0.0.1
Feed.ffm
格式mpeg
音频编解码器
音频比特率256
音频频道1
视频编解码器libx264
视频比特率10000//此处为总随机比特率
视频比特率范围5000-15000//。。。
视频帧率30
VideoQMin 1
VideoQMax 50
视频大小3840x2160
VideoBufferSize 20000//也不确定
AVOptionVideo标志+全局_标题
我必须指定QMin和QMax以避免错误消息,但我真的不明白它是什么

FFmpeg命令行

ffmpeg-re-ibb_sunflower_2160p_30fps_normal.mp4-strict-2-r30-vcodec libx264http://localhost:8090/feed.ffm


这是VLC的工作。在转移到udp流之前,我正在处理计算机上的文件。

浏览器上的媒体支持是一个不断变化的环境,因此有一些地方可以查看最新的视图是值得的

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

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

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

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


因此,如果我无法从HTTP FFserver读取视频,这可能只是我的配置,而不是一些技术限制?嗯,这可能是一个格式或编解码器/容器支持问题-如果您有测试流,您可以共享它,应该很容易快速检查?我已经更新了我的帖子,向您展示了FFserver配置和FFmepg命令行。我最初尝试使用mp4容器,但出现了一些问题(我不记得是什么问题),所以我切换到了mpeg。顺便谢谢你的帮助!实际上,如果您只想用一种简单的方式将bbb_sunflower_2160p_30fps_normal.mp4视频流式传输到浏览器或移动设备,那么您可以在大多数web服务器上将其作为静态文件使用。例如,节点:。这很快,适用于浏览器支持的任何格式。使用mp4文件只是一个步骤,最终目标是通过udp显示视频流量(不一定符合编解码器)。浏览器不能直接显示udp流量,所以我必须转换成HTTP流量。