API-интерфейс YouTube Android Player INTERNAL_ERROR для нескольких видеороликов

Используя образец кода API Android для Android (версия 1.2.2), если я изменил любой из идентификаторов видео на один, который я загрузил (например, «QVikru_w2hQ» или «u1n6E81rm80»), миниатюра загружается в плеер, но при нажатии Play, игрок переходит к функции onError с помощью YouTubePlayer.ErrorReason.INTERNAL_ERROR. Появится сообщение с сообщением «Во время игры возникла проблема. Нажмите, чтобы повторить попытку». Воспроизведение этих видеороликов на веб-сайте YouTube или нашем приложении iOS не вызывает проблем. Оригинальные образцы видео отлично воспроизводятся с моим ключом разработчика.

Я испытываю эту проблему на нескольких устройствах, включая мой Nexus 5X (android 6.0.1) с версией приложения для YouTube в настоящее время в 11.13.56.

Кто-нибудь еще сталкивался с подобной проблемой?

Я также опубликовал потенциальный отчет об ошибках в google data api issue tracker .

WebView кажется хорошим решением. Поскольку я был в спешке и нуждался в быстром исправлении, я использовал исходный код из этого проекта github:

https://github.com/theScrabi/NewPipe

Этот код не зависит от API Youtube. Это чистый анализ веб-сайтов. Все мои видео работают с решением так же быстро, как раньше.

Весь проект – это функциональное приложение, но вы можете погрузиться внутрь и взять то, что вам нужно. Я использовал фрагмент, который встраивает миниатюру видео и активность полноэкранного игрока.

Престижность автору проекта.

Кажется, это ошибка YouTube, просмотр YouTubeAndroidPlayerAPI не может воспроизводить некоторые видеоролики для деталей, которые я собрал.

Единственный доступный обходной путь в это время, похоже, открывает видео в официальном приложении YouTube с намерением или заменяет фрагмент плеера WebView. Я предпочел это второе решение.

Стандартный WebView очень ограничен и не будет показывать кнопку, чтобы включить полноэкранный режим видео. Вам необходимо создать класс, расширяющий WebChromeClient:

public class MyWebChromeClient extends WebChromeClient { FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); @Override public void onShowCustomView(View view, CustomViewCallback callback) { if (mCustomView != null) { callback.onCustomViewHidden(); return; } mContentView = (LinearLayout) findViewById(R.id.scheda_video_activity); mContentView.setVisibility(View.GONE); mCustomViewContainer = new FrameLayout(SchedaVideoActivity.this); mCustomViewContainer.setLayoutParams(LayoutParameters); mCustomViewContainer.setBackgroundResource(android.R.color.black); view.setLayoutParams(LayoutParameters); mCustomViewContainer.addView(view); mCustomView = view; mCustomViewCallback = callback; mCustomViewContainer.setVisibility(View.VISIBLE); setContentView(mCustomViewContainer); } @Override public void onHideCustomView() { if (mCustomView == null) { return; } else { mCustomView.setVisibility(View.GONE); mCustomViewContainer.removeView(mCustomView); mCustomView = null; mCustomViewContainer.setVisibility(View.GONE); mCustomViewCallback.onCustomViewHidden(); mContentView.setVisibility(View.VISIBLE); setContentView(mContentView); } } } 

И затем инициализировать WebView:

 WebView myWebView = (WebView)findViewById(R.id.webview); MyWebChromeClient mWebChromeClient = new MyWebChromeClient(); myWebView.setWebChromeClient(mWebChromeClient); myWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } }); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); 

Наконец, загрузите видео в WebView:

 myWebView.loadUrl("https://www.youtube.com/embed/"+youtube_id); 

Если вы хотите адаптировать размеры WebView к проигрывателю YouTube, вы можете сделать это:

 Point size = new Point(); getWindowManager().getDefaultDisplay().getSize(size); myWebView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int)Math.round(size.x/1.77))); 
Intereting Posts
Не удалось прочитать дескрипторы файла входного канала из пакета Как воспроизвести анимацию с одним выстрелом Потерянные сообщения через XMPP на устройстве отключены Как определить овалы переменных ресурса в Android Studio (например: «% 1 $ s») Как преобразовать строку Base64 в образ BitMap, чтобы показать его в ImageView? Mobile Buy SDK Android – как включить кнопку «Добавить корзину» с Quanity (Nos) Как интерфейс ReadableMap в React-native конвертирует JS в JAVA? Основная ошибка в AndroidManifest.xml для получения разрешения на получение SMS Сбой интерфейса Javascript для Android Proguard Air – Как выбрать правильный режим аппаратного ускорения? Предварительный просмотр не отображается в Android Studio Android: Почему нажатие на уведомление о намерении с backstack уничтожает родительскую MainActivity? Java.lang.NoClassDefFoundError: javax.microedition.io.Connector Размер настраиваемого пункта меню и текстовое оформление в режиме навигации Не удается удалить вид, прикрепленный windowManager.addView ()