VB如何编字典压缩程序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB如何编字典压缩程序?相关的知识,希望对你有一定的参考价值。

参考技术A 待压缩的文件在
http://202.99.99.42/read/frmfcus.frx
压缩算法的代码很长我就不贴了
vb6中用
zlib.dll实现压缩/解压缩
字节数组
http://www.chenoe.com/blog/article.asp?id=2046
转贴请注明出处
作者:塞北雪貂
Option
Explicit
'Declares
Private
Declare
Sub
CopyMemory
Lib
"kernel32"
Alias
"RtlMoveMemory"
(hpvDest
As
Any,
hpvSource
As
Any,
ByVal
cbCopy
As
Long)
Private
Declare
Function
Compress
Lib
"zlibwapi.dll"
Alias
"compress"
(dest
As
Any,
destLen
As
Any,
src
As
Any,
ByVal
srcLen
As
Long)
As
Long
Private
Declare
Function
uncompress
Lib
"zlibwapi.dll"
(dest
As
Any,
destLen
As
Any,
src
As
Any,
ByVal
srcLen
As
Long)
As
Long
Private
Const
OFFSET
As
Long
=
&H8
'压缩数组
Public
Function
CompressByte(ByteArray()
As
Byte)
As
Boolean
Dim
BufferSize
As
Long
Dim
TempBuffer()
As
Byte
'Create
a
buffer
to
hold
the
compressed
data
BufferSize
=
UBound(ByteArray)
+
1
BufferSize
=
BufferSize
+
(BufferSize
*
0.01)
+
12
ReDim
TempBuffer(BufferSize)
'Compress
byte
array
(data)
CompressByte
=
(Compress(TempBuffer(0),
BufferSize,
ByteArray(0),
UBound(ByteArray)
+
1)
=
0)
'Add
the
size
of
the
original
data
Call
CopyMemory(ByteArray(0),
CLng(UBound(ByteArray)
+
1),
OFFSET)
'Remove
redundant
data
ReDim
Preserve
ByteArray(0
To
BufferSize
+
OFFSET
-
1)
CopyMemory
ByteArray(OFFSET),
TempBuffer(0),
BufferSize
End
Function
'解压缩数组
Public
Function
UnCompressByte(ByteArray()
As
Byte)
As
Boolean
Dim
origLen
As
Long
Dim
BufferSize
As
Long
Dim
TempBuffer()
As
Byte
'Get
the
original
size
Call
CopyMemory(OrigLen,
ByteArray(0),
OFFSET)
'Create
a
buffer
to
hold
the
uncompressed
data
BufferSize
=
origLen
BufferSize
=
BufferSize
+
(BufferSize
*
0.01)
+
12
ReDim
TempBuffer(BufferSize)
'Decompress
data
UnCompressByte
=
(uncompress(TempBuffer(0),
BufferSize,
ByteArray(OFFSET),
UBound(ByteArray)
-
OFFSET
+
1)
=
0)
'Remove
redundant
data
ReDim
Preserve
ByteArray(0
To
BufferSize
-
1)
CopyMemory
ByteArray(0),
TempBuffer(0),
BufferSize
End
Function

使用ffmpeg通过编解码器压缩后从网络摄像头获取所有字节流?

【中文标题】使用ffmpeg通过编解码器压缩后从网络摄像头获取所有字节流?【英文标题】:Get all bytes of stream from webcam after being compressed by codec with ffmpeg? 【发布时间】:2014-08-14 02:05:57 【问题描述】:

我需要从网络摄像头捕获视频流的每个字节 - 在使用 commandline-ffmpeg 使用编解码器对其进行压缩之后。

那么,您能否介绍一下 ffmpeg 命令行的外观以及将输出流导入我由 VB6 或 VB.net 编写的程序的策略? (我需要处理每一个字节!)非常感谢任何建议。


更新:我想知道是否可以将输出保存为硬盘上的“avi”文件,同时使用我的程序读取保存文件的内容。我可以在保存(附加)文件时播放我检索的“avi 文件的一部分”吗?除了“avi”之外,还有什么更好的文件格式可以同时读写(录音和播放)?

或者任何更好/更快的解决方案?

【问题讨论】:

不完全确定,但您需要使用 DirectShow 过滤器。这是捕获音频的方法:ffmpeg -nostats -f dshow -i audio="S/PDIF (M-Audio Delta AP 192)" -acodec mp3 -f mp3 -ab 谢谢!我看到有些人将输出用作 url(例如“192.168.1.123:8090”),但我想将流输入到我的程序中,你知道怎么做吗? 使用 STDIO。最后一个参数应该是- @Brad :你能解释一下STDIO和最后一个参数“-”吗?我刚刚将最后一个参数尝试为“-”,但出现错误“[NULL @ 03714500] 无法为 'pipe:' pipe:: Invalid argument”找到合适的输出格式” 使用我最初发布的命令。您没有指定任何格式,为什么将stdio 放在那里? ffmpeg -f dshow -i video="Lenovo EasyCamera" -f mp4 - 什么的。您至少需要指定输出格式,最好也将输出编解码器设置为您的规范。此外,您不想在命令提示符下运行它,否则原始数据将被转储到您的控制台。如果这样做,至少使用> someFile 输出到文件。 【参考方案1】:

请浏览页面https://trac.ffmpeg.org/wiki/Capture/Webcam 那里清楚地提到了如何使用 ffmpeg 捕获网络摄像头视频。 是的,您可以将 avi 流保存到磁盘并同时从中读取,我相信这在 linux 中是可能的,因为没有文件锁定。 或者您可以写入管道并逐帧从管道中读取它。 用于捕获视频并将其写入管道的 Linux 示例。 从 /dev/video0 读取

ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 -f rawvideo -pix_fmt yuv420p pipe1。

你应该首先创建 pipe1 来运行这个命令,现在你可以从这个管道中读取。 Piple 是 linux 中的 FIFO 数据结构,它将在读取数据时刷新。所以这将满足您的要求。

【讨论】:

我已经在 Windows 中解决了这个问题,但您的回答肯定对许多其他 linux 用户有用。 @vantrung-cuncon 也可以为 Windows 用户提供答案(Satyam 提供的链接也有 Windows 示例)。

以上是关于VB如何编字典压缩程序?的主要内容,如果未能解决你的问题,请参考以下文章

我想用VB写一个压缩图片的程序,应该怎么写

如何将文件 .cpp 编译为带有压缩功能的 exe? [关闭]

在 VB.net 中解压缩文件 [关闭]

VB调用WinRAR.exe 为压缩文件添加注释

如何解压缩嵌套字典,其中并非每个***键都具有所有二级键?

查找用于 hadoop 文件的压缩编解码器