AnyChat技术支持论坛

标题: 如何在客户端进行视频聊天时使用画中画模式? [打印本页]

作者: jackpc    时间: 2015-6-19 16:57
标题: 如何在客户端进行视频聊天时使用画中画模式?
如何在客户端进行视频聊天时使用画中画模式?
在C#WinForm程序代码里如何实现画中画视频聊天模式?求实现的代码,谢谢。

作者: 廖斌    时间: 2015-6-19 17:00
您好,可以将显示视频的控件叠成画中画形式试下?
作者: 廖斌    时间: 2015-6-19 17:00
廖斌 发表于 2015-6-19 17:00
您好,可以将显示视频的控件叠成画中画形式试下?

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

从AnyChatCallCenter的代码工程里面看不出是如何实现两个并列用户的视频聊天模式,应该使用Panle“pan_conversation”来呈现的,是否是在底层控制了这种并行模式?求大侠帮忙解决。
作者: 廖斌    时间: 2015-6-19 18:17
jackpc 发表于 2015-6-19 17:18
从AnyChatCallCenter的代码工程里面看不出是如何实现两个并列用户的视频聊天模式,应该使用Panle“pan_co ...

您好,底层没有控制视频的界面布局,都是通过控件来控制的。AnyChatCallCenter就是用panl来控制的,调整panl的布局就行了
作者: jackpc    时间: 2015-6-23 17:15
廖斌 发表于 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
jackpc 发表于 2015-6-23 17:15
画中画的实现代码如下:
private void SetVideoSize()
        {

您好,自己的视频,是采集之后直接渲染在控件中的,是没有经过编码的,所以比较清晰。而对方的视频是经过编码传输过来的,有压缩。
作者: 廖斌    时间: 2015-6-23 17:26
廖斌 发表于 2015-6-23 17:24
您好,自己的视频,是采集之后直接渲染在控件中的,是没有经过编码的,所以比较清晰。而对方的视频是经过 ...

默认我们设置编码视频参数为:分辨率320x240,码率为90Kbps,是比较低的视频参数。若想要清晰一些,可以将视频参数设置高一些,参考视频参数:
1、分辨率320x240,码率为150Kbps
2、分辨率640x480,码率为400Kbps



作者: 佰锐科技-杨子鳄    时间: 2015-6-23 17:27
jackpc 发表于 2015-6-23 17:15
画中画的实现代码如下:
private void SetVideoSize()
        {

您好,可能是对方(大图)设置的参数有问题。
作者: 廖斌    时间: 2015-6-23 17:27
廖斌 发表于 2015-6-23 17:26
默认我们设置编码视频参数为:分辨率320x240,码率为90Kbps,是比较低的视频参数。若想要清晰一些,可以将 ...

设置的方法有两种
1、通过服务器那边来配置(AnyChatCoreServer.ini),参考
http://bbs.anychat.cn/forum.php? ... &extra=page%3D1
2、通过客户端调用api来设置。
作者: jackpc    时间: 2015-6-23 17:28
廖斌 发表于 2015-6-23 17:24
您好,自己的视频,是采集之后直接渲染在控件中的,是没有经过编码的,所以比较清晰。而对方的视频是经过 ...

那如果我希望实现的画中画显示对方的大图能看起来清晰一些,代码应该如何调整才能实现?求大侠给予帮忙,谢谢。
我在AnyChatCoreServer.ini里面配置了
[Video Settings]
VideoWidth=1920
VideoHeight=1080
好像没起作用。
作者: 廖斌    时间: 2015-6-23 17:34
jackpc 发表于 2015-6-23 17:28
那如果我希望实现的画中画显示对方的大图能看起来清晰一些,代码应该如何调整才能实现?求大侠给予帮忙, ...

设置了分辨率之后,还需要设置相应的码率,才会有效果的。建议设置的参数参考我之前的回帖

TSZ2)8N7N{L9%M61}F[O.jpg (161.97 KB, 下载次数: 2983)

TSZ2)8N7N{L9%M61}F[O.jpg





欢迎光临 AnyChat技术支持论坛 (http://bbs.anychat.cn/) Powered by Discuz! X3