【问题标题】:Play Youtube video in background using youtube player api使用 youtube player api 在后台播放 Youtube 视频
【发布时间】:2014-10-08 13:22:57
【问题描述】:

我已经使用youtube player api 成功播放了 youtube 视频。但是我需要在按下后退按钮时在后台运行它。我搜索了很多但一无所获请帮助我实现这一点。提前致谢

这是我的代码-

public class FullscreenDemoActivity extends YouTubeFailureRecoveryActivity
        implements View.OnClickListener,

        YouTubePlayer.OnFullscreenListener {
//  private MyPlaybackEventListener myPlaybackEventListener;
    private static final int PORTRAIT_ORIENTATION = Build.VERSION.SDK_INT < 9 ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
            : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;

    private LinearLayout baseLayout;
    private YouTubePlayerView playerView;
    public YouTubePlayer player;
    private Button fullscreenButton;
    private CompoundButton checkbox;
    private View otherViews;

    private boolean fullscreen;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.fullscreen_demo);
        baseLayout = (LinearLayout) findViewById(R.id.layout);
        playerView = (YouTubePlayerView) findViewById(R.id.player);
        fullscreenButton = (Button) findViewById(R.id.fullscreen_button);
        checkbox = (CompoundButton) findViewById(R.id.landscape_fullscreen_checkbox);
        otherViews = findViewById(R.id.other_views);
        playerView.initialize(DeveloperKey.DEVELOPER_KEY, this);

    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider,
            YouTubePlayer player, boolean wasRestored) {
        this.player = player;
        setControlsEnabled();
        // Specify that we want to handle fullscreen behavior ourselves.
        player.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT);
        player.setOnFullscreenListener(this);
        if (!wasRestored) {
            player.cueVideo("avP5d16wEp0");
        }
        int controlFlags = player.getFullscreenControlFlags();
        setRequestedOrientation(PORTRAIT_ORIENTATION);
        controlFlags |= YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE;
        player.setFullscreenControlFlags(controlFlags);
        player.play();


    }

    @Override
    protected YouTubePlayer.Provider getYouTubePlayerProvider() {
        return playerView;
    }

    @Override
    public void onClick(View v) {
        player.setFullscreen(!fullscreen);
    }



    private void doLayout() {
        LinearLayout.LayoutParams playerParams = (LinearLayout.LayoutParams) playerView
                .getLayoutParams();
        if (fullscreen) {
            // When in fullscreen, the visibility of all other views than the
            // player should be set to
            // GONE and the player should be laid out across the whole screen.
            playerParams.width = LayoutParams.MATCH_PARENT;
            playerParams.height = LayoutParams.MATCH_PARENT;

            otherViews.setVisibility(View.GONE);
        } else {
            otherViews.setVisibility(View.VISIBLE);
            ViewGroup.LayoutParams otherViewsParams = otherViews
                    .getLayoutParams();
            if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
                playerParams.width = otherViewsParams.width = 0;
                playerParams.height = WRAP_CONTENT;
                otherViewsParams.height = MATCH_PARENT;
                playerParams.weight = 1;
                baseLayout.setOrientation(LinearLayout.HORIZONTAL);
            } else {
                playerParams.width = otherViewsParams.width = MATCH_PARENT;
                playerParams.height = WRAP_CONTENT;
                playerParams.weight = 0;
                otherViewsParams.height = 0;
                baseLayout.setOrientation(LinearLayout.VERTICAL);
            }
            setControlsEnabled();
        }
    }

    private void setControlsEnabled() {
        checkbox.setEnabled(player != null
                && getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT);
        fullscreenButton.setEnabled(player != null);
    }

    @Override
    public void onFullscreen(boolean isFullscreen) {
        fullscreen = isFullscreen;
        doLayout();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // System.out.println(getScreenOrientation());
        doLayout();
    }

    private final class MyPlaybackEventListener implements PlaybackEventListener {

          private void updateLog(String prompt){
        System.out.println(prompt);
          };

          @Override
          public void onBuffering(boolean arg0) {
           updateLog("onBuffering(): " + String.valueOf(arg0));
          }

          @Override
          public void onPaused() {

           updateLog("onPaused()");
          }

          @Override
          public void onPlaying() {
           updateLog("onPlaying()");

          }

          @Override
          public void onSeekTo(int arg0) {
           updateLog("onSeekTo(): " + String.valueOf(arg0));
          }

          @Override
          public void onStopped() {
              player.loadVideo("avP5d16wEp0");

              player.cueVideo("avP5d16wEp0");
              player.play();
           updateLog("onStopped()");
          }

         }

}

【问题讨论】:

    标签: android background youtube-api


    【解决方案1】:

    我搜索了那个主题,发现没有官方的方式,不会按照谷歌代码上的this page

    他们建议你创建一个播放器。

    隐藏播放器。

    将播放器静音。

    使用您的 videoId 和可选偏移量调用 seekTo()。

    等待状态更改为“正在播放”。

    按下暂停键。

    调用 seekTo(originalOffset, false)。

    取消静音播放器。

    显示播放器。 (或其他)。

    它可能无法满足您的需要,但也许您可以使用此方法更改实现目标所需的内容。

    【讨论】:

    • 该解决方案的问题是youtube播放器将停止一次并且Activity/Fragment在后台,我需要它继续播放
    • 我不太了解我现在要说什么。如何使用处理缓冲的服务然后将其传递给活动。我会和你一起调查,如果有人发现了什么,他会在这里发布。
    • 即使可以通过视频流,我们需要在调用onPause之后播放器继续播放,Activity/Fragment必须一直保持活动状态。
    • onPause() 对服务没有影响。这意味着保持视频流处于服务状态,并在保持服务打开的同时,在您想要进行活动时传递您想要的内容。在视频结束时,您可以选择清除服务流并关闭服务。
    【解决方案2】:

    点击后退按钮时检查播放器的状态,我认为它将处于暂停和/或缓冲状态。您可以尝试在侦听器上修补它,在缓冲侦听器上,调用 playvideo/ 更改状态以播放视频。我试过并让它适用于 iOS,不知道这种情况下的平台限制。

    【讨论】:

    • 这可能会使播放器停止并再次播放。我需要它继续播放,就像屏幕在前台一样。
    • 视频没有停止而是暂停,所以它从暂停的地方开始播放,尝试工作确保它有效@david
    • 我知道它暂停了我已经实现了,我需要视频继续播放而不是暂停~秒而不是播放。
    • 是的,有点停顿,我观察到了。这是不可避免的
    猜你喜欢
    • 2015-12-31
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2017-09-20
    • 2016-04-26
    • 2017-05-19
    • 2014-12-02
    • 1970-01-01
    相关资源
    最近更新 更多