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.
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
}
}
Vimeo does not offer support for any videos play urls. Vimeo only offers 2 methods for playing videos on mobile.
- Embeddable videos work in many Android web views.
- PRO members have access to direct video file links (including HLS) and can use these in their own mobile apps.
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"
}
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.
To Play Vimeo Video from the iframe
url, use that code. It's working fine.
- Use layout with Web view and frame Layout
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); } } }
来源:https://stackoverflow.com/questions/23042573/get-direct-vimeo-video-url-android