2016-07-27 11 views
1

Gibt es eine andere Möglichkeit, Youtube-Videos in einer Android-App zu spielen, ohne die Android Youtube-API zu verwenden? Wir haben bereits eine Lösung implementiert, die die genannte API verwendet, aber auf einigen Geräten muss die Youtube-App-Version heruntergestuft werden, um das Video abzuspielen. Ich habe bereits in Github nach möglichen Bibliotheken gesucht, die ich verwenden kann, aber die meisten sind abhängig von Android Youtube API. Auch versucht, mit WebView einzubetten, aber manchmal stürzt es ab.Youtube-Video in einer Android-App ohne Android Youtube-API abspielen

Ich bin der Umsetzung eine andere Lösung durch ein Ergebnis aus http://www.youtube.com/get_video_info?&video_id=p3ND_O6YYg4 Parsen und den Wert für „dashmpd“, dann laden Sie den Wert von „dashmpd“ und das Ergebnis bekommen in Android Videoview als Quelle verwendet werden, aber es hat keinen Ton. Ich habe festgestellt, dass Video und Audio unterschiedliche Quellen haben.

Vielen Dank im Voraus!

Antwort

4

Wenn Sie wirklich mit Youtube iframe innerhalb Webview gehen wollen statt YoutubePlayerFragment, müssen Sie einige Arbeit zu "re-Code" der YouTube-Player-Steuerschicht für Mobile in WebView (Bildschirmgröße/keycode etc ...).

Ich habe ein funktionierendes Beispiel gemacht, dass Sie beginnen erhalten helfen kann:

AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.yourpackage.name"> 

    <uses-permission android:name="android.permission.INTERNET" /> 

    <application 
     android:allowBackup="true" 
     android:hardwareAccelerated="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true"> 

     <activity 
      android:name="com.yourpackage.name.YoutubeActivity" 
      android:label="@string/app_name"> 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

     </activity> 

    </application> 

</manifest> 

Neben, Sie sagten, Sie auf Weview einige Absturz mit Youtube iframe hatte, vielleicht haben Sie didn ‚t gesetzt android:hardwareAccelerated="true" wie oben

youtube.html in src/main/assets Ordner:

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 
    <title></title> 

    <style type="text/css"> 

    iframe { 
     position: absolute; 
     border: none; 
     box-sizing: border-box; 
     width: 100%; 
     height: 100%; 
    } 
    </style> 

    <script> 

    var player; 

    // init player 
    function onYouTubeIframeAPIReady() { 
     player = new YT.Player('player', { 
     height: '1080', 
     width: '1920', 
     //videoId: 'Orw8CZpzIDU', 
     suggestedQuality: 'hd720', 
     playerVars: {rel: 0,showinfo:0}, 
     events: { 
      'onReady': onPlayerReady, 
      'onStateChange': onPlayerStateChange 
     } 
     }); 

    } 

    function loadVideo(target){ 
     target.loadVideoById('Orw8CZpzIDU', 0, 'hd720'); 
    } 

    function onPlayerStateChange(event) { 

     var playbackQuality = event.target.getPlaybackQuality(); 
     var suggestedQuality = 'hd720'; 

     console.log("Quality changed to: " + playbackQuality); 

     if(playbackQuality !== 'hd720') { 
      console.log("Setting quality to " + suggestedQuality); 
      event.target.setPlaybackQuality(suggestedQuality); 
     } 

     console.log(event.data + " et " + YT.PlayerState.PLAYING); 
    } 

    // when ready, wait for clicks 
    function onPlayerReady(event) { 
     event.target.setPlaybackQuality('hd720'); 
     var player = event.target; 
     loadVideo(player); 
     return false; 
    } 

    </script> 
</head> 

<body id="body"> 

    <div id="video_div"> 

    <script src="https://www.youtube.com/iframe_api"></script> 

    <div id="bottom"> 
     <div id="player"></div> 
    </div> 

    </div> 

</body> 

</html> 

Und YoutubeActivity.java:

public class YoutubeActivity extends Activity { 

    private WebView webview; 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     webview.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     webview.onResume(); 
     super.onResume(); 
    } 

    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     webview = new WebView(this); 
     setContentView(webview); 

     final WebSettings settings = webview.getSettings(); 
     settings.setJavaScriptEnabled(true); 
     settings.setJavaScriptCanOpenWindowsAutomatically(true); 
     settings.setPluginState(WebSettings.PluginState.ON); 
     settings.setLoadWithOverviewMode(true); 
     settings.setUseWideViewPort(true); 

     webview.setWebChromeClient(new WebChromeClient()); 
     webview.setPadding(0, 0, 0, 0); 

     webview.loadUrl("file:///android_asset/youtube.html"); 
    } 

} 
+0

Dank! Ich werde versuchen, die WebSetting wie Ihre zu implementieren, aber der meiste Code in Manifest-Datei und HTML-Datei sind bereits identisch. Ich hoffe, es funktioniert. – jzarsuelo

+0

Genymotion verursacht das Problem. Laden eines eingebetteten Youtube-Videos in die WebView-Ergebnisse von Android zum Absturz von Genymotion. Ich habe versucht, AVD und ein tatsächliches Gerät zu verwenden, um diesen Ansatz zu testen, und es funktioniert gut. – jzarsuelo

+0

möglicherweise verwandt: http://stackoverflow.com/questions/28218497/youtube-not-working-on-genymotion-android-4-2-2-and-4-4-4 –

Verwandte Themen