我在AgileIM的开发中解决视频/音频会话功能时,发现传输的音/视频数据量太大,通过一些格式转换(如BMP->JPG、或 帧间预测编码)可以适当减少带宽的需求,但是仍然不能满足需求,于是我想到了数据压缩,经过我测试、普通的音/视频数据经压缩后可以只有原来的一半大小,基本可以满足需要了。压缩/解压功能我借助了ICSharpCode.SharpZipLib 类库,为了更方便易用,我封装了ZipHelper类,实现如下:
ICSharpCode.SharpZipLib 类库可以从 这里下载。
public
static
class
ZipHelper
{
public static byte []Zip( byte []data)
{
MemoryStreammstream = new MemoryStream();
BZip2OutputStreamzipOutStream = new BZip2OutputStream(mstream);
zipOutStream.Write(data, 0 ,data.Length);
zipOutStream.Finalize();
zipOutStream.Close();
byte []result = mstream.ToArray();
mstream.Close();
return result;
}
public static byte []Unzip( byte []data)
{
MemoryStreammstream = new MemoryStream(data);
BZip2InputStreamzipInputStream = new BZip2InputStream(mstream);
byte []byteUncompressed = new byte [zipInputStream.Length];
zipInputStream.Read(byteUncompressed, 0 ,( int )byteUncompressed.Length);
zipInputStream.Close();
mstream.Close();
return byteUncompressed;
}
}
{
public static byte []Zip( byte []data)
{
MemoryStreammstream = new MemoryStream();
BZip2OutputStreamzipOutStream = new BZip2OutputStream(mstream);
zipOutStream.Write(data, 0 ,data.Length);
zipOutStream.Finalize();
zipOutStream.Close();
byte []result = mstream.ToArray();
mstream.Close();
return result;
}
public static byte []Unzip( byte []data)
{
MemoryStreammstream = new MemoryStream(data);
BZip2InputStreamzipInputStream = new BZip2InputStream(mstream);
byte []byteUncompressed = new byte [zipInputStream.Length];
zipInputStream.Read(byteUncompressed, 0 ,( int )byteUncompressed.Length);
zipInputStream.Close();
mstream.Close();
return byteUncompressed;
}
}
ICSharpCode.SharpZipLib 类库可以从 这里下载。
本文介绍了一种在AgileIM开发过程中遇到的音/视频数据压缩解决方案。通过使用ICSharpCode.SharpZipLib类库,作者封装了一个ZipHelper类来实现数据压缩与解压缩功能,有效减少了音/视频数据的带宽需求。
1785

被折叠的 条评论
为什么被折叠?



