我想将来自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流之前,我正在使用计算机上的文件。
答案 0 :(得分:1)
对浏览器的媒体支持是一个不断变化的格局,因此值得在某些地方查找最新视图。
根据我的经验,此链接上的表格通常是最新的:
您会注意到该表包括编解码器和容器-例如mp4中的h.264。了解这一点很重要,因为您的浏览器可能支持编解码器,但您想要的容器中不支持。
对于受支持的容器和编解码器,HTML5标签将支持HTTP流或更准确地说是HTTP下载。大多数服务器和浏览器都支持批量下载视频文件,以便您可以在视频完全下载之前开始观看。
为了在不同设备类型和不同网络条件下获得更好的性能,通常通过可调整比特率(ABR)协议(例如HLS或DASH)交付视频。 ABR还允许客户端设备或播放器以大块(例如10秒大块)的形式下载视频,但是服务器以多个不同的比特率版本提供每个大块。播放器可以从最适合当前网络条件的比特率中选择下一个块。也在此答案中查看更多信息: