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.
- El método de reproducción de la API de IFrame de YouTube no funciona antes de tocar algunas tabletas Android
- No se pudo encontrar un error de clase al intentar cargar un video a YouTube usando la API de gdata.
- código 401, se necesita iniciar sesión, mientras utiliza YouTube Data API V3 en Android
- La API de Youtube no devuelve los resultados actualizados
- NullPointerException en super.onStart ()
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?
- Youtube API v3 buscar videos, recuperar el título y url
- Las incorporaciones de iframe de YouTube no pueden reproducirse automáticamente en Android
- Pausa de la API de YouTube de YouTube cuando gira la pantalla u oculta el reproductor
- YouTubePlayerSupportFragment inicia actividad duplicada
- Acceso a la clave de la API de Google Android no configurada
- ¿Hay una versión HD (Higher Quality) .3gp de vídeo en youtube para los jugadores de HTML?
- YouTubePlayerView en un ScrollView
- Haciendo un perfecto reproductor Youtube de Chromeless en Android
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!
- Android: Leer / Enviar mensajes de texto en Ubuntu?
- Los eventos de toque del navegador Android detienen la visualización que se actualiza. Lienzo / elementos – ¿Cómo trabajar?