js blob类型url的视频下载问题的解决


Posted in Javascript onNovember 29, 2019

blob下载问题的详细描述

我想用src url blob:https://www.youtube.com/23aea5c8-9ae2-40dc-9417-e675ea99b386下载视频,但是不知道应该怎么做。

有没有下载这类视频的通用方法?

推荐的解决方法

我在Vimeo中找到了一个使用blob url下载视频的方法(读了这篇文章,我才知道做法)。我正在使用Google Chrome,具体步骤如下:

1、打开More Tools(更多工具)→Developer Tools(开发工具)

2、检查视频标签中是否有这样的东西:

<video preload="" src="blob:https://player.vimeo.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"></video>

3、复制iframe标签的src(如果有的话)值,如http://player.vimeo.com/video/XYZ,如果你发现它可以复制,直接跳到第7点,否则按照步骤4,5,6继续操作。

4、现在在页面中找到这个字符串https://skyfire.vimeocdn.com/.../master.json?base64_init=1(使用开发视图(Developer View)),应该可以在javascript函数中找到它,像这样:

(function(e,a){var t={"cdn_url":"https://f.vimeocdn.com","view":1,"request":{"files":{"dash":{"origin":"gcs","url":"https://48skyfiregce-a.akamaihd.net/.../master.json?base64_init=1","cdn":"

5、复制上面的url字段中的链接到一个新的Chrome选项卡,例如https://48skyfiregce-a.akamaihd.net/.../master.json?base64_init=1,然后使用浏览器打开它,它会打开一个像这样的json文件:

{
  "clip_id": XYZ,
  "base_url": "../",
  "video": [
         { ... ... ...

6、现在用id XYZ组合构造一个URL,如下所示:https://player.vimeo.com/video/XYZ

7、用最终的URL替换视频标签内的blob:https://player.vimeo.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX(在上一步#6中创建的)。

8、现在可以发现,魔术般地,视频标签内的src字段已更改(如果没有,请尝试第7步多次)...

<video preload="none" src="https://fpdl.vimeocdn.com/vimeo-prod-skyfire-std-us/XX/XXX/X/XXXXXXXX/XXXXXXXXX.mp4?token=abcdefg"></video>

最后,使用新的链接直接下载它,就像这样:https://fpdl.vimeocdn.com/vimeo-prod-skyfire-std-us/XX/XXX/X/XXXXXXXX/XXXXXXXXX.mp4?token=abcdefg

其他的解决思路

这个答案是针对Twitter网址的 -

右键点击视频,然后点击检查元素 -

你会发现这样的代码

<div id="playerContainer" class="player-container full-screen-enabled" data-config="{"is_360":false,"duration":28617,"scribe_widget_origin":true,"heartbeatEnabled":true,"video_url":"https:\/\/video.twimg.com\/ext_tw_video\/844504104512749568\/pu\/pl\/e91Du5N2TZ09ZaW_.m3u8","disable_embed":"0","videoInfo":{"title":null,"description":null,"publisher":{"screen_name":"MountainButorac","name":"Mountain Butorac","profile_image_url":"https:\/\/pbs.twimg.com\/profile_images\/808318456701521920\/vBvlAASx_normal.jpg"}},"cardUrl":"https:\/\/t.co\/SdSorop3uN","content_type":"application\/x-mpegURL","owner_id":"14120461","looping_enabled":true,"show_cookie_override_en":true,"visit_cta_url":null,"scribe_playlist_url":"https:\/\/twitter.com\/MountainButorac\/status\/844505243538931714\/video\/1","source_type":"consumer","image_src":"https:\/\/pbs.twimg.com\/ext_tw_video_thumb\/844504104512749568\/pu\/img\/FFt3qkbeOh0RlGfZ.jpg","heartbeatIntervalInMs":5000.0,"use_tfw_live_heartbeat_event_category":true,"video_loading_timeout":45000.0,"status":{"created_at":"Wed Mar 22 11:05:14 +0000 2017","id":844505243538931714,"id_str":"844505243538931714","text":"Took my Goddaughter to meet the pope. She stole his hat! https:\/\/t.co\/SdSorop3uN","truncated":false,"entities":{"hashtags":[],"symbols":[],"user_mentions":[],"urls":[],"media":[{"id":844504104512749568,"id_str":"844504104512749568","indices":[57,80],"media_url":"http:\/\/pbs.twimg.com\/ext_tw_video_thumb\/844504104512749568\/pu\/img\/FFt3qkbeOh0RlGfZ.jpg","media_url_https":"https:\/\/pbs.twimg.com\/ext_tw_video_thumb\/844504104512749568\/pu\/img\/FFt3qkbeOh0RlGfZ.jpg","url":"https:\/\/t.co\/SdSorop3uN","display_url":"pic.twitter.com\/SdSorop3uN","expanded_url":"https:\/\/twitter.com\/MountainButorac\/status\/844505243538931714\/video\/1","type":"photo","sizes":{"small":{"w":340,"h":604,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":576,"h":1024,"resize":"fit"},"medium":{"w":576,"h":1024,"resize":"fit"}}}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"favorite_count":0,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"},"show_cookie_override_all":true,"video_session_enabled":false,"media_id":"844504104512749568","view_counts":null,"statusTimestamp":{"local":"4:05 AM - 22 Mar 2017"},"media_type":1,"user":{"screen_name":"MountainButorac","name":"Mountain Butorac","profile_image_url":"https:\/\/pbs.twimg.com\/profile_images\/808318456701521920\/vBvlAASx_bigger.jpg"},"watch_now_cta_url":null,"tweet_id":"844505243538931714"}" data-source-type="consumer">

复制上面的代码,并粘贴到记事本++(Notepad++)中,然后用"替换所有的",用/替换所有和\/。 (使用CTRL + H)

你会得到如下的内容

{
  "is_360": false,
  "duration": 28617,
  "scribe_widget_origin": true,
  "heartbeatEnabled": true,
  "video_url": "https://video.twimg.com/ext_tw_video/844504104512749568/pu/pl/e91Du5N2TZ09ZaW_.m3u8",
 
  "disable_embed": "0",
  "videoInfo": {
    "title": null,
    "description": null,
    "publisher": {
      "screen_name": "MountainButorac",
      "name": "Mountain Butorac",
      "profile_image_url": "https://pbs.twimg.com/profile_images/808318456701521920/vBvlAASx_normal.jpg"
    }
  },
  "cardUrl": "https://t.co/SdSorop3uN",
  "content_type": "application/x-mpegURL",
  "owner_id": "14120461",
  "looping_enabled": true,
  "show_cookie_override_en": true,
  "visit_cta_url": null,
  "scribe_playlist_url": "https://twitter.com/MountainButorac/status/844505243538931714/video/1",
  "source_type": "consumer",
  "image_src": "https://pbs.twimg.com/ext_tw_video_thumb/844504104512749568/pu/img/FFt3qkbeOh0RlGfZ.jpg",
  "heartbeatIntervalInMs": 5000.0,
  "use_tfw_live_heartbeat_event_category": true,
  "video_loading_timeout": 45000.0,
  "status": {
    "created_at": "Wed Mar 22 11:05:14 +0000 2017",
    "id": 844505243538931714,
    "id_str": "844505243538931714",
    "text": "Took my Goddaughter to meet the pope. She stole his hat! https://t.co/SdSorop3uN",
    "truncated": false,
    "entities": {
      "hashtags": [],
      "symbols": [],
      "user_mentions": [],
      "urls": [],
      "media": [{
        "id": 844504104512749568,
        "id_str": "844504104512749568",
        "indices": [57, 80],
        "media_url": "http://pbs.twimg.com/ext_tw_video_thumb/844504104512749568/pu/img/FFt3qkbeOh0RlGfZ.jpg",
        "media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/844504104512749568/pu/img/FFt3qkbeOh0RlGfZ.jpg",
        "url": "https://t.co/SdSorop3uN",
        "display_url": "pic.twitter.com/SdSorop3uN",
        "expanded_url": "https://twitter.com/MountainButorac/status/844505243538931714/video/1",
        "type": "photo",
        "sizes": {
          "small": {
            "w": 340,
            "h": 604,
            "resize": "fit"
          },
          "thumb": {
            "w": 150,
            "h": 150,
            "resize": "crop"
          },
          "large": {
            "w": 576,
            "h": 1024,
            "resize": "fit"
          },
          "medium": {
            "w": 576,
            "h": 1024,
            "resize": "fit"
          }
        }
      }]
    },
    "source": "\u003ca href=\"http://twitter.com/download/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c/a\u003e",
    "in_reply_to_status_id": null,
    "in_reply_to_status_id_str": null,
    "in_reply_to_user_id": null,
    "in_reply_to_user_id_str": null,
    "in_reply_to_screen_name": null,
    "geo": null,
    "coordinates": null,
    "place": null,
    "contributors": null,
    "retweet_count": 0,
    "favorite_count": 0,
    "favorited": false,
    "retweeted": false,
    "possibly_sensitive": false,
    "lang": "en"
  },
  "show_cookie_override_all": true,
  "video_session_enabled": false,
  "media_id": "844504104512749568",
  "view_counts": null,
  "statusTimestamp": {
    "local": "4:05 AM - 22 Mar 2017"
  },
  "media_type": 1,
  "user": {
    "screen_name": "MountainButorac",
    "name": "Mountain Butorac",
    "profile_image_url": "https://pbs.twimg.com/profile_images/808318456701521920/vBvlAASx_bigger.jpg"
  },
  "watch_now_cta_url": null,
  "tweet_id": "844505243538931714"
}

从上面的JSON格式,可以看到video_url的值

https://video.twimg.com/ext_tw_video/844504104512749568/pu/pl/e91Du5N2TZ09ZaW_.m3u8

这里的问题是,在2016年8月1日之后,Twitter不再使用.mp4视频,而是转换为新的HLS,自适应流格式,带有.m3u8文件扩展名。

.m3u8文件基本上只是一个文本文的封装,它们非常小(300-500字节)。当您使用文本编辑器打开它们时,它们包含指向不同视频大小的链接

在记事本++(Notepad++)中打开文件m3u8,它会包含这样的代码

EXTM3U EXT-X-INDEPENDENT-SEGMENTS EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=256000,RESOLUTION=180x320,CODECS="mp4a.40.2,avc1.42001f"/ext_tw_video/844504104512749568/pu/pl/180x320/_Z42SY5zwMlLdFYx.m3u8 EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=832000,RESOLUTION=360x640,CODECS="mp4a.40.2,avc1.42001f"/ext_tw_video/844504104512749568/pu/pl/360x640/-Phfjbbx2yinirLi.m3u8

根据您需要的分辨率从上面复制对应的链接。重复相同的步骤,直到有.ts文件。下载.ts文件(视频文件)。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery常用技巧及常用方法列表集合
Apr 06 Javascript
jquery写个checkbox——类似邮箱全选功能
Mar 19 Javascript
Javascript弹出窗口的各种方法总结
Nov 11 Javascript
innerHTML在IE中报错解决方案
Dec 15 Javascript
JavaScript 常见安全漏洞和自动化检测技术
Aug 21 Javascript
AngularJS中的指令全面解析(必看)
May 20 Javascript
再谈javascript注入 黑客必备!
Sep 14 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
Apr 04 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
Oct 17 Javascript
使用JS来动态操作css的几种方法
Dec 18 Javascript
js实现翻牌小游戏
Jul 31 Javascript
JavaScript执行机制详细介绍
Dec 06 Javascript
JavaScript之Blob对象类型的具体使用方法
Nov 29 #Javascript
VuePress 中如何增加用户登录功能
Nov 29 #Javascript
Vue.directive 实现元素scroll逻辑复用
Nov 29 #Javascript
Vue.js实现大屏数字滚动翻转效果
Nov 29 #Javascript
Vue基础配置讲解
Nov 29 #Javascript
jQuery实现弹幕特效
Nov 29 #jQuery
Vue实现多标签选择器
Nov 28 #Javascript
You might like
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
PHPUnit PHP测试框架安装方法
2011/03/23 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
php实现微信分享朋友链接功能
2019/02/18 PHP
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
nodejs 搭建简易服务器的图文教程(推荐)
2017/07/18 NodeJs
Angular4开发解决跨域问题详解
2017/08/28 Javascript
vue的mixins属性详解
2018/03/14 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
使用post方法实现json往返传输数据的方法
2019/03/30 Javascript
基于ssm框架实现layui分页效果
2019/07/27 Javascript
浅谈Python中copy()方法的使用
2015/05/21 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
Jacobi迭代算法的Python实现详解
2019/06/29 Python
如何在Django项目中引入静态文件
2019/07/26 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
药剂学专业应届生自荐信
2013/09/29 职场文书
优秀学生事迹材料
2014/02/08 职场文书
辩论赛主持词
2014/03/18 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
保送生自荐信
2015/03/06 职场文书
运动会加油稿50字
2015/07/21 职场文书
详解Go与PHP的语法对比
2021/05/29 PHP
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers