holotoolkit建立多个客户端

65 篇文章 2 订阅

1, HoloToolkit/unity远程实时传输视频

      holotoolkit 客户端与服务器架构的建立

2 上面的博客讲述了如何建立客户端和服务器,但只能是一对一。

下面以多加一个客户端为例来说。(a, b, c 三个,数据从a向b和c发送。)

a 的工程中  (1) LocalCustomMessages.cs  多加一个Middle

public enum TestMessageID : byte
        {
            StringMessageID = MessageID.UserMessageIDStart,
            Middle,
            Max
        }

(2)LocalCustomMessages.cs 里面SendMessage给两个分别发

public void SendMessage()
		{
			// If we are connected to a session, broadcast our head info
			if (serverConnection != null && serverConnection.IsConnected())
			{
				// Create an outgoing network message to contain all the info we want to send
				NetworkOutMessage msg = CreateMessage((byte)TestMessageID.StringMessageID);
				NetworkOutMessage msgm = CreateMessage((byte)TestMessageID.Middle);

				send video
//				byte[] currentColorFrameByteArray = LocalCamera.viewTexture.EncodeToJPG();
//
//				msg.Write(currentColorFrameByteArray.Length);
//				msg.WriteArray(currentColorFrameByteArray, (uint)(currentColorFrameByteArray.Length));
				///send there or more clients ---test
				AppendVector3(msg, Vector3.one);

				// Send the message as a broadcast, which will cause the server to forward it to all other users in the session.
				serverConnection.Broadcast(
					msg,
					MessagePriority.Immediate,
					MessageReliability.UnreliableSequenced,
					MessageChannel.Avatar);


				AppendVector3(msgm, 10*Vector3.one);

				// Send the message as a broadcast, which will cause the server to forward it to all other users in the session.
				serverConnection.Broadcast(
					msgm,
					MessagePriority.Immediate,
					MessageReliability.UnreliableSequenced,
					MessageChannel.Avatar);
			}
		}

(3)LocalCustomMessagesManager.cs  Start里多加一行Middle

    private void Start()
        {
			LocalCustomMessages.Instance.MessageHandlers[LocalCustomMessages.TestMessageID.StringMessageID] = UpdateMessage;
			LocalCustomMessages.Instance.MessageHandlers[LocalCustomMessages.TestMessageID.Middle] = UpdateMessage;

            // SharingStage should be valid at this point, but we may not be connected.
            if (SharingStage.Instance.IsConnected)
            {
                Connected();
            }
            else
            {
                SharingStage.Instance.SharingManagerConnected += Connected;
            }
        }

b 客户端工程 对应的加 Middle 即可

    /// </summary>
        public enum TestMessageID : byte
        {
            StringMessageID = MessageID.UserMessageIDStart,
            Middle
            Max
        }

c 客户端工程

(1)加Middle enum

     public enum TestMessageID : byte
        {
            StringMessageID = MessageID.UserMessageIDStart,
			Middle,
            Max
        }

(2) 把脚本中对应的StringMessageID 修改为Middle即可。

        public void SendMessage()
        {
            // If we are connected to a session, broadcast our head info
            if (serverConnection != null && serverConnection.IsConnected())
            {
                // Create an outgoing network message to contain all the info we want to send
				//2 michael
				NetworkOutMessage msg = CreateMessage((byte)TestMessageID.Middle);
                //NetworkOutMessage msg = CreateMessage((byte)TestMessageID.Middle);

                send video
                //byte[] currentColorFrameByteArray = cameraView.viewTexture.EncodeToJPG();

                //msg.Write(currentColorFrameByteArray.Length);
                //msg.WriteArray(currentColorFrameByteArray, (uint)(currentColorFrameByteArray.Length));

                // Send the message as a broadcast, which will cause the server to forward it to all other users in the session.
                serverConnection.Broadcast(
                    msg,
                    MessagePriority.Immediate,
                    MessageReliability.UnreliableSequenced,
                    MessageChannel.Avatar);
            }
        }
  private void Start()
        {
			//1 micheal
			//LocalCustomMessages.Instance.MessageHandlers[LocalCustomMessages.TestMessageID.StringMessageID] = UpdateMessage;
			LocalCustomMessages.Instance.MessageHandlers[LocalCustomMessages.TestMessageID.Middle] = UpdateMessage;

            // SharingStage should be valid at this point, but we may not be connected.
            if (SharingStage.Instance.IsConnected)
            {
                Connected();
            }
            else
            {
                SharingStage.Instance.SharingManagerConnected += Connected;
            }
        }

但有个问题是数据重复发送了,会增加数据传输负荷,应该是A放一次B和C都可以收才合理。目前不知这个问题怎么解决?

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值