使用API​​从视频ID获取youtube文件网址

时间:2017-02-20 11:01:48

标签: javascript youtube youtube-data-api soundmanager2 audio-player

我想使用SoundManager2音频播放器重现网站上嵌入的所有youtube文件。如何从视频ID访问Youtube文件URL?

注意:Soundcloud提供从歌曲URL获取直接流媒体URL的可能性。这是带有Soundmanager2和Angular的working example。现在我想为Youtube做同样的事情。

2 个答案:

答案 0 :(得分:2)

一种有点hacky的方式 - 您可以使用Youtube的OEmbed API,但是您需要提供一个URL,因此您需要将ID添加到最后。 https://www.youtube.com/oembed?url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DiwGFalTRHDA

这将始终返回一个嵌入式iframe,您可以将URL重新出现。

var regex = /<iframe.*?src='(.*?)'/;
var src = regex.exec(str)[1];

答案 1 :(得分:1)

您的标题说使用API​​。无法通过视频ID访问YouTube文件网址。通过文件URL,您也可以下载它,分发内容等,而不是YouTube Terms。所以没有这样的API。

由于您使用Javascript进行了标记,因此可以直接访问文件网址。这可能不是您想要的,但它可以在任何浏览器中提供的开发人员工具控制台中完美运行。有关详细信息Here you go

const videoUrls = ytplayer.config.args.url_encoded_fmt_stream_map
  .split(',')
  .map(item => item
    .split('&')
    .reduce((prev, curr) => (curr = curr.split('='),
      Object.assign(prev, {[curr[0]]: decodeURIComponent(curr[1])})
    ), {})
  )
  .reduce((prev, curr) => Object.assign(prev, {
    [curr.quality + ':' + curr.type.split(';')[0]]: curr
  }), {});
console.log(videoUrls);