我可以将exoplayer缓冲的数据发送到其他活动exoplayer

时间:2018-09-27 14:07:22

标签: android video-streaming exoplayer exoplayer2.x

我的第一个活动是exoplayer,单击全屏按钮时,我将打开一个新的VideoActivity全屏。我只发送当前职位并启动该职位的VideoActivity。

from python.helper.my_client import Client

def deco_download(f):
    def f_download(*args, **kwargs):
        # some retry functionality here
        return json_data
    return f_download 

class Downloader:
    def __init__(self):
        self.attribute = 'some_value'

    @deco_download
    def download_persons(self, client, *args, **kwargs):
        return client.get_persons(*args, **kwargs)

    @deco_download
    def download_organizations(self, client, *args, **kwargs):
        return client.get_organizations(*args, **kwargs)

def run(self):
    dispatcher = {
        'person': self.download_persons(client),
        'organization': self.download_organizations(client)
    }

    for key in dispatcher:
        print("Downlading data for: {0}".format(key)
        dispatcher[key]

但是问题是当打开新活动并从当前位置启动exoplayer时。 Exoplayer再次开始缓冲。

是否可以将缓冲数据传送到SecondActivity。

2 个答案:

答案 0 :(得分:0)

实际上是不可能的。但是我设法实现的一种解决方法是,当您要全屏播放时,将播放器视图的宽度和高度更改为MATCH_PARENT(即使在配置上进行了更改)。How to play video full screen in landscape using exoplayer这可以为您提供帮助。

答案 1 :(得分:0)

现在回答这个问题可能为时已晚,但这可能会对其他人有所帮助。

如果您想为exoplayer实现全屏功能,请不要通过单独的活动来实现,您只需要打开一个具有高宽和宽的对话框即可计算整个屏幕,只需要添加您正在使用的playerview适用于“全屏”浏览器。

mFullScreenButton.setOnClickListener(v -> {
        if (!mExoPlayerFullscreen) {
            ((Activity) mContext).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
            openFullscreenDialog();
        } else {
            ((Activity) mContext).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
            closeFullscreenDialog();
        }
    });

在这里,我们为全屏按钮初始化onClick

private void openFullscreenDialog() {
    ((ViewGroup) playerView.getParent()).removeView(playerView);
    mFullScreenDialog.addContentView(playerView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
    mFullScreenIcon.setImageResource(R.drawable.ic_exit_fullscreen);
    mExoPlayerFullscreen = true;
    mFullScreenDialog.show();
}
上面的

是在调用全屏按钮以匹配屏幕时调用的方法。下面是撤消全屏的方法。

private void closeFullscreenDialog() {
    ((ViewGroup) playerView.getParent()).removeView(playerView);
    ((FrameLayout) findViewById(R.id.main_media_frame)).addView(playerView);
    mExoPlayerFullscreen = false;
    mFullScreenDialog.dismiss();
    mFullScreenIcon.setImageResource(R.drawable.ic_fullscreen);
}

下面是用于初始化对话框的代码段。

mFullScreenDialog = new Dialog(mContext, android.R.style.Theme_Black_NoTitleBar_Fullscreen) {
        public void onBackPressed() {
            if (mExoPlayerFullscreen) {
                closeFullscreenDialog();
            }
            super.onBackPressed();
        }
    };