【问题标题】:YouTubePlayerView over a SurfaceView (CameraPreview)SurfaceView 上的 YouTubePlayerView (CameraPreview)
【发布时间】:2016-02-09 00:00:29
【问题描述】:

我的 Activity 有一个 YouTubePlayerView,它必须显示在 SurfaceView(相机预览)上。

但是,由于 YouTubePlayerView 的视频视图也使用了 SurfaceView,所以 Youtube 视频没有显示。控件和播放按钮是可见的,您可以在播放视频时听到音频,当播放停止时,可以看到其缩略图。

我了解处理这种情况的正确方法是使用 setZOrderMediaOverlay。我能够通过相机预览使用常规 VideoView 使其正常工作。但是,如何在 YouTubePlayerView 中使用 setZOrderMediaOverlay?

这个问题有解决办法吗?

以下是代码的精简版:

package com.moahh.yc;

import android.os.Bundle;
import android.widget.RelativeLayout;

import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerView;

public class CameraActivity extends YouTubeBaseActivity implements
    YouTubePlayer.OnInitializedListener {

    private CameraPreview cameraPreview;
    private YouTubePlayerView youTubePlayerView;
    private final String videoId = "jNQXAC9IVRw";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_camera);

        final RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.relative_layout);
        cameraPreview = new CameraPreview(this);
        relativeLayout.addView(cameraPreview);

        youTubePlayerView = new YouTubePlayerView(this);
        relativeLayout.addView(youTubePlayerView);

        youTubePlayerView.initialize(DeveloperKey.DEVELOPER_KEY, this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        cameraPreview.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        cameraPreview.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        cameraPreview.onDestroy();
    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider,
                                        YouTubePlayer youTubePlayer, boolean restored) {
        if (restored) {
            youTubePlayer.play();
        } else {
            youTubePlayer.loadVideo(videoId);
            youTubePlayer.setShowFullscreenButton(false);
        }
    }

    @Override
    public void onInitializationFailure(YouTubePlayer.Provider provider,
                                        YouTubeInitializationResult youTubeInitializationResult) {
    }
}

而activity的布局只是一个RelativeLayout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</RelativeLayout>

【问题讨论】:

  • 我现在面临同样的问题。你找到解决办法了吗?
  • 不,我没有,所以我更改了布局,YouTubePlayerView 不在相机预览上方。

标签: android youtube-api android-youtube-api


【解决方案1】:

我遇到了同样的问题,当 PlayerStateChangeListener 调用 onVideoStarted 时,我解决了添加视图的问题。

youTubePlayerView.setPlayerStateChangeListener(new YouTubePlayer.PlayerStateChangeListener() {

           @Override
            public void onVideoStarted() {
                cameraPreview = new CameraPreview(this);
                relativeLayout.addView(cameraPreview);
            }
            [...]
        });

【讨论】:

    【解决方案2】:

    我有同样的问题.. 启动 YouTube 视图后,尝试启动 CameraPreview。 在onInitializationSuccess 中的意思是这样的:

    @Override
        public void onInitializationSuccess(YouTubePlayer.Provider provider,
                                            YouTubePlayer youTubePlayer, boolean restored) {
        if (restored) {
            youTubePlayer.play();
            cameraPreview = new CameraPreview(this);
            relativeLayout.addView(cameraPreview);        
    } else {
            youTubePlayer.loadVideo(videoId);
            youTubePlayer.setShowFullscreenButton(false);
        }
    }
    

    【讨论】:

    • 此代码似乎不起作用。它只会在 'restored' 为真时执行,因此在首次创建活动时不会实例化相机。而且,如果您在 'restored' 为 false 时实例化相机,则整个 YouTubePlayerView 将位于 cameraPreview 下方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2013-03-23
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多