9

I need to play Vimeo viodes in my app having only video id. For example 83342420. How can I get vimeo video url? Or is there any other way to play video in android?

I tried WebView solution but it doesn't suit. I also tried the urls like http://vimeo.com/moogaloop/play/clip:7926539/5cd4f7989ee0cb5018c131260aa1fc8c/1309860388/ but I'm getting 404 Not found. Maybe I need some kind of api key or token?

Thanks.

Andrew F
  • 1,712
  • 2
  • 15
  • 24

5 Answers5

37

Ok. For getting direct url for Vimeo video just need to send GET Request to url:

old url - http://player.vimeo.com/v2/video/<video_id>/config
**UPD**: new url - http://player.vimeo.com/video/<video_id>/config

In result you will get such response:

{
  "cdn_url": "http://f.vimeocdn.com",
  "view": 1,
  "request": {
    "files": {
      "h264": {
        "mobile": {
          "profile": 116,
          "origin": "ns3.pdl",
          "url": "http://pdl.vimeocdn.com/84730/904/216566897.mp4?token2=1397407519_8b323701fa08b3531612d6160be9cc5e&aksessionid=01788ff54890a9b2",
          "height": 270,
          "width": 480,
          "id": 216566897,
          "bitrate": 547,
          "availability": 60
        },
        "hd": {
          "profile": 113,
          "origin": "ns3.pdl",
          "url": "http://pdl.vimeocdn.com/87179/143/216566895.mp4?token2=1397407519_1d0ef28841fb628c423f9dbeb93168d4&aksessionid=2a0b480300c82ef7",
          "height": 720,
          "width": 1280,
          "id": 216566895,
          "bitrate": 3142,
          "availability": 60
        },
        "sd": {
          "profile": 112,
          "origin": "ns3.pdl",
          "url": "http://pdl.vimeocdn.com/57248/568/216566886.mp4?token2=1397407519_395f6cf4e80b98826424e21c8de508d1&aksessionid=598e59776ed0979a",
          "height": 360,
          "width": 640,
          "id": 216566886,
          "bitrate": 1198,
          "availability": 60
        }
      },
      "hls": {
        "all": "http://av20.hls.vimeocdn.com/i/,57248/568/216566886,87179/143/216566895,84730/904/216566897,.mp4.csmil/master.m3u8?primaryToken=1397407519_93cf5d54b3482e3a1e716cf28b9550a7",
        "hd": "http://av20.hls.vimeocdn.com/i/,87179/143/216566895,.mp4.csmil/master.m3u8?primaryToken=1397407519_a84194ace821175f0ee0ff9ab8d9241f"
      },
      "codecs": [
        "h264"
      ]
    },
    "ga_account": "UA-76641-35",
    "timestamp": 1397406594,
    "expires": 925,
    "prefix": "/v2",
    "session": "d85291b3aa5b3e5fbf3ea82d81d7d5e849aa50e5",
    "cookie": {
      "scaling": 1,
      "volume": 1.0,
      "hd": null,
      "captions": null
    },
    "cookie_domain": ".vimeo.com",
    "referrer": null,
    "conviva_account": "c3.Vimeo",
    "flags": {
      "login": 1,
      "preload_video": 1,
      "plays": 1,
      "partials": 1,
      "conviva": 1
    },
    "build": {
      "player": "a30ff35f",
      "js": "2.4.7"
    },
    "urls": {
      "zeroclip_swf": "http://f.vimeocdn.com/p/external/zeroclipboard/ZeroClipboard.swf",
      "js": "http://f.vimeocdn.com/p/2.4.7/js/player.js",
      "proxy": "https://f.vimeocdn.com/p/2.4.7/proxy.html",
      "conviva": "http://livepassdl.conviva.com/ver/2.72.0.13589/LivePass.js",
      "flideo": "http://f.vimeocdn.com/p/flash/flideo/1.0.3b10/flideo.swf",
      "canvas_js": "http://f.vimeocdn.com/p/2.4.7/js/player.canvas.js",
      "moog": "http://f.vimeocdn.com/p/flash/moogaloop/6.0.9/moogaloop.swf?clip_id=83342420",
      "conviva_service": "http://livepass.conviva.com",
      "moog_js": "http://f.vimeocdn.com/p/2.4.7/js/moogaloop.js",
      "zeroclip_js": "http://f.vimeocdn.com/p/external/zeroclipboard/ZeroClipboard-patch.js",
      "css": "http://f.vimeocdn.com/p/2.4.7/css/player.css"
    },
    "signature": "09c6bc41e6a7d343748ed3e00420a108"
  },
  "player_url": "player.vimeo.com",
  "video": {
    "allow_hd": 1,
    "height": 720,
    "owner": {
      "account_type": "pro",
      "name": "Sabian",
      "img": "http://i.vimeocdn.com/portrait/2511583_75x75.jpg",
      "url": "http://vimeo.com/sabian",
      "img_2x": "http://i.vimeocdn.com/portrait/2511583_150x150.jpg",
      "id": 8487062
    },
    "thumbs": {
      "1280": "http://i.vimeocdn.com/video/459788805_1280.jpg",
      "960": "http://i.vimeocdn.com/video/459788805_960.jpg",
      "640": "http://i.vimeocdn.com/video/459788805_640.jpg"
    },
    "duration": 25,
    "id": 83342420,
    "hd": 1,
    "embed_code": "<iframe src=\"//player.vimeo.com/video/83342420\" width=\"500\" height=\"281\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>",
    "default_to_hd": 0,
    "title": "Mike Portnoy",
    "url": "https://vimeo.com/83342420",
    "privacy": "anybody",
    "share_url": "http://vimeo.com/83342420",
    "width": 1280,
    "embed_permission": "public",
    "fps": 24.0
  },
  "build": {
    "player": "a30ff35f",
    "rpc": "dev"
  },
  "embed": {
    "player_id": null,
    "outro": "videos",
    "api": 2,
    "context": "embed.main",
    "time": 0,
    "color": "00adef",
    "settings": {
      "fullscreen": 1,
      "byline_badge": {
        "url": "http://vimeo.com/sabian",
        "type": "pro"
      },
      "byline": 1,
      "like": 1,
      "playbar": 1,
      "title": 1,
      "color": 0,
      "branding": 1,
      "share": 1,
      "scaling": 1,
      "logo": 1,
      "info_on_pause": 0,
      "watch_later": 1,
      "portrait": 1,
      "embed": 1,
      "badge": 0,
      "volume": 1
    },
    "on_site": 0,
    "loop": 0,
    "autoplay": 0
  },
  "vimeo_url": "vimeo.com",
  "user": {
    "liked": 0,
    "account_type": "basic",
    "logged_in": 1,
    "owner": 0,
    "watch_later": 0,
    "id": 26896968,
    "mod": false
  }
}
Andrew F
  • 1,712
  • 2
  • 15
  • 24
  • 4
    Vimeo does not support, nor recommend using these urls. They will change without any prior notification, and will change without any promise of a viable replacement for your needs. – Dashron Apr 14 '14 at 18:05
  • This works pretty well. Is there a way to get a 4k video address for videos that are in 4k? Thanks. – casolorz Dec 12 '16 at 20:17
4

Vimeo does not offer support for any videos play urls. Vimeo only offers 2 methods for playing videos on mobile.

  1. Embeddable videos work in many Android web views.
  2. PRO members have access to direct video file links (including HLS) and can use these in their own mobile apps.
Dashron
  • 3,968
  • 2
  • 14
  • 21
  • Android web views sometimes can't use autopay feature. And some other bad features. However I posted answer. Thanks! – Andrew F Apr 14 '14 at 18:09
  • @dashron Can you expand on point 2? I have the same need in our Xamarin (cross platform) application. – Chase Florell Apr 23 '14 at 20:12
  • When you request a video, you will see a "files" key if two conditions are met. 1. The authenticated user is the owner of the video. 2. The authenticated user is a PRO subscriber. – Dashron Apr 24 '14 at 14:56
  • @Dashron you have mentioned in your 2nd point: PRO members have access to direct video file links. As I know Vimeo does not support, nor recommend using URLs . Do they change URLs without any prior notification even for PRO members? – Jyo Oct 12 '20 at 03:31
  • @jyo I would recommend you reach out to Vimeo's support staff for help. I am no longer up to date on Vimeo's API. – Dashron Oct 13 '20 at 10:15
  • 2
    How do pro members get access to the URLS for their private videos using the API? – Scorb Dec 03 '20 at 17:06
1

use this url - http://player.vimeo.com/video/video_id/config with GET method, and pass your video_id, you will get the below result. this is latest response is coming from Vimeo, because the change response.

{
  "cdn_url": "https://f.vimeocdn.com",
  "vimeo_api_url": "api.vimeo.com",
  "request": {
    "files": {
      "dash": {
        "separate_av": true,
        "streams": [
          {
            "profile": 164,
            "quality": "360p",
            "id": 1047687609,
            "fps": 30
          },
          {
            "profile": 175,
            "quality": "1080p",
            "id": 1047687611,
            "fps": 30
          },
          {
            "profile": 165,
            "quality": "540p",
            "id": 1047687607,
            "fps": 30
          },
          {
            "profile": 174,
            "quality": "720p",
            "id": 1047687604,
            "fps": 30
          }
        ],
        "cdns": {
          "akfire_interconnect_quic": {
            "url": "https://112skyfiregce-vimeo.akamaized.net/exp=1531572843~acl=%2F279620511%2F%2A~hmac=fc67765d21d06ae32cd69b0fa7a9f229ba5c492a6ea14d14cfee32fce9afb1a2/279620511/sep/video/1047687609,1047687611,1047687607,1047687604/master.json?base64_init=1",
            "origin": "gcs"
          },
          "fastly_skyfire": {
            "url": "https://skyfire.vimeocdn.com/1531572843-0xb2b233940673f62145704b412d1469ea2f179a4c/279620511/sep/video/1047687609,1047687611,1047687607,1047687604/master.json?base64_init=1",
            "origin": "gcs"
          }
        },
        "default_cdn": "akfire_interconnect_quic"
      },
      "hls": {
        "separate_av": false,
        "default_cdn": "akfire_interconnect_quic",
        "cdns": {
          "akfire_interconnect_quic": {
            "url": "https://112skyfiregce-vimeo.akamaized.net/exp=1531572843~acl=%2F279620511%2F%2A~hmac=fc67765d21d06ae32cd69b0fa7a9f229ba5c492a6ea14d14cfee32fce9afb1a2/279620511/video/1047687609,1047687611,1047687607,1047687604/master.m3u8",
            "origin": "gcs"
          },
          "fastly_skyfire": {
            "url": "https://skyfire.vimeocdn.com/1531572843-0xb2b233940673f62145704b412d1469ea2f179a4c/279620511/video/1047687609,1047687611,1047687607,1047687604/master.m3u8",
            "origin": "gcs"
          }
        }
      },
      "progressive": [
        {
          "profile": 175,
          "width": 1920,
          "mime": "video/mp4",
          "fps": 30,
          "url": "https://gcs-vimeo.akamaized.net/exp=1531572843~acl=%2A%2F1047687611.mp4%2A~hmac=90eacf4c4956f322393ac1b5e4d0df91694c5e5af36eabccd2a28780e4364148/vimeo-prod-skyfire-std-us/01/924/11/279620511/1047687611.mp4",
          "cdn": "akamai_interconnect",
          "quality": "1080p",
          "id": 1047687611,
          "origin": "gcs",
          "height": 1080
        },
        {
          "profile": 164,
          "width": 640,
          "mime": "video/mp4",
          "fps": 30,
          "url": "https://gcs-vimeo.akamaized.net/exp=1531572843~acl=%2A%2F1047687609.mp4%2A~hmac=4c90608f99044633906efb33f04e314569cd865266529b96977ee7eeecce4f80/vimeo-prod-skyfire-std-us/01/924/11/279620511/1047687609.mp4",
          "cdn": "akamai_interconnect",
          "quality": "360p",
          "id": 1047687609,
          "origin": "gcs",
          "height": 360
        },
        {
          "profile": 165,
          "width": 960,
          "mime": "video/mp4",
          "fps": 30,
          "url": "https://gcs-vimeo.akamaized.net/exp=1531572843~acl=%2A%2F1047687607.mp4%2A~hmac=a0f28428ec2da33b5501936f32a3bc17aee0446dfbb5f0597c5b51f743cebc65/vimeo-prod-skyfire-std-us/01/924/11/279620511/1047687607.mp4",
          "cdn": "akamai_interconnect",
          "quality": "540p",
          "id": 1047687607,
          "origin": "gcs",
          "height": 540
        },
        {
          "profile": 174,
          "width": 1280,
          "mime": "video/mp4",
          "fps": 30,
          "url": "https://gcs-vimeo.akamaized.net/exp=1531572843~acl=%2A%2F1047687604.mp4%2A~hmac=6a3da45344051eb54196967bebebbd34841f09c049ca377b7f664786f24dfb95/vimeo-prod-skyfire-std-us/01/924/11/279620511/1047687604.mp4",
          "cdn": "akamai_interconnect",
          "quality": "720p",
          "id": 1047687604,
          "origin": "gcs",
          "height": 720
        }
      ]
    },
    "lang": "en",
    "sentry": {
      "url": "https://9e9ab33f1870463393a4a1e85a1280c2@sentry.cloud.vimeo.com/2",
      "enabled": false,
      "debug_enabled": true,
      "debug_intent": 0
    },
    "ab_tests": {},
    "referrer": null,
    "cookie_domain": ".vimeo.com",
    "timestamp": 1531568943,
    "gc_debug": {
      "bucket": "vimeo-player-debug"
    },
    "expires": 3600,
    "currency": "USD",
    "session": "d2a0f4ba2c4a97b7e59e349e54ee5e4d212a78b01531568943",
    "cookie": {
      "scaling": 1,
      "volume": 1,
      "quality": null,
      "hd": 0,
      "captions": null
    },
    "build": {
      "player": "",
      "js": "2.75.6"
    },
    "urls": {
      "zeroclip_swf": "https://f.vimeocdn.com/p/external/zeroclipboard/ZeroClipboard.swf",
      "fresnel": "https://fresnel.vimeocdn.com/add/player-stats",
      "js": "https://f.vimeocdn.com/p/2.75.6/js/player.js",
      "proxy": "https://player.vimeo.com/static/proxy.html",
      "chromeless_css": "https://f.vimeocdn.com/p/2.75.6/css/chromeless.css",
      "flideo": "https://f.vimeocdn.com/p/flash/flideo/1.0.6/flideo.swf",
      "moog": "https://f.vimeocdn.com/p/flash/moogaloop/6.4.5/moogaloop.swf?clip_id=279620511",
      "three_js": "https://f.vimeocdn.com/p/external/three.rvimeo.min.js",
      "mux_url": "https://f.vimeocdn.com/p/external/mux.js",
      "vuid_js": "https://f.vimeocdn.com/js_opt/modules/utils/vuid.min.js",
      "chromeless_js": "https://f.vimeocdn.com/p/2.75.6/js/chromeless.js",
      "moog_js": "https://f.vimeocdn.com/p/2.75.6/js/moogaloop.js",
      "zeroclip_js": "https://f.vimeocdn.com/p/external/zeroclipboard/ZeroClipboard-patch.js",
      "css": "https://f.vimeocdn.com/p/2.75.6/css/player.css"
    },
    "signature": "8544b7e2ca11afdca19cef76f57fed72",
    "flags": {
      "dnt": 0,
      "preload_video": "metadata_on_hover",
      "plays": 1,
      "webp": 0,
      "flash_hls": 1,
      "log_to_es": 0,
      "partials": 1,
      "autohide_controls": 0
    },
    "country": "IN"
  },
  "player_url": "player.vimeo.com",
  "video": {
    "version": {
      "current": null,
      "available": [
        {
          "is_current": 1,
          "id": 20743507,
          "file_id": 1047687416
        }
      ]
    },
    "height": 1080,
    "duration": 543,
    "thumbs": {
      "640": "https://i.vimeocdn.com/video/712935666_640.jpg",
      "960": "https://i.vimeocdn.com/video/712935666_960.jpg",
      "1280": "https://i.vimeocdn.com/video/712935666_1280.jpg",
      "base": "https://i.vimeocdn.com/video/712935666"
    },
    "owner": {
      "account_type": "pro",
      "name": "You Are a CEO",
      "img": "https://i.vimeocdn.com/portrait/26028985_60x60.jpg",
      "url": "https://vimeo.com/user19222589",
      "img_2x": "https://i.vimeocdn.com/portrait/26028985_120x120.jpg",
      "id": 19222589
    },
    "file_codecs": {
      "hevc": {
        "hdr": [],
        "sdr": []
      },
      "avc": [
        1047687611,
        1047687609,
        1047687607,
        1047687604
      ]
    },
    "id": 279620511,
    "embed_code": "<iframe src=\"https://player.vimeo.com/video/279620511\" width=\"640\" height=\"360\" frameborder=\"0\" allowfullscreen></iframe>",
    "title": "DRAFT- MINTSHOW TO UPLIFT",
    "share_url": "https://vimeo.com/279620511",
    "width": 1920,
    "embed_permission": "public",
    "fps": 30,
    "spatial": 0,
    "live_event": null,
    "allow_hd": 1,
    "hd": 1,
    "lang": null,
    "default_to_hd": 0,
    "url": null,
    "privacy": "unlisted",
    "unlisted_hash": "1795b097a5"
  },
  "user": {
    "vimeo_api_interaction_tokens": null,
    "liked": 0,
    "account_type": "none",
    "vimeo_api_client_token": null,
    "progress": 0,
    "owner": 0,
    "watch_later": 0,
    "logged_in": 0,
    "id": 0,
    "mod": 0
  },
  "embed": {
    "autopause": 1,
    "playsinline": 1,
    "settings": {
      "fullscreen": 1,
      "byline": 1,
      "like": 1,
      "playbar": 1,
      "title": 1,
      "color": 0,
      "branding": 1,
      "watch_later": 1,
      "share": 0,
      "scaling": 1,
      "spatial_compass": 1,
      "collections": 0,
      "info_on_pause": 0,
      "portrait": 1,
      "logo": 1,
      "embed": 1,
      "badge": 0,
      "spatial_label": 1,
      "speed": 0,
      "volume": 1
    },
    "color": "00adef",
    "on_site": 0,
    "app_id": "",
    "muted": 0,
    "dnt": 0,
    "player_id": "",
    "api": 3,
    "editor": false,
    "context": "embed.main",
    "time": 0,
    "outro": "videos",
    "log_plays": 1,
    "quality": null,
    "transparent": 1,
    "loop": 0,
    "autoplay": 0
  },
  "view": 1,
  "vimeo_url": "vimeo.com"
}
Lovekush Vishwakarma
  • 3,035
  • 23
  • 25
0

Going off of what Andrew F had commented, I wrote this simple Javascript to handle this process:

function loadVimeoVideo(id) {
    'use strict';
    var req, json, url;
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        req = new XMLHttpRequest();
    } else { // code for IE6, IE5
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    req.onreadystatechange = function () {
        if (req.readyState === 4 && req.status === 200) {
            json = JSON.parse(req.responseText);
            url = json.request.files.h264.sd.url;
            document.getElementById(id).getElementsByTagName("source")[0].setAttribute("src",url);
        }
    };
    req.open("GET", ("https://player.vimeo.com/video/").concat(id, "/config"), true);
    req.send();
}

The setup in Html looks like this:

<video id="YOURVIMEOIDHERE" controls loop muted preload="auto" autoplay="false" onloadeddata="loadVimeoVideo('YOURVIMEOIDHERE')">
    <source src="" type="video/mp4" />
    Your browser does not support the video tag, which was introduced in html5.
</video>

Edit: I'm just going to say it, remember to replace YOURVIMEOIDHERE with your Vimeo video's id.

0

To Play Vimeo Video from the iframe url, use that code. It's working fine.

  1. Use layout with Web view and frame Layout
  2. Create a custom WebViewClient for Both ChromeClient and WebViewClient and Play video either using Loadurl or LoadBaseUrl .

    {
    
    enter code here
    
        webView = (WebView) findViewById(R.id.web_details);
        mWebViewClient = new myWebViewClient();
        webView.setWebViewClient(mWebViewClient);
        mWebChromeClient = new myWebChromeClient();
        webView.setWebChromeClient(mWebChromeClient);     
        WebSetting settings = webView.getSetting();
        settings.setJavaScriptEnabled(true);
        settings.setDomStorageEnabled(true);
        settings.setMinimumFontSize(10);
        settings.setLoadWithOverviewMode(true);
        settings.setUseWideViewPort(true);
        settings.setBuiltInZoomControls(true);
        settings.setDisplayZoomControls(false);
        webView.setVerticalScrollBarEnabled(false);
        vUrl = changedHeaderHtml(getIntent().getStringExtra("videoUrl"));
        webView.loadDataWithBaseURL(null, vUrl, "text/html", "UTF-8", null);
    }
    public static String changedHeaderHtml(String strUrl) {
        return "<head><meta name=\"viewport\" content=\"width=device-width, user-scalable=yes\" /></head>" + strUrl + "</body></html>";
    }
    public boolean inCustomView() {
        return (mCustomView != null);
    }
    
    public void hideCustomView() {
        mWebChromeClient.onHideCustomView();
    }
    
    @Override
    protected void onPause() {
        super.onPause();    //To change body of overridden methods use File | Settings | File Templates.
        webView.onPause();
    }
    
    @Override
    protected void onResume() {
        super.onResume();    //To change body of overridden methods use File | Settings | File Templates.
        webView.onResume();
    }
    
    @Override
    protected void onStop() {
        super.onStop();    //To change body of overridden methods use File | Settings | File Templates.
        if (inCustomView()) {
            hideCustomView();
        }
    }
    
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
    
            if (inCustomView()) {
                hideCustomView();
                return true;
            }
    
            if ((mCustomView == null) && webView.canGoBack()) {
                webView.goBack();
                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
     }
    
    class myWebChromeClient extends WebChromeClient {
        private Bitmap mDefaultVideoPoster;
        private View mVideoProgressView;
    
        @Override
     public void onShowCustomView(View view, int requestedOrientation,CustomViewCallback callback) {
            onShowCustomView(view, callback); //To change body of overridden methods use File | Settings | File Templates.
        }
    
        @Override
        public void onShowCustomView(View view,CustomViewCallback callback) {
    
        // if a view already exists then immediately terminate the new one
            if (mCustomView != null) {
                callback.onCustomViewHidden();
                return;
            }
            mCustomView = view;
            webView.setVisibility(View.GONE);
            customViewContainer.setVisibility(View.VISIBLE);
            customViewContainer.addView(view);
            customViewCallback = callback;
        }
    
        @Override
        public View getVideoLoadingProgressView() {
    
            if (mVideoProgressView == null) {
                LayoutInflater inflater = LayoutInflater.from(WebMainActivity.this);
                mVideoProgressView = inflater.inflate(R.layout.video_progress, null);
            }
            return mVideoProgressView;
        }
    
        @Override
        public void onHideCustomView() {
            super.onHideCustomView();    //To change body of overridden methods use File | Settings | File Templates.
            if (mCustomView == null)
                return;
    
            webView.setVisibility(View.VISIBLE);
            customViewContainer.setVisibility(View.GONE);
    
            // Hide the custom view.
            mCustomView.setVisibility(View.GONE);
    
            // Remove the custom view from its container.
            customViewContainer.removeView(mCustomView);
            customViewCallback.onCustomViewHidden();
    
            mCustomView = null;
        }
    }
    
    class myWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            url =vUrl;
    
            return super.shouldOverrideUrlLoading(view, url);  
        }
    }
    
    }
    
Ishita Sinha
  • 2,168
  • 4
  • 25
  • 38