2014-04-13 18 views
6

Ho bisogno di riprodurre i viodi di Vimeo nella mia app con solo ID video. Ad esempio 83342420. Come posso ottenere l'url video di vimeo? O c'è un altro modo per riprodurre video in Android?Ottieni video Vimeo url Android

Ho provato la soluzione WebView ma non è adatta. Ho anche provato gli URL come http://vimeo.com/moogaloop/play/clip:7926539/5cd4f7989ee0cb5018c131260aa1fc8c/1309860388/ ma sto ricevendo 404 Non trovato. Forse ho bisogno di qualche tipo di chiave o token?

Grazie.

risposta

26

Ok. Per ottenere URL diretto per il video Vimeo solo bisogno di inviare richiesta GET all'URL:

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

Nel risultato si otterrà tale risposta:

{ 
    "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 
    } 
} 
+2

Vimeo non supporta né consiglia di utilizzare questi URL. Cambieranno senza alcuna notifica preventiva e cambieranno senza alcuna promessa di una valida sostituzione per le tue esigenze. – Dashron

+0

Funziona piuttosto bene. C'è un modo per ottenere un indirizzo video 4k per i video che sono in 4K? Grazie. – casolorz

1

Vimeo non offre il supporto per qualsiasi video giochi URL. Vimeo offre solo 2 metodi per riprodurre video su dispositivi mobili.

  1. I video incorporabili funzionano in molte visualizzazioni Web Android.
  2. I membri PRO hanno accesso ai collegamenti diretti ai file video (incluso HLS) e possono utilizzarli nelle proprie app mobili.
+0

Le visualizzazioni Web Android a volte non possono utilizzare la funzione di autopay. E alcune altre cattive caratteristiche. Comunque ho postato la risposta. Grazie! –

+0

@dashron Puoi espandere il punto 2? Ho lo stesso bisogno nella nostra applicazione Xamarin (multipiattaforma). –

+0

Quando si richiede un video, verrà visualizzato un tasto "file" se sono soddisfatte due condizioni. 1. L'utente autenticato è il proprietario del video. 2. L'utente autenticato è un abbonato PRO. – Dashron

0

Andando fuori di ciò che Andrew F aveva commentato, ho scritto questo semplice Javascript per gestire questo processo:

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(); 
} 

Il setup in HTML si presenta così:

<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: Lo dirò, ricorda di sostituire YOURVIMEOIDHERE con l'id del video di Vimeo.

+1

questo non funziona per me a causa di Access-Control-Allow-Origin. – vacetahanna

+0

@ user2267730 ciao come hai risolto il tuo problema con la condivisione – Erum

0

Per riprodurre video Vimeo dall'URL iframe, utilizzare tale codice. Funziona bene.

  1. utilizzare il layout con visualizzazione Web e Layout telaio
  2. Crea una WebViewClient personalizzata per entrambe le ChromeClient e WebViewClient and Play il video sia usando loadURL o 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); 
        } 
    } 
    
    } 
    
+0

non hai notato "Ho provato la soluzione WebView ma non è adatta." in questione? –

+0

sì, ma funziona bene se si trova un altro modo in cui posts pls qui –

+0

utilizzando webview non è una buona soluzione da utilizzare nell'app Android. dai un'occhiata alla risposta per i dettagli. –

Problemi correlati