我想知道:youtube 或任何其他包含视频的网站如何将此类数据发送给客户? 当使用 Web 浏览器并请求网页时,浏览器会向服务器发送 HTTP GET 请求,服务器返回 html 页面;但视频数据是如何传输的呢? 它是否打开了一个额外的连接来做到这一点? 并且,有没有办法使用某些软件库在程序中捕获此流?
我想要实现的是类似VLC的网络流功能,可以让你观看youtube上的视频,但我不知道从哪里开始。
谢谢
最佳答案
Youtube 主要使用 MPEG DASH用于视频流。如果您用鼠标右键单击任何 YouTube 视频并选择 Nerd 统计信息,您将看到它:
基于 HTTP 的视频流协议(protocol),例如 MPEG DASH , HLS , Smooth streaming等都有一个 list 文件,它描述了实际视频数据的结构(其中包含每个媒体 block 的 URL、可用的表示、有关每个表示的比特率的信息等信息)。客户端首先下载此 list ,对其进行解析,然后开始下载分段。每次下载后,客户端都会测量 channel 吞吐量。并根据此信息决定在下一个请求中下载哪个 block 。
使用youtube-dl例如,您可以查看哪些表示可用:
youtube-dl -F https://www.youtube.com/watch?v=b6u9WJ01Oxs
与 curl
一起,您还可以下载 DASH list (MPD)
curl $(youtube-dl https://www.youtube.com/watch?v=GbHSMwc4eCA --youtube-include-dash-manifest --dump-intermediate-pages -s | grep manifest.google | cut -d ' ' -f 5) > dash_manifest.mpd
下载 MPD 后,您可以使用 GPAC 来播放它 Osmo4 (MP4客户端)。或者甚至可能是 VLC(我不确定 VLC 中的 DASH 插件自 2012 年以来是否更新过)。
关于c++ - 如何查看网络流(http)中的视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36534020/