YouTubeAndroidPlayerAPI kann einige Videos nicht abspielen

- Update 09/05/2016 17:10 - Das Problem scheint mit dem Datum der Veröffentlichung des Videos verbunden zu sein ... In der letzten Aprilwoche habe ich viele Videos auf YouTube gepostet, die bis 19:00 Uhr veröffentlicht wurden Der 27. April funktioniert einwandfrei, während die bis 21:15 Uhr am selben Tag aufgeladenen Probleme besprochen wurden, als ob zwischen dem 19. und 21. April 27 ein paar Updates oder Änderungen an den Videos von YouTube eingeführt worden wären. Ich habe jetzt versucht, ein neues Video zu laden und dies hat auch das gleiche Problem.

Ich habe ein seltsames Problem mit YouTubeAndroidPlayerAPI. Ich verwende YouTubePlayerSupportFragment (aber ich habe das gleiche Problem mit YouTubePlayerFragment), um Videos in meiner App abzuspielen. Einige Videos lassen sich perfekt abspielen . ".

Wenn dies im Android-Monitor passiert, wird der YouTube-API-Fehler angezeigt:

05-08 11:25:22.145 20521-20521/? E/YouTubeAndroidPlayerAPI: fmt.noneavailable
oae: Video not supported/available
at oab.a(SourceFile:212)
at nvl.a(SourceFile:383)
at nvl.a(SourceFile:706)
at nvr.a(SourceFile:1144
at nsn.onPostExecute(SourceFile:2102)
at android.os.AsyncTask.finish(AsyncTask.java:651)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

Wenn ich auf das YouTube-Symbol im Video tippe, um es in der YouTube-App abzuspielen, wird das Video in der offiziellen App korrekt abgespielt.

Wenn für das Video die Monetarisierung aktiviert ist, wird das Anzeigenvideo normal angezeigt. Am Ende wird der Fehler angezeigt.

Ich habe es versucht

Verwenden Sie YouTubePlayerFragment anstelle von YouTubePlayerSupportFragment Aktivität anstelle von AppCompatActivity @ verwendBinde das Video in eine HTML-Seite ein, es funktioniert korrektDeaktive Monetarisierung, nichts ändert sich Verschiedene Schlüssel, einer zum Debuggen und einer für die Veröffentlichung

Vielen Dank für Ihre Hilfe!

Update 05.11.2016 Es scheint ein YouTube-Fehler zu sein; Die einzig gangbare Lösung zu diesem Zeitpunkt scheint darin zu bestehen, das Video in der offiziellen YouTube-App mit der Absicht zu öffnen oder das Player-Fragment durch eine WebView zu ersetzen. Das Standard-WebView ist sehr eingeschränkt und zeigt nicht die Schaltfläche, um das Video als Vollbild anzuzeigen. Sie müssen eine Klasse erstellen, die WebChromeClient erweitert:

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);
        }
    }
}

und initialisieren Sie dann das 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);

Laden Sie zum Schluss das Video in das WebView:

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

Wenn Sie die WebView-Dimensionen an den YouTube-Player anpassen möchten, können Sie dies tun:

Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
myWebView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int)Math.round(size.x/1.77)));

Antworten auf die Frage(2)

Ihre Antwort auf die Frage