2013-04-30 11 views
6

Używam Youtube Android Player API jak opisano tutaj: https://developers.google.com/youtube/android/player/wielu graczy YouTube w jednej czynności

Jednak nie mogę dostać więcej niż jeden film w mojej działalności na raz. Próbowałem po prostu umieszczenie dwóch YouTubePlayerViews do aktywności tak:

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" > 

    <com.google.android.youtube.player.YouTubePlayerView 
     android:id="@+id/view_one" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <com.google.android.youtube.player.YouTubePlayerView 
     android:id="@+id/view_two" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

MainActivity.java

package com.example.multidemo; 

import android.os.Bundle; 

import com.google.android.youtube.player.YouTubeBaseActivity; 
import com.google.android.youtube.player.YouTubeInitializationResult; 
import com.google.android.youtube.player.YouTubePlayer; 
import com.google.android.youtube.player.YouTubePlayer.Provider; 
import com.google.android.youtube.player.YouTubePlayerView; 

public class MainActivity extends YouTubeBaseActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ((YouTubePlayerView) findViewById(R.id.view_one)).initialize("API key", new YouTubePlayer.OnInitializedListener() { 
      @Override 
      public void onInitializationSuccess(Provider arg0, YouTubePlayer arg1, boolean arg2) { 
       arg1.cueVideo("RpwoN_XlN6Y"); 
      } 

      @Override 
      public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { 
      } 
     }); 

     ((YouTubePlayerView) findViewById(R.id.view_two)).initialize("API key", new YouTubePlayer.OnInitializedListener() { 
      @Override 
      public void onInitializationSuccess(Provider arg0, YouTubePlayer arg1, boolean arg2) { 
       arg1.cueVideo("jkk2mMq2x8E"); 
      } 

      @Override 
      public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { 
      } 
     }); 
    } 
} 

Kiedy próbuję to pierwszy widok po prostu pojawia się czarny , podczas gdy drugi wideo ładuje. Jeśli skomentuję kod w onCreate() dla drugiego filmu, zostanie załadowany tylko pierwszy film.

Czy istnieje sposób na włączenie wielu funkcji YouTubePlayerViews w to samo działanie?

+0

proszę zobaczyć http://stackoverflow.com/questions/17117164 –

+0

to jest moje problem też ... proszę, pomóż nam. – Cristiana214

Odpowiedz

2

To może być zbyt późno na odpowiedź, ale ostatnio miałem ten sam problem. Mam nadzieję, że to pomoże komuś, kto może zmierzyć się z tym samym problemem. Sztuką do obejścia tego jest użycie YoutubePlayerFragments zamiast tego. Dopóki korzystasz z widoku odtwarzacza YouTube, osiągniesz limit nałożony tylko na jedną inicjalizację wykonaną z wielu żądań. Zazwyczaj inicjalizacja kończy się sukcesem.

Zakończyłem dynamicznie generując gridlayout i umieszczając mój (dynamicznie wygenerowany) fragment fragmentu w każdej z komórek. A potem inicjalizuję instancję odtwarzacza wewnątrz Resume. Gdy inicjalizacja się powiedzie, dostaniesz uchwyt do odtwarzacza i możesz losowo wskazać różne filmy na fragmentach.

Ja po prostu wkleić kod, który daje wyobrażenie o tym, jak jestem konstruowaniu fragmenty i robi inicjalizacji:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) 
{ 
    mLogger.i("Preparing Youtube view for fragment .."); 
    mFragmentHeight = CustomFragment.getFragmentHeight(mNumScreens,mNumColumns); 
    mFragmentWidth = CustomFragment.getFragmentWidth(mNumColumns); 

    LinearLayout linearLayout = new LinearLayout(getActivity()); 
    GridLayout.LayoutParams gridparams = new GridLayout.LayoutParams(); 
    gridparams.rowSpec = GridLayout.spec(mGridRow); 
    gridparams.columnSpec = GridLayout.spec(mGridColumn); 
    gridparams.height = mFragmentHeight; 
    gridparams.width = mFragmentWidth; 
    linearLayout.setLayoutParams(gridparams); 
    if(YouTubeApiServiceUtil.isYouTubeApiServiceAvailable(getActivity())== 
      YouTubeInitializationResult.SUCCESS) 
    { 
     View ytView = super.onCreateView(inflater, container, savedInstanceState); 
     linearLayout.addView(ytView); 
    } 
    else 
     mLogger.e("Either youtube service is down," + 
       " or you dont have required version of YouTube app .." + 
       "\nYouTube Fragment will not work as expected.."); 
    mView = linearLayout; 
    mLogger.i("Preparation youtube view for fragment complete.."); 
    return mView; 
} 

@Override 
public void onInitializationFailure(Provider arg0, 
     YouTubeInitializationResult arg1) 
{ 
    mLogger.e("Youtube player initialization failed"); 
} 

@Override 
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, 
      boolean wasRestored) 
{ 
    mLogger.i("You tube player initialized successfully.. will attempt to stream.."); 
    mYoutubePlayer = player; 
    setListeners(); 
    try 
    { 
     if (!wasRestored) 
     { 
      if(mPlayListFragment) 
       player.loadPlaylist(getResourceID()); 
      else 
       player.loadVideo(getResourceID()); 
     } 
    } 
    catch(Exception e) 
    { 
     mLogger.e("Error loading playlist/video .."+e); 
    } 

} 

public void onResume() 
{ 
    super.onResume(); 
    initialize(API_KEY, this); 
} 
+0

Czy możesz pokazać mi swój kod? Próbuję umieścić YoutubePlayerFragment także w postaci gridlayout. – pldimitrov

+0

Po prostu wklejam kod, który da ci wyobrażenie o tym, jak konstruuję fragmenty i dokonuję inicjalizacji. Zobacz moją edycję powyżej, aby uzyskać pomysł. Pamiętaj, że to nie jest kompletna odpowiedź, tylko pomysł, który może pomóc komuś w obliczu problemu: – GodOnScooter

+0

witam. Mam podobną rzecz, ale problem polega na tym, że ekran pozostaje pusty. Nawet inicjalizacja zakończyła się sukcesem i zaczyna się odtwarzanie wideo, ale nie widzę podglądu wideo. możesz pomóc, jak to pokazać. lub udostępnić nieco więcej kodu. dzięki. –

Powiązane problemy