详细教程:网络视频直播系统demo中的这项功能是怎么实现的?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yun_bao_2144899870/article/details/88637234

看过我们程序demo的朋友可能会知道,我们网络视频直播系统中有几个游戏功能,那么该功能是如何实现的呢?在此给大家讲点干货,实现网络视频直播系统demo中游戏功能的大致思路如下:
首先,主播端开启游戏,此时网络视频直播系统会自动发送socket通知直播间的所有人,收到socket通知的所有用户端页面上,都会被展示游戏窗口,其中部分代码如下:

/**
 * 显示游戏窗口
 */
public void showGameWindow() {
    FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)     mTopView.getLayoutParams();
    params.setMargins(0, 0, 0, mGameViewHeight);
    mTopView.setLayoutParams(params);
    LiveLightView.sOffsetY = mGameViewHeight;
    LiveRoomViewHolder.sOffsetY = mGameViewHeight;
    addToParent();
    if (mAnchor) {
        EventBus.getDefault().post(new GameWindowEvent(true));
    }
}

在用户端展示游戏窗口之后,网络视频直播系统中早已设置好的游戏初始动画开始命令便会运行起来,在开始动画结束后,主播端发起请求→接口创建游戏→通知各用户端游戏已开始,在收到系统通知后,所有客户端开始执行程序早已设置好的发牌动画,发牌动画结束后,主播再次发送通知,通知用户可以下注。部分代码如下:

/**
 * 主播在8秒准备动画结束后,请求接口,创建游戏
 */
@Override
public void anchorCreateGame() {
    if (!mAnchor) {
        return;
    }
    HttpUtil.gameJinhuaCreate(mStream, new HttpCallback() {
        @Override
        public void onSuccess(int code, String msg, String[] info) {
            if (code == 0) {
                JSONObject obj = JSON.parseObject(info[0]);
                mGameID = obj.getString("gameid");
                mGameToken = obj.getString("token");
                mBetTime = obj.getIntValue("time");
		//游戏创建socket通知
                SocketGameUtil.zjhAnchorCreateGame(mSocketClient, mGameID);
            } else {
                ToastUtil.show(msg);
            }
        }
    });
}

用户下注功能开启后至倒计时停止前,用户都可进行下注操作,下注成功后,网络视频直播系统向用户端发送socket通知,通知所有用户端更新下注显示信息,至下注结束后,直播间内所有人会收到服务端发送的游戏揭晓结果的通知,至此,本局游戏结束。实现功能的部分代码如下:

/**
 * 揭晓游戏结果
 */
private void showGameResult(int i, String[] result) {
    mRoles[i].showResult(result[0], result[1], result[2]);
    if (mHandler != null) {
        Message msg = Message.obtain();
        msg.what = WHAT_GAME_RESULT_ANIM;
        msg.arg1 = i;
        mHandler.sendMessageDelayed(msg, 1000);
    }
    if (mWinIndex == -1) {
        if ("1".equals(result[4])) {
            mWinIndex = i;
        }
    }
    if (i == 2) {
        if (mCoverImg != null && mCoverImg.getVisibility() != View.VISIBLE) {
            mCoverImg.setVisibility(View.VISIBLE);
        }
        if (mWinIndex >= 0) {
            for (int j = 0; j < mRoles.length; j++) {
                if (j != mWinIndex) {
                    mRoles[j].showCover();
                }
            }
        }
        if (mHandler != null) {
            mHandler.sendEmptyMessageDelayed(WHAT_GAME_NEXT, 10000);//10秒后重新开始游戏
        }
        if (!mAnchor) {
            getGameResult();
        }
    }
    playGameSound(GameSoundPool.GAME_SOUND_RESULT);
}

以上便是网络视频直播系统demo中游戏功能实现的大致思路,主要运用socket和各种Animation等实现。更多与网络视频直播系统、直播源码开发相关的源码技术文章会在以后逐渐放出,敬请期待,需要的朋友请关注我。
声明:文章为原创内容,转载请注明链接及作者

猜你喜欢

转载自blog.csdn.net/yun_bao_2144899870/article/details/88637234