当前位置: 首页 > 知识库问答 >
问题:

Android YouTubePlayerView在第二次视频加载时显示黑屏

宇文航
2023-03-14

我为youtube播放器创建了一个自定义布局..

public class CustomYouTubeView extends LinearLayout implements YouTubePlayer.OnInitializedListener {

private String mYouTubeVideoId;
private String TAG=CustomYouTubeView.class.getSimpleName();
private YouTubePlayerView mYouTubePlayerView;
private YouTubeIntializerListener youTubeIntializerListener;

public CustomYouTubeView(Context context){
    super(context);
}


public CustomYouTubeView(Activity context, String youTubeVideoId , YouTubeIntializerListener youTubeIntializerListener) {
    super(context);

    Log.d(TAG,"CustomYouTubeView :: ");
    this.youTubeIntializerListener=youTubeIntializerListener;

    mYouTubeVideoId = youTubeVideoId;
    //String apiKey = "AIzaSyCLLeT5eV5jCHZIjNME4MG6q_GEftd8crQ";
    String apiKey=context.getString(R.string.google_api_key);

        mYouTubePlayerView = new YouTubePlayerView(context);
        mYouTubePlayerView.setTag(mYouTubeVideoId);
        mYouTubePlayerView.initialize(apiKey, this);

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT);
    //int margin = (int) ScreenUtils.dip2pixel(10, context);
    params.leftMargin = 10;
    params.rightMargin = 10;
    params.topMargin = 10;
    params.bottomMargin = 10;
    addView(mYouTubePlayerView, params);
}
private void releasePlayer(){
mYouTubePlayerView=null;
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider arg0, YouTubeInitializationResult arg1) {
    Log.d(TAG,"onInitializationFailure()");
    System.out.println("CustomYouTubeView onInitializationFailure");
    youTubeIntializerListener.youTubeFalied();
}


@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, final YouTubePlayer player, final boolean wasRestored) {

    Log.d(TAG,"onInitializationSuccess()");
    System.out.println("CustomYouTubeView onInitializationSuccess");
    if (!wasRestored) {
        player.setPlayerStateChangeListener(new YouTubePlayer.PlayerStateChangeListener() {

            @Override
            public void onVideoStarted() {
            }

            @Override
            public void onVideoEnded() {
            }

            @Override
            public void onError(YouTubePlayer.ErrorReason errorReason) {

            }

            @Override
            public void onLoading() {
            }

            @Override
            public void onLoaded(String videoId) {
                Log.d(TAG, "onInitializationSuccess()");

                player.loadVideo(mYouTubeVideoId);
                youTubeIntializerListener.youTubeInitialized();


            }


            @Override
            public void onAdStarted() {
            }
        });
    }


}

谁能帮我解决这个问题。

共有1个答案

子车峰
2023-03-14

我播放Youtube视频的代码

YouTubePlayerView video = new YouTubePlayerView(this); 
video.initialize(SERVER_API_KEY, this);
addView(video, params);

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored) {
    if(!wasRestored) {
        try {
            youTubePlayer.cueVideo(data.getString("videoId", "").toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

并且可能是由于您的私有void releasePlayer(){myouTubePlayerView=null;}您没有第二次播放视频,请删除此函数并尝试。

 类似资料:
  • 我正在使用React-useState钩子更新状态。单击表单提交按钮时,状态直到第二次单击才更新。我相信我需要使用useffect,但不确定如何使用onClick实现。

  • 我的应用程序有一个片段,播放一秒钟长的视频。播放完视频后,用户必须按下一个按钮,然后应该播放一个新的视频。在播放第二个视频之前,my main activity加载、创建一个新片段并创建新的Exoplayer实例。 我第一次播放视频时,一切都按预期进行。然而,如果我想播放第二个视频,它将显示第一个视频最后一帧的冻结图像,并播放第二个视频的声音。这个bug不出现在Android8(API Level

  • 任何人都知道当用户第二次单击按钮时如何显示间隙广告。我的意思是,当用户单击一次按钮时,广告不应出现,但每当用户再次单击同一按钮时,广告必须显示。。 这里显示了我在不同活动中调用的中间代码。

  • 从一段时间以来,我开始有以下问题。我播放它通过加载文件并显示图像的级别。我完成了关卡,它就会卸载文件。当我再次玩关卡时,它只显示堡垒,玩家,敌人,子弹,但它不再显示其他的图像,如地面,背景,树木等,而是显示给我白色的素色。 然而,就在此时,我没有从AssetManager获取纹理,而是将所有内容改为创建新对象,如,它不会产生此错误。我猜是有什么地方不对或遗漏了。 它实际上只是白色的,但当我创建地面

  • 问题内容: 是否可以将html5-视频显示为画布的一部分? 基本上与您在画布上绘制图像的方式相同。 谢谢! 问题答案: var canvas = document.getElementById(‘canvas’); var ctx = canvas.getContext(‘2d’); var video = document.getElementById(‘video’); 我猜上面的代码是自我解