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

时间:2018-09-26 07:13:57

标签: javascript html video meteor ffmpeg

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

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

据我了解,HTML video标签可以本地读取H.264 / AAC视频。我将其与服务器上的视频分辨率一起使用(我正在使用Meteor JS + 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>

我必须指定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流之前,我正在使用计算机上的文件。

1 个答案:

答案 0 :(得分:1)

对浏览器的媒体支持是一个不断变化的格局,因此值得在某些地方查找最新视图。

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

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

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

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