WPF视频处理中AVIStreamRead读取出来后视频流的处理

dpj_1980 2014-06-12 05:20:38
最近用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文件,还是分开来分别写
...全文
261 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
I_am_Z 2014-06-17
  • 打赏
  • 举报
回复
好像不能自己回复自己结贴的吧!可以无满意结贴,但那样,就影响你的结贴率了。
Bonjour-你好 2014-06-16
  • 打赏
  • 举报
回复
我记得见版主说过,没有别人回复自己的帖,自己是可以回收的,分数也是全返还。 ------------------------------------------------------------------------------------------------------------------- 对于楼主的问题,还真的不懂,不过既然对方能叫你用AVIStreamRead去读取流,那么你的其他问题,我认为对方也能回答你的吧。
dpj_1980 2014-06-16
  • 打赏
  • 举报
回复
没人吗?来个人回复个结贴也好的

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧