jackpc 发表于 2015-6-19 16:57:19

如何在客户端进行视频聊天时使用画中画模式?

如何在客户端进行视频聊天时使用画中画模式?
在C#WinForm程序代码里如何实现画中画视频聊天模式?求实现的代码,谢谢。

廖斌 发表于 2015-6-19 17:00:21

您好,可以将显示视频的控件叠成画中画形式试下?

廖斌 发表于 2015-6-19 17:00:56

廖斌 发表于 2015-6-19 17:00
您好,可以将显示视频的控件叠成画中画形式试下?
我们显示视频布局是通过显示控件来控制的,控件叠加在一起,视频内容是否被刷新需要看平台特性。

jackpc 发表于 2015-6-19 17:18:34

廖斌 发表于 2015-6-19 17:00
我们显示视频布局是通过显示控件来控制的,控件叠加在一起,视频内容是否被刷新需要看平台特性。

从AnyChatCallCenter的代码工程里面看不出是如何实现两个并列用户的视频聊天模式,应该使用Panle“pan_conversation”来呈现的,是否是在底层控制了这种并行模式?求大侠帮忙解决。

廖斌 发表于 2015-6-19 18:17:45

jackpc 发表于 2015-6-19 17:18
从AnyChatCallCenter的代码工程里面看不出是如何实现两个并列用户的视频聊天模式,应该使用Panle“pan_co ...

您好,底层没有控制视频的界面布局,都是通过控件来控制的。AnyChatCallCenter就是用panl来控制的,调整panl的布局就行了

jackpc 发表于 2015-6-23 17:15:55

廖斌 发表于 2015-6-19 18:17
您好,底层没有控制视频的界面布局,都是通过控件来控制的。AnyChatCallCenter就是用panl来控制的,调整p ...

画中画的实现代码如下:
private void SetVideoSize()
      {
            pic_suserVideo.Width = 320;
            pic_suserVideo.Height = 240;
            pic_tuserVideo.Width = 960;
            pic_tuserVideo.Height = 720;

            this.pic_suserVideo.Location = new System.Drawing.Point(730, 270);
      }

//操作双方音视频设备
      public void OpenCameraAndSpeak(int userId, bool isopen)
      {

            if (isopen)
            {

                //打开呼叫者音视频
                AnyChatCoreSDK.UserCameraControl(userId, true);
                AnyChatCoreSDK.UserSpeakControl(userId, true);

                if (userId == m_UserId)
                {
                  AnyChatCoreSDK.SetVideoPos(userId, pic_suserVideo.Handle, 0, 0, pic_suserVideo.Width, pic_suserVideo.Height);
                }
                else
                {
                  AnyChatCoreSDK.SetVideoPos(userId, pic_tuserVideo.Handle, 0, 0, pic_tuserVideo.Width, pic_tuserVideo.Height);
                }
            }
            else
            {
                AnyChatCoreSDK.UserCameraControl(userId, false);
                AnyChatCoreSDK.UserSpeakControl(userId, false);
            }

            //音量刷新
            timer_speak.Enabled = isopen;

      }

//进入房间成功
      public void EnterRoomSuccess()
      {

            timer_call.Stop();
            Bitmap bit = Properties.Resources._28;
            bit.RotateFlip(RotateFlipType.Rotate180FlipY);
            //pic_suser.Image = bit;
            UserInfo tUserItem = GetUserInfoByUserId(getOtherInSession());
            if (tUserItem != null)
            {
                lb_tuserName.Text = tUserItem.Name;
                lb_suserName.Text = m_UserName;

                pan_users.Hide();
                pan_call.Hide();
                pan_conversation.Dock = DockStyle.Fill;
                pan_conversation.Show();
                SetVideoSize();

                OpenCameraAndSpeak(m_UserId, true);//打开自己的音视频
            }
      }
为何实现的画中画,对方显示的大图很模糊,自己显示的小图就很清晰?问题出在哪里?如何解决?
问题可能是以下的代码导致的
if (userId == m_UserId)
                {
                  AnyChatCoreSDK.SetVideoPos(userId, pic_suserVideo.Handle, 0, 0, pic_suserVideo.Width, pic_suserVideo.Height);
                }
                else
                {
                  AnyChatCoreSDK.SetVideoPos(userId, pic_tuserVideo.Handle, 0, 0, pic_tuserVideo.Width, pic_tuserVideo.Height);
                }

廖斌 发表于 2015-6-23 17:24:24

jackpc 发表于 2015-6-23 17:15
画中画的实现代码如下:
private void SetVideoSize()
      {


您好,自己的视频,是采集之后直接渲染在控件中的,是没有经过编码的,所以比较清晰。而对方的视频是经过编码传输过来的,有压缩。

廖斌 发表于 2015-6-23 17:26:46

廖斌 发表于 2015-6-23 17:24
您好,自己的视频,是采集之后直接渲染在控件中的,是没有经过编码的,所以比较清晰。而对方的视频是经过 ...
默认我们设置编码视频参数为:分辨率320x240,码率为90Kbps,是比较低的视频参数。若想要清晰一些,可以将视频参数设置高一些,参考视频参数:
1、分辨率320x240,码率为150Kbps
2、分辨率640x480,码率为400Kbps


佰锐科技-杨子鳄 发表于 2015-6-23 17:27:09

jackpc 发表于 2015-6-23 17:15
画中画的实现代码如下:
private void SetVideoSize()
      {


您好,可能是对方(大图)设置的参数有问题。

廖斌 发表于 2015-6-23 17:27:44

廖斌 发表于 2015-6-23 17:26
默认我们设置编码视频参数为:分辨率320x240,码率为90Kbps,是比较低的视频参数。若想要清晰一些,可以将 ...

设置的方法有两种
1、通过服务器那边来配置(AnyChatCoreServer.ini),参考
http://bbs.anychat.cn/forum.php?mod=viewthread&tid=737&extra=page%3D1
2、通过客户端调用api来设置。
页: [1] 2
查看完整版本: 如何在客户端进行视频聊天时使用画中画模式?