HTML5视频,视频数据是如何发送到浏览器的?

4
我正在使用C ++实现一个HTML5实时视频服务器。
源流从摄像头设备(H264)读取,这已经完成。我还可以将源(h264编解码器)视频保存到文件中。
我想要实现一个HTML5实时服务器。但是我找不到任何关于此的协议描述。为了简单起见,我只想实现自动播放(不暂停,不停止,直到关闭浏览器)。
HTML协议如何工作?浏览器会向我发送“假”文件请求,对吗?所以我可以像保存到文件一样持续发送实时视频信息?在HTML中有关于这种文件传输协议的任何信息吗?与普通文件相比,HTML5视频是否有特殊之处?
我知道VLC可以做到这一点(来自stackoverflow的一些搜索),但我的应用程序有点特殊,需要比VLC支持更多的功能。而且我的应用程序不是通用视频服务器,我只需要支持一个特定的任务,因此实现起来并不难。
谢谢。
1个回答

3
具体细节会因为你使用的是单个视频流还是多个流(允许根据网络条件切换不同大小的流,即自适应比特率流媒体)而有所不同,但通常情况下,在浏览器中的视频播放器或HTML5/Javascript视频播放器将依次从服务器请求视频的“块”(如果音频是单独的流,则还会请求音频块)。
如果您观看视频时查看浏览器控制台的“网络”部分,就可以看到这一点 - 您应该会看到浏览器向服务器发出多个请求以获取视频块(以及音频块)。例如:(Chrome播放YouTube视频)
实际使用的协议、浏览器/播放器如何决定请求什么以及如何构建请求都会略有不同。例如,最简单的方法之一是服务器支持HTTP请求中的“范围请求”或“字节服务” - 这允许服务器在给定的HTTP请求中仅响应文件的一部分。
更复杂的自适应比特率流媒体协议(如HLS、SmoothStreaming、HDS和DASH)通常具有某种关于可用视频和音频流的额外数据的概念,播放器将使用这些数据选择流并请求一个块 - 例如包含有关流、时间、必要的DRM等信息的DASH清单或“mpd”文件。它们甚至可能包括机制,允许为稍后开始观看事件的用户请求直播流的“旧”块。无论如何,原则仍然相同 - 视频播放器发送多个独立的请求以获取视频和/或音频块,并在本地组装这些块以在浏览器中播放。
如果您的要求有点不同,最好查看一下开源视频流媒体服务器,看看是否可以适应它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接