WPF视频处理中AVIStreamRead读取出来后视频流的处理
最近用C#做项目碰到个处理AVI视频的项目,对方提供的AVI文件加了自己的私有格式,对方告诉我说用AVIStreamRead读取出来后,偏移40个字节就是视频的正式内容,那么我需要做的就是用AVIStreamRead读取出来后将视频写入到一个新的AVI文件,这样就把对方的私有格式去掉了.我碰到的问题是这样的:查到的资料,都是把把对方的视频转成图片,然后再压缩到一个新的AVI文件,用以下方式实现:VideoStream videoStream = GetVideoStream();
int startFrameIndex = (int)(videoStream.FrameRate * startAtSecond);
int stopFrameIndex = (int)(videoStream.FrameRate * stopAtSecond);
videoStream.GetFrameOpen();
Bitmap bmp = videoStream.GetBitmap(startFrameIndex);
VideoStream newStream = newFile.AddVideoStream(false, videoStream.FrameRate, bmp);
for (int n = startFrameIndex + 1; n <= stopFrameIndex; n++) {
bmp = videoStream.GetBitmap(n);
newStream.AddFrame(bmp);
}
videoStream.GetFrameClose();
这段代码是传入一个开始时间和结束时间,把这段时间内的视频每一帧都读出来,然后写到一个新的AVI,但是没有办法去掉他的私有格式,前面会有20帧到40帧不等的黑屏,然后我按照他说的用AVIStreamRead去读取流,代码如下: streamInfo = GetStreamInfo();
format = GetFormat();
//length in bytes = length in samples * length of a sample
streamLength = Avi.AVIStreamLength(aviStream.ToInt32()) * streamInfo.dwSampleSize;
IntPtr waveData = Marshal.AllocHGlobal(streamLength);
int result = Avi.AVIStreamRead(aviStream, 0, streamLength, waveData, streamLength, 0, 0);
if(result != 0){
throw new Exception("Exception in AVIStreamRead: "+result.ToString());
}
return waveData;
但是这样读出来的视频流waveData是一个IntPtr类型的,,不知道怎么样把这个先偏移40个字符可以写入到一个新的AVI文件,请高手不吝指教.同时再问一下,这个里面包含音视频流吗?是不是音视频可以通过这个流一起写到AVI文件,还是分开来分别写