【问题标题】:How to see videos from a network stream(http)? [closed]如何查看来自网络流(http)的视频? [关闭]
【发布时间】:2016-04-10 18:47:31
【问题描述】:

我想知道:youtube 或任何其他包含视频的网站如何将此类数据发送给客户? 使用网络浏览器,请求网页时,浏览器向服务器发送 HTTP GET 请求,服务器返回 html 页面;但是视频数据是如何传输的呢? 它是否打开了一个额外的连接来做到这一点? 而且,有没有办法使用一些软件库在程序中捕获这个流?

我想要实现的是类似于 VLC 的网络流功能,它可以让你从 youtube 上观看视频,但我不知道从哪里开始。

谢谢

【问题讨论】:

  • 您在问流媒体视频和计算机网络是如何工作的。一个人可以为此写一本书或十本书。问答的范围太广了。

标签: c++ c http video youtube


【解决方案1】:

Youtube 主要使用MPEG DASH 进行视频流传输。如果您用鼠标右键单击任何 Youtube 视频并选择 stats for nerds,您将看到它:

基于 HTTP 的视频流协议,如 MPEG DASHHLSSmooth streaming 等,有一个清单文件,描述了实际视频数据的结构(有诸如 URL 之类的信息每个媒体块、可用的表示、有关每个表示的比特率的信息等)。客户端首先下载此清单,对其进行解析,然后开始下载分段。每次下载后,客户端都会测量通道吞吐量。并根据这些信息决定在下一个请求中下载哪个块。

例如,使用youtube-dl,您可以查看哪些表示可用:

youtube-dl -F https://www.youtube.com/watch?v=b6u9WJ01Oxs

curl 一起,您还可以下载 DASH 清单 (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 (MP4Client) 进行播放。或者甚至是 VLC(我不确定 VLC 中的 DASH 插件是否自 2012 年以来更新)。

【讨论】:

    【解决方案2】:

    最简单的协议, HTTP GET 返回具有正确 mime 类型标头的视频文件。

    由于这很容易被盗版并且不适合直播,一些插件使用他们自己的协议,如rtmp,或基于HTTP的协议,如HLS

    要观看来自 youtube 的视频,您可以查看 youtube-dl 项目。 Youtube 是一个移动的目标,所以它需要大量的维护,这违背了他们的 eula。

    【讨论】:

      猜你喜欢
      • 2011-09-21
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 2014-03-09
      • 2019-11-24
      相关资源
      最近更新 更多