Wpf 将原始视频/音频帧放入AVI(或其他容器)的最简单方法?

Wpf 将原始视频/音频帧放入AVI(或其他容器)的最简单方法?,wpf,video,directshow,Wpf,Video,Directshow,我正在使用编写一个小应用程序,我想录制一些视频-我的计划是,将最后n秒存储为原始音频/视频帧,然后在用户请求时将其写入AVI 有没有一种简单的方法将我从网络摄像头收集的数据传输到AVI文件中?诀窍是,我必须使用缓冲数据,我不能直接写一个新的DirectShow场景图来写出AVI文件——对于我的应用程序,相机一直在运行,用户发出信号表示拍摄结束(我们用了大约最后几秒钟) AVI不需要以任何方式进行压缩,我将通过表达式编码器来运行它。有什么想法吗?如果要缓冲数据,可以执行以下操作: 使用(请参阅)创

我正在使用编写一个小应用程序,我想录制一些视频-我的计划是,将最后n秒存储为原始音频/视频帧,然后在用户请求时将其写入AVI

有没有一种简单的方法将我从网络摄像头收集的数据传输到AVI文件中?诀窍是,我必须使用缓冲数据,我不能直接写一个新的DirectShow场景图来写出AVI文件——对于我的应用程序,相机一直在运行,用户发出信号表示拍摄结束(我们用了大约最后几秒钟)


AVI不需要以任何方式进行压缩,我将通过表达式编码器来运行它。有什么想法吗?

如果要缓冲数据,可以执行以下操作:

  • 使用(请参阅)创建捕获图,并将每个传入IMediaSample中的数据复制到内存缓冲区中(循环帧缓冲区有助于限制内存中的大小)
  • 在用户点击结束后,创建第二个用于写入文件的图形,将内存缓冲区中的数据输入样本抓取器 有几个问题:

  • 不要保留从SampleGrabber回调中获得的IMediaSample指针。每个DirectShow filtergraph都使用一个IMediaSamples内存池,如果您将它们全部取下,则会使该图处于饥饿状态
  • 从介质样本中复制时,请确保使用而不是。一些媒体样本填充在DWORD(4字节)边界上,您希望保留该边界以写入新的AVI文件