我用C# winform做了个摄像头录像程序,但是录制下来的视频一分钟就很大,我想用视频压缩方法。 c# .net winform 我用directshow做了...

作者&投稿:鬱晨 2024-06-30
我用C#做了个摄像头录制视频的程序,但是录制的视频一分钟就很大,有几百M。想用视频压缩压缩成几百KB。

你好:这个不怎么可能压缩到几百KB的,我是做监控系统的,我们公司做的录像录制5分钟大概不到200M,在相对质量和清晰度的情况下做的.如果你转化为flv格式的话,应该会小得多.希望能够帮到你

1.使用Backgroundworker组件创建后台线程处理图像的接收和显示,这个你自己决定怎么处理
2.拖拽窗体的时候,建议重新编写鼠标左键释放的事件处理代码,也就是在鼠标左键释放了之后再重绘窗体,之前只是一个虚拟的窗体。。。就像chrome那样
懂我的意思了么?不太了解情况,目前只能给出这两个建议,你把整个数据流的路线理清,看看瓶颈在哪
coolchae@gmail.com,email联系~

C#的我没有,我改过ultravnc的源码。。。哪个是一个视频监控的开源项目,但是里面涉及到视频压缩和解压,使用的是C++开发的,你可以参考下,解压和压缩的核心就是使用zlib库,这个库也是开源的,你也可以在C#中使用,抱歉没用过C#开发这个,只能帮到这啦~~~~楼下的给力点

''' <summary>
''' 压缩字节数据
''' </summary>
''' <param name="data"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function CompressBytes(ByVal data As Byte()) As Byte()
Dim ms As MemoryStream = New MemoryStream()
Dim gzip As System.IO.Compression.GZipStream = New Compression.GZipStream(ms, Compression.CompressionMode.Compress, True)
gzip.Write(data, 0, data.Length)
gzip.Close()
Return ms.ToArray()
End Function
''' <summary>
''' 解压字节数据
''' </summary>
''' <param name="data"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function DecompressBytes(ByVal data As Byte()) As Byte()
Dim ms As MemoryStream = New MemoryStream()
ms.Write(data, 0, data.Length)
ms.Position = 0
Dim gzip As System.IO.Compression.GZipStream = New System.IO.Compression.GZipStream(ms, Compression.CompressionMode.Decompress, True)
Dim output As MemoryStream = New MemoryStream()
Dim buff(4096) As Byte
Dim read As Integer = -1
read = gzip.Read(buff, 0, buff.Length)
While (read > 0)
output.Write(buff, 0, read)
read = gzip.Read(buff, 0, buff.Length)
End While
gzip.Close()
Return output.ToArray()
End Function
End Class

我也想知道


你是否需要了解?

为什么我玩dota用c总是赢不了,但玩辅助却很厉害,总是赢,而且经常会得mv...
答:你更倾向于去打架,而前期恰好不是C发挥的时间,前期打架C比较吃亏。所以你打后期容易输 建议可以玩一些伪核(剑圣之类能gank的伪核)或者游走型后期(混沌骑士之类前期gank能力较强的C)来过渡自己的dota玩法。这样前期既能打架,后期发育也能为团队做贡献。10分送我吧,谢了 ...

我是吉他初学者,我在用C和弦弹53231323时,第一个音好像不准(第五条...
答:一般是从低音弦往高音弦调 具体方法为:首先弹响六弦 六弦的标准音一般为E 这时注意调音器的显示 最上方的扇形区域显示的是此时的音比下方显示字母的音高还是低 如果偏左便是低 偏右便是高 下方字母右上方是升号 目前的图片上显示的是升B 最下方显示的是震动频率 一般标准音C为440 Hz 如果按照...

我想问一下用C语言写大数乘法有什么方法可以计算呢?可以由什么想这个计...
答:基本功能有3个 大数的数组表示。大数乘以小数,得到大数。大数加大数,得到大数。对于1,其实就是int数组的每个元素存储若干位。比如每个元素保存4个十进制位。[0]存储个十百千,[1]存储万、十万、百万、千万,诸如此类。一个数组保存一个大数。因此需要一个额外的int变量记录当前数组用了多少个元素(...

为什么要用字母c表示周长?还有,为什么要用字母s表示面积?请给我一个...
答:C就是英文字母Circumference的缩写,S就是英文字母Square的缩写,这些字母大多是有这样的来的。多边形的周长的长度也相等于图形所有边的和,圆的周长=πd=2πr (d为直径,r为半径,π),扇形的周长 = 2R+nπR÷180˚(n=圆心角角度)= 2R+kR (k=弧度)。圆:C=πd=2πr(d为...

我用stdio 2010编写C语言,刚学的。遇到这样一个问题:程序成功运行后,出 ...
答:你点错按钮或按错快捷键了吧 Ctrl+F5是运行,F5是调试 你可能是按了F5之类的,你又没加断点,当然运行结束就退出了。你要是不想每次都要按两个键,就照上面的方法,加个getchar();或者 system("pause");(需要加#include<windows.h>)

C语言求学,我用的是Mirsoft Visual C++ 6.0 怎样进行二进制转换为16进制...
答:每块用2进制的判断0000 就是 0,0001就是1,依次类推:(左边2进制 中间10进制 右边16进制)0010→2→2 0011→3→3 0100→4→4 0101→5→5 0110→6→6 0111→7→7 1000→8→8 1001→9→9 1010→10→A 1011→11→B 1100→12→C 1101→13→D 1110→14→E 1111→15→F 我想我说的...

我想知道怎么用C语言解决输入一个数字求各位数字相加的和
答:楼主,不用循环似乎不行,要简单可以使用字符数组来接收输入的数字再求和。void main(){ char c[111];int i=0;int a=0;scanf("%s",c);//输入一个数字,在111位之内,还想输入得更大,请把数组改大。while(c[i]!='\0') //判断是否读到字符串的结尾。{a=a+(c[i]-'0'); /...

为什么C语言我用fread读入数据会乱码,函数如下
答:应该是超出数组长度的问题,现在也没有电脑不方便调试代码,你可以自己先检查一下,读取的内容放到了哪里,输出的时候输出的是什么 可以一步一步打印,如果有问题再继续问

您好,我是用.c形式编写Sfunction,目的是将输入矩阵进行处理,然后输出...
答:果你输入的是一个向量,同样也会输出一个向量的。这个同m文件里面编程是一样的。MATLAB Function里面只能填写一个函数名称,无法编写m文件。如果你需要编写m文件的话,可以使用Embedded MATLAB Function ,我想你说的是这个。如果要输出多个数据,可以这样写:function y = fcn(u)y=[y1 y2 y3];这样...

c++ 中我用sring 接受c返回的char* 需要释放内存吗?
答:MSDN上对于string类型的模板类basic_string的构造函数的说明为:构造一个字符串,它为空、由特定字符初始化,或者是另一个字符串对象或 C 样式(以 null 终止)字符串的全部或部分的副本。具体请参考:网页链接 当char*类型变量赋值给string类型变量时,string类对象自身会分配内存并作字符串拷贝。当...