DxPackNet 5.视频高质量的压缩和传输
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.视频高质量的压缩和传输的更多相关文章
- 实时 + 高清 + 超压缩,阿里云视频云发布业内首款 VVC 编码器 Ali266
基于新一代国际视频编解码标准 H.266/VVC,阿里云视频云近日发布了实时高清编码器 Ali266,有力推动 H.266/VVC 标准应用的落地,真正开启 H.266/VVC 的商用之路,并强力赋能 ...
- Unity3d 播放高质量视频解决方案
Unity3d 播放高质量视频解决方案~ 最近在折腾一个视频游戏.真的是一个视频游戏,游戏主背景是个大视频.可能切换三四个视频,而且需要无缝切换. 平台是安卓,蕊片是rockclip.找了各式各样的插 ...
- AliIAC 智能音频编解码器:在有限带宽条件下带来更高质量的音频通话体验
随着信息技术的发展,人们对实时通信的需求不断增加,并逐渐成为工作生活中不可或缺的一部分.每年海量的音视频通话分钟数对互联网基础设施提出了巨大的挑战.尽管目前全球的互联网用户绝大多数均处于良好的网络状况 ...
- 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点
深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 2011-12-28 23:00 by 汤姆大叔, 139489 阅读, 119 评论, 收藏, 编辑 才华横溢的 ...
- Flex中设置Camera的视频清晰质量的最佳配合
今天需要设置Flex中的Camera组件的一些属性,后来发现清晰度不是很高,于是捣鼓了上午半天,设置了很多的参数,竟然发现手册上就是有现成的一些设置方法,郁闷!不过我还是专门设置了几个有用和必要的属性 ...
- iOS书摘之编写高质量iOS与OS X代码的52个有效方法
来自<Effective Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法>一书的摘要总结 一.熟悉Objective-C 了解Objective-C语言的起源 ...
- 高质量JavaScript代码书写基本要点
翻译-高质量JavaScript代码书写基本要点 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/ ...
- [转] 翻译-高质量JavaScript代码书写基本要点 ---张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1173 原文作者:St ...
- 视频主观质量评价工具:MSU Perceptual Video Quality tool
MSU Perceptual Video Quality tool是莫斯科国立大学(Moscow State University)的Graphics and Media Lab制作的一款视频主观评价 ...
随机推荐
- Redis集群方案怎么做?大牛给你介绍五种方案!
Redis集群方案 Redis数据量日益增大,而且使用的公司越来越多,不仅用于做缓存,同时趋向于存储这块,这样必促使集群的发展,各个公司也在收集适合自己的集群方案,目前行业用的比较多的是下面几种集群架 ...
- Linux网络设备驱动架构
Linux网络设备驱动程序体系结构分为四层:网络协议接口层.网络设备接口层.提供实际功能的设备驱动层以及网络设备与媒介层. (1)网络协议接口层向网络层协议提供统一的数据包收发接口,不论上层协议是AR ...
- python_如何设置文件缓冲类型
案例: 将文件内容写入到硬件设备时候,使用系统调用,这类IO操作时间长,为了减小IO操作,通常会使用缓冲区(有足够多数据才能调用). 文件缓冲行为分为:全缓冲,行缓冲,无缓冲 如何解决? open(' ...
- python---进程与线程
进程和线程 什么是线程(thread)什么是进程 线程:操作系统能够进行运算调度的最小单位.它被包含在进程中,是进程中的实际运作单位.是一串指令的集合 一个线程指的是进程中一个单一顺序的控制流,一个进 ...
- Linux安装ffmpeg
1.安装ffmpeg 简单步骤: A.首先去官网下载源码包,我的是ffmpeg-3.4.tar.bz2,下载之后上传至Linux准备安装,首先解压安装包: tar -xjvf ffmpeg-3.4 ...
- android .9图片的制作
android .9PNG图片制作 在android开发的过程中,我们经常因为没有好的美工图片失真,这样使界面看起来要逊色很多,有的时候可能我们会想在drawable-hdpi,ldpi,mdpi下放 ...
- Hibernate (三)
1 一对多的单向 示例:一个已经存在的学生,新建一个班级,然后将该学生加入到该班级之下 设置inverse="false" <?xml version="1.0&q ...
- 02_HTML5+CSS详解第三天
WebStorage简单的网页留言板用到的函数有3个1.saveStorage函数使用"new Date().getTime()"语句来获取当前的日期和时间戳,然后使用localS ...
- 【转】nagios使用带url的check_http检测主机
前一段时间在Cu论坛发现一个提问,问题是nagios关于检测主机http服务的.原帖地址http://bbs.chinaunix.net /forum.php?mod=viewthread&t ...
- 基于 xorm 的服务端框架 XGoServer
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...