2016-07-27 2 views
1

Есть ли другой способ воспроизведения видео Youtube в приложении для Android без использования API Youtube для Android? Мы уже реализовали решение с использованием упомянутого API, но на каком-то устройстве ему требуется понизить версию приложения Youtube для воспроизведения видео. Я уже искал в Github для возможной библиотеки, которую я могу использовать, но большинство из них зависит от Android Youtube API. Также попытался внедрить его с помощью WebView, но иногда он падает.Воспроизведение видео Youtube в приложении для Android без использования API Youtube для Android

Я реализует другое решение путем анализа результата от http://www.youtube.com/get_video_info?&video_id=p3ND_O6YYg4 и получить значение «dashmpd», а затем загрузить значение «dashmpd», и результат может быть использован в качестве источника в VideoView Android, но у него нет звука. Я заметил, что видео и аудио имеют разные источники.

Заранее благодарен!

ответ

4

Если вы действительно хотите идти с Youtube iframe внутри Webview вместо YoutubePlayerFragment, вы будете иметь какую-то работу, чтобы «перекодировать» контроль уровня Youtube плеер для мобильных устройств в WebView (размер экрана/скан и т.д ...).

Я сделал рабочий пример, который может помочь вам получить начать с:

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> 

Кроме, вы сказали, что некоторые аварии с помощью Youtube IFRAME на Weview, может быть, вы Бесполезный «т установить android:hardwareAccelerated="true" как выше

youtube.html в src/main/assets папке:

<!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> 

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

Спасибо! Я попытаюсь реализовать WebSetting так же, как ваш, но большая часть кода в файле манифеста и html-файлах уже одинакова. Надеюсь это работает. – jzarsuelo

+0

Гениотия вызывает проблему. Загрузка встроенного видео youtube в результаты WebView от Android в Genymotion для сбоя. Я попытался использовать AVD и фактическое устройство для тестирования этого подхода, и он отлично работает. – jzarsuelo

+0

возможно связанный: с http://stackoverflow.com/questions/28218497/youtube-not-working-on-genymotion-android-4-2-2-and-4-4-4 –

Смежные вопросы