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"), ));//绑定端口号
threadRecv = new Thread(new ThreadStart(ReviceMsg));
threadRecv.Start(); client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
svpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), ); //初始化视频编码环境
IxVideoCoderEnv Env = DxFactory.CreateDxCompent<IxVideoCoderEnv>();
Env.Init();
//创建编码器
encoder = DxFactory.CreateDxCompent<IxVideoEncoder>();
encoder.Quant = ;//视频质量 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[]); }
byte[] outBuffer = new byte[ * * ];//2M
byte[] imgBuffer = new byte[ * * ];//2M
private void camerasFrameCb(byte[] buffer, int size)
{
Array.Clear(outBuffer, , outBuffer.Length);
//压缩视频流
int outSz = encoder.Encode(buffer, size, outBuffer);
client.SendTo(outBuffer,outSz,SocketFlags.None,svpoint);//客户端发送压缩后的视频流
}
private void ReviceMsg() //服务端接收视频流后解压显示
{
byte[] bufferRecv=new byte[ * * ];////2M
while (!bExit)
{
if (server.Poll(, SelectMode.SelectRead))
{
EndPoint clpoint1 = new IPEndPoint(IPAddress.Parse("127.0.0.1"), );
//接收压缩流
int revLen = server.ReceiveFrom(bufferRecv, SocketFlags.None, ref clpoint1);
reviceSize += revLen;
Array.Clear(imgBuffer, , imgBuffer.Length);
//解压缩视频流
int outSz = decoder.Decode(bufferRecv, revLen, imgBuffer);
this.BeginInvoke(new camerasFrameCbHandler(_camerasFrameCb), imgBuffer, * * );
}
}
} delegate void camerasFrameCbHandler(byte[] buffer, int size);
public void _camerasFrameCb(byte[] buffer, int size)
{
//将视频流转换为帧图片
Bitmap bmp = camCapture.BmpFromBuffer(buffer, size);
if (bmp != null)
{
Image oimg = pictureBox1.Image;
pictureBox1.Image = bmp;
if (oimg != null) oimg.Dispose();
}
}

效果图:

最后附上demo VideoTransferDemo.zip

DxPackNet 5.视频高质量的压缩和传输的更多相关文章

  1. 实时 + 高清 + 超压缩,阿里云视频云发布业内首款 VVC 编码器 Ali266

    基于新一代国际视频编解码标准 H.266/VVC,阿里云视频云近日发布了实时高清编码器 Ali266,有力推动 H.266/VVC 标准应用的落地,真正开启 H.266/VVC 的商用之路,并强力赋能 ...

  2. Unity3d 播放高质量视频解决方案

    Unity3d 播放高质量视频解决方案~ 最近在折腾一个视频游戏.真的是一个视频游戏,游戏主背景是个大视频.可能切换三四个视频,而且需要无缝切换. 平台是安卓,蕊片是rockclip.找了各式各样的插 ...

  3. AliIAC 智能音频编解码器:在有限带宽条件下带来更高质量的音频通话体验

    随着信息技术的发展,人们对实时通信的需求不断增加,并逐渐成为工作生活中不可或缺的一部分.每年海量的音视频通话分钟数对互联网基础设施提出了巨大的挑战.尽管目前全球的互联网用户绝大多数均处于良好的网络状况 ...

  4. 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点

    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 2011-12-28 23:00 by 汤姆大叔, 139489 阅读, 119 评论, 收藏, 编辑 才华横溢的 ...

  5. Flex中设置Camera的视频清晰质量的最佳配合

    今天需要设置Flex中的Camera组件的一些属性,后来发现清晰度不是很高,于是捣鼓了上午半天,设置了很多的参数,竟然发现手册上就是有现成的一些设置方法,郁闷!不过我还是专门设置了几个有用和必要的属性 ...

  6. iOS书摘之编写高质量iOS与OS X代码的52个有效方法

    来自<Effective Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法>一书的摘要总结 一.熟悉Objective-C 了解Objective-C语言的起源 ...

  7. 高质量JavaScript代码书写基本要点

    翻译-高质量JavaScript代码书写基本要点 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/ ...

  8. [转] 翻译-高质量JavaScript代码书写基本要点 ---张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1173 原文作者:St ...

  9. 视频主观质量评价工具:MSU Perceptual Video Quality tool

    MSU Perceptual Video Quality tool是莫斯科国立大学(Moscow State University)的Graphics and Media Lab制作的一款视频主观评价 ...

随机推荐

  1. Redis持久化磁盘IO方式及其带来的问题   有Redis线上运维经验的人会发现Redis在物理内存使用比较多,但还没有超过实际物理内存总容量时就会发生不稳定甚至崩溃的问题,有人认为是基于快照方式持

    转自:http://blog.csdn.net/kaosini/article/details/9176961 一.对Redis持久化的探讨与理解    redis是一个支持持久化的内存数据库,也就是 ...

  2. 反射应用--IOC和AOP

    反射最大的价值就是用来写框架,下面贴出自己的3篇代码,模拟实现SPING框架的bean工厂,IOC,AOP.当然这里重点是在利用反射实现功能,为了图方便,我用的是Properties文件,关于XML后 ...

  3. <%@include file="a.jsp"%> jsp引用jsp文件时候注意

    被包含的a.jsp文件:    a.jsp文件的page指令要么不要写.要么与主jsp文件的page指令一样.

  4. JDBC (二)

    1 使用JDBC进行批处理 当需要向数据库发送一批SQL语句的时候,应该避免向数据库一条条的发送执行,而应该采用JDBC的批处理机制,以提高执行效率. 实现批处理的方式一: Statement.add ...

  5. 【转】12 TOP Command Examples in Linux

    12个top命令 1. # top 2. # top,后输入shift+O,在“Current Sort Field:”中选左边的field对应的字母进行排序. 3. # top -u tecmint ...

  6. 基础知识全面LINUX

    学习Linux系统的重要性应该不用多说,下面我就对Linux的基础知识进行一个全面而又简单的总结.不过建议大家还是装个Linux系统多练习,平时最好只在Linux环境下编程,这样会大有提高. linu ...

  7. 【COOKIE 与 SESSION】

    一.相关概念 cookie的出现,解决http协议无状态特性 由于http协议无法保持状态,但实际情况,我们却又需要"保持状态",因此cookie就是在这样一个场景下诞生. 举例: ...

  8. Django跨域请求之JSONP和CORS

    现在来新建一个Django项目server01,url配置为 url(r'^getData.html$',views.get_data) 其对应的视图函数为get_data: from django. ...

  9. ansible基础及使用示例

    1 介绍 Ansible 是一个系统自动化工具,用来做系统配管理,批量对远程主机执行操作指令. 2 实验环境 ip 角色 192.168.40.71 ansible管控端 192.168.40.72 ...

  10. cdh版本的hue安装配置部署以及集成hadoop hbase hive mysql等权威指南

    hue下载地址:https://github.com/cloudera/hue hue学习文档地址:http://archive.cloudera.com/cdh5/cdh/5/hue-3.7.0-c ...