加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

DxPackNet 5.视频高质量的压缩和传输

发布时间:2020-12-16 08:58:52 所属栏目:asp.Net 来源:网络整理
导读:DxPackNet 对视频的压缩和解压也提供了很好的支持,且系统不需要装第三方解码器哦~ 主要用到了?IxVideoEncoder 视频编码器 ?和?IxVideoDecoder 两个接口 ?这里只做简单的组件功能使用介绍,实际应用中可能涉及到 UDP分包,包顺序控制, 音视频传输协议制定,

DxPackNet 对视频的压缩和解压也提供了很好的支持,且系统不需要装第三方解码器哦~

主要用到了?IxVideoEncoder 视频编码器 ?和?IxVideoDecoder 两个接口

?这里只做简单的组件功能使用介绍,实际应用中可能涉及到 UDP分包,包顺序控制,

音视频传输协议制定, P2P,这就不在本文的讨论范围

        private void Form1_Load(object sender,EventArgs e)
        {
           
            server = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
            server.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"),38000));//绑定端口号
            threadRecv = new Thread( ThreadStart(ReviceMsg));
            threadRecv.Start();

            client = 38000);

            初始化视频编码环境
            IxVideoCoderEnv Env = DxFactory.CreateDxCompent<IxVideoCoderEnv>();
            Env.Init();
            创建编码器
            encoder = DxFactory.CreateDxCompent<IxVideoEncoder>();
            encoder.Quant = 30;视频质量 0~31 之间的数字 越小画质越好, 越大越流畅
            创建解码器
            decoder = DxFactory.CreateDxCompent<IxVideoDecoder>();

            cameras = DxFactory.CreateDxCompent<DxDeviceCollection>(DxDeviceCollection.ENVIRONMENT_CAMERAS);
            camCapture = DxFactory.CreateDxCompent<IDxCameraCapture>(this,panel1);
            camCapture.FrameCb = camerasFrameCb;
            camCapture.Init(cameras[0]);


        }
        byte[] outBuffer = new byte[1024 * 2];2M
        byte[] imgBuffer = private void camerasFrameCb(byte[] buffer,int size)
        {
            Array.Clear(outBuffer,压缩视频流
            int outSz = encoder.Encode(buffer,size,outBuffer);
            client.SendTo(outBuffer,outSz,SocketFlags.None,svpoint);客户端发送压缩后的视频流
        }
        void ReviceMsg() 服务端接收视频流后解压显示
        {
            byte[] bufferRecv=2];////2M
            while (!bExit)
            {
                if (server.Poll();
                    接收压缩流
                    int revLen = server.ReceiveFrom(bufferRecv,1)">ref clpoint1);
                    reviceSize += revLen;
                    Array.Clear(imgBuffer,imgBuffer.Length);
                    解压缩视频流
                     decoder.Decode(bufferRecv,revLen,imgBuffer);
                    this.BeginInvoke(new camerasFrameCbHandler(_camerasFrameCb),imgBuffer,1)">640 * 480 * 3);
                }
            }
        }

        delegate void camerasFrameCbHandler( size);
        public void _camerasFrameCb( size)
        {
            将视频流转换为帧图片
            Bitmap bmp = camCapture.BmpFromBuffer(buffer,size);
            if (bmp != null)
            {
                Image oimg = pictureBox1.Image;
                pictureBox1.Image = bmp;
                if (oimg != ) oimg.Dispose();
            }
        }

?效果图:

最后附上demo?VideoTransferDemo.zip??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读