SurfaceView播放视频,小窗口播放,点击全屏按钮跳转activity切换到横屏全屏播放,怎么做到视频能在新的activity继续播放?

Smile丶Ho 2016-03-18 11:29:11
如题:
SurfaceView播放视频,小窗口播放,点击全屏按钮跳转activity切换到横屏全屏播放,怎么做到视频能在新的activity继续播放?

最近在做一个视频监控APP,视频界面的效果是模仿目前主流直播平台的那种竖屏上面是一个视频播放窗口,下方是评论和信息,点击全屏播放则旋转屏幕并全屏继续播放的这种结构,我觉得这种切换应该是跳转了activity的,目前我实现的效果已经有跳转过去自动播放,(其实我也不知道为啥会自动播放,任何代码都不需要,只要绑定控件就行了!)但是回到之前的界面,却不能继续播放,只能重新点击播放,不知道为什么!
...全文
1792 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
nuoniejue8517 2017-06-20
  • 打赏
  • 举报
回复
楼主能发我一下源码吗?万分感谢, 798563818@qq.com
bilionera 2017-01-10
  • 打赏
  • 举报
回复
楼主能分享下代码吗,十分感谢 1039749365@qq.com
m0_37070668 2016-12-17
  • 打赏
  • 举报
回复
楼主能加我qq吗?有问题请教。qq:863551034
sinat_35239410 2016-09-26
  • 打赏
  • 举报
回复
楼主 可以把源码发出来看看嘛~
Jacky-G 2016-09-06
  • 打赏
  • 举报
回复
楼主解决了,代码能不能发出来看一下
Smile丶Ho 2016-07-20
  • 打赏
  • 举报
回复
引用 3 楼 liaohaiwen 的回复:
楼主解决了没有,我在为这个切屏而烦恼
刚看了下代码研究了下,已经解决了,原因是因为销毁全屏播放的activity时调用了surfaceDestroyed,但是并不是销毁前就调用,而是在小窗口播放activity Resume后并且调用了surfaceCreated后才调用,所以就导致了SurfaceHolder被清空了,我的解决方法是在调用finish()之前先手动调用一次surfaceDestroyed,然后用了个静态变量控制他finish后再次调用surfaceDestroyed的时候里面的代码中断执行,这样就可以继续播放了。我个人理解是这样的,详细的看下我的这几个代码。 非全屏播放的Activity的:
@Override
    public void surfaceCreated(SurfaceHolder holder) {
        Log.i(TAG, "surface被创建" + WuLian.m_iPort);
        if (-1 == WuLian.m_iPort) {
            return;
        }
        Surface surface = holder.getSurface();
        if (true == surface.isValid()) {
            if (false == Player.getInstance().setVideoWindow(WuLian.m_iPort, 0, holder)) {
                Log.e(TAG, "播放器设置视频窗口失败!");
            }
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        Log.i(TAG, "播放器设置视频窗口的释放!" + WuLian.m_iPort);
        if (-1 == WuLian.m_iPort) {
            return;
        }
        if (true == holder.getSurface().isValid()) {
            if (false == Player.getInstance().setVideoWindow(WuLian.m_iPort, 0, null)) {
                Log.e(TAG, "播放器设置视频窗口失败!");
                return;
            }
            Log.e(TAG, "播放器设置视频窗口清空!");
        }
    }
全屏播放Activity的:
@Override
    public void surfaceCreated(SurfaceHolder holder) {
        Log.i(TAG, "surface被创建" + WuLian.m_iPort);
        if (-1 == WuLian.m_iPort) {
            return;
        }
        Surface surface = holder.getSurface();
        if (true == surface.isValid()) {
            if (false == Player.getInstance().setVideoWindow(WuLian.m_iPort, 0, holder)) {
                Log.e(TAG, "播放器设置视频窗口失败!");
            }
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        Log.i(TAG, "播放器设置视频窗口的释放!" + WuLian.m_iPort);
        if (-1 == WuLian.m_iPort) {
            return;
        }
        if (isFucreen) {
            isFucreen = false;
        } else {
            if (WuLian.toFucreen) {
                WuLian.toFucreen = false;
                return;
            }
        }
        if (true == holder.getSurface().isValid()) {
            if (false == Player.getInstance().setVideoWindow(WuLian.m_iPort, 0, null)) {
                Log.e(TAG, "播放器清空视频窗口失败!");
                return;
            }
            Log.e(TAG, "播放器设置视频窗口清空!");
        }
    }
Smile丶Ho 2016-07-20
  • 打赏
  • 举报
回复
引用 3 楼 liaohaiwen 的回复:
楼主解决了没有,我在为这个切屏而烦恼
我到现在还没解决呢,你呢~
  • 打赏
  • 举报
回复
楼主解决了没有,我在为这个切屏而烦恼
o蝌蚪o 2016-03-18
  • 打赏
  • 举报
回复
从新回到之前的activity,你可以在on resume()方法里面进行继续播放的实现
o蝌蚪o 2016-03-18
  • 打赏
  • 举报
回复
横屏切换,会从新调用activity的生命周期方法,相当于这个activity从新启动了一次,所以如果你想保持继续按进度进行播放,可以记录当前视频的播放进度,然后在新的activity里面继续当前的进度进行播放;试试用handler来传递进度值的方式来试试

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧