API de YouTube para Android: YouTubePlayerFragment loading spinner

Estoy utilizando las muestras de la API de YouTube de Android para crear un reproductor de YouTube sin cromo en mi aplicación. Tengo un problema que la barra de progreso de almacenamiento en búfer / carga continúa mostrando sobre mi vídeo incluso después de haber cargado y comenzado a jugar. Puedo reproducir esto en el FragmentDemoActivity muestra con un par de pequeñas modificaciones:

 public class FragmentDemoActivity extends AppCompatActivity implements YouTubePlayer.OnInitializedListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragments_demo); YouTubePlayerFragment youTubePlayerFragment = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_fragment); youTubePlayerFragment.initialize(DeveloperKey.DEVELOPER_KEY, this); } @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { if (!wasRestored) { player.setPlayerStyle(YouTubePlayer.PlayerStyle.CHROMELESS); player.loadVideo("nCgQDjiotG0", 10); } } @Override public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {} } 

He cambiado FragmentDemoActivity a heredar de AppCompatActivity lugar de YouTubeFailureRecoveryActivity , como la documentación dice que está bien hacer. También he cambiado el estilo del jugador para ser sin cromo en onInitializationSuccess . Por último, he cambiado cueVideo a loadVideo , sólo para activar el juego automático.

Esto ocurre en varios dispositivos, incluyendo Nexus 5X. Estoy usando la biblioteca versión 1.2.2. No se desencadena ningún error en onInitializationFailure .

El video comienza a reproducirse después del almacenamiento en búfer. El jugador es sin cromo. Sin embargo, el spinner tampón nunca desaparece. ¿Es esto un error, o estoy haciendo algo que no se me permite hacer?

Me encontré con esto también, realmente se parece a un error. Aquí es cómo me las arreglé para trabajar alrededor de él.

En su onInitializationSuccess , establezca un PlaybackEventListener en el player . onBuffering el onBuffering y haga algo como esto:

 ViewGroup ytView = (ViewGroup)ytPlayerFragment.getView(); ProgressBar progressBar; try { // As of 2016-02-16, the ProgressBar is at position 0 -> 3 -> 2 in the view tree of the Youtube Player Fragment ViewGroup child1 = (ViewGroup)ytView.getChildAt(0); ViewGroup child2 = (ViewGroup)child1.getChildAt(3); progressBar = (ProgressBar)child2.getChildAt(2); } catch (Throwable t) { // As its position may change, we fallback to looking for it progressBar = findProgressBar(ytView); // TODO I recommend reporting this problem so that you can update the code in the try branch: direct access is more efficient than searching for it } int visibility = isBuffering ? View.VISIBLE : View.INVISIBLE; if (progressBar != null) { progressBar.setVisibility(visibility); // Note that you could store the ProgressBar instance somewhere from here, and use that later instead of accessing it again. } 

El método findProgressBar , que se utiliza como findProgressBar en caso de que cambie el código de YouTube:

 private ProgressBar findProgressBar(View view) { if (view instanceof ProgressBar) { return (ProgressBar)view; } else if (view instanceof ViewGroup) { ViewGroup viewGroup = (ViewGroup)view; for (int i = 0; i < viewGroup.getChildCount(); i++) { ProgressBar res = findProgressBar(viewGroup.getChildAt(i)); if (res != null) return res; } } return null; } 

Esta solución funciona perfectamente para mí, permitiendo la ProgressBar cuando el reproductor está almacenando en búfer y desactivándolo cuando no lo está.

EDIT: Si alguien que usa esta solución descubre que este error ha sido corregido o que la posición de la ProgressBar ha cambiado, por favor comparta para que pueda editar mi respuesta, gracias!

  • No se pueden reproducir algunos vídeos de Youtube con la API de reproductor de YouTube para Android
  • Cómo actualizar Youtube Player View onItemClickListener () en un ListView
  • Valor "href" en HTML para abrir el video en la aplicación de YouTube o el mercado (Google Play) en Android
  • Youtube SDK se bloquea con DeadObjectException cuando se mueve a la aplicación de youtube
  • Android Obtener enlace de video desde youtube
  • Reproducción de vídeos de YouTube desde una vista web
  • ¿Utilizar YouTube Android API sin la aplicación de YouTube de Google?
  • Cómo terminar YoutubeStandAlonePlayer después de completar el video en Android?
  • Actividad de la API de YoutubeNotFoundException en Gingerbread
  • Obtener todas las ID de video de la lista de reproducción de YouTube
  • Error: YouTubeService ha filtrado IntentReceiver ... ¿Te ha faltado una llamada a unregisterReceiver ()?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.