Directshow 捕获视频保存为文件时,能否实时保存?

happyhhb 2011-08-09 12:42:06
Directshow 捕获视频保存为文件时,生成的文件是 0 字节的,直到结束了程序,或者停止了graph,才会把捕获数据写到文件里
我希望它一边捕获就一边保存,我该如何实现呢?

请各位大虾指教,谢谢 ^_^

原来的代码:
//开始捕捉视频为avi
HRESULT CCaptureVideo::CaptureVideoToAVI(CString inFileName)
{
HRESULT hr=0;

// 先停止视频
m_pMC->Stop();

//创建一个Mux,设置文件名,注意该函数的第二个参数的类型
hr = m_pCapGB->SetOutputFileName(&MEDIASUBTYPE_Avi, inFileName.AllocSysString(), &m_pMux, NULL );
//改到字幕后面截取,让捕获的视频也有字幕
hr = ConnectFilters(m_pGB,m_pSmartTee_1,m_pMux, 0); //0,连接capture引脚

m_pMux->Release();
// 恢复视频
m_pMC->Run();

return hr;
}
...全文
256 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kris_bu 2012-04-10
  • 打赏
  • 举报
回复
这样就需要视频分割,并记录视频断点了。。。
Kris_bu 2012-04-10
  • 打赏
  • 举报
回复
敢为楼主问题解决了么,如果不是实时保存,可不可以每隔一段很短的时间保存一次,比如说5秒钟保存一次呢?
ArcRain 2011-08-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 happyhhb 的回复:]

同一个 m_pMux ,我连接保存为avi,不能实时,但如果连接 xvid 保存为 mpeg4,倒是可以基本实时保存,这是不是说明不是 m_pMux 的问题?

for_onxx,你说的情况很奇怪哦,是不是你的 mux 不对啊
[/Quote]

你确定用到的mux是同一个mux吗?
因为保存AVI和保存MPEG4已经是两种不同的文件格式了,所以可能用得不是同一个mux,写文件的操作也相应的会有差异。
一般没有接口来更改这种保存设置的,除非有接口提供出来。
happyhhb 2011-08-13
  • 打赏
  • 举报
回复
请大家帮顶顶,这个问题困扰我很久了,谢谢
happyhhb 2011-08-13
  • 打赏
  • 举报
回复
我试过了,如果录制的时候直接拔电,重新开机打开录制文件,提示:无效或损坏文件
ArcRain 2011-08-13
  • 打赏
  • 举报
回复
我觉得如果两种编码都可以进行录制,且录制的时间没有丢失的话,是否实时写入文件应该影响不大的。
happyhhb 2011-08-13
  • 打赏
  • 举报
回复
dream238,抱歉哦,是我没有说清楚,在连接方面的代码如下:


//开始捕捉视频为avi
HRESULT CCaptureVideo::CaptureVideoToAVI(CString inFileName)
{
HRESULT hr=0;

m_pMC->Stop();

hr = m_pCapGB->SetOutputFileName(&MEDIASUBTYPE_Avi, inFileName.AllocSysString(), &m_pMux, NULL );
hr = ConnectFilters(m_pGB,m_pSmartTee_1,m_pMux, 0); //0,连接capture引脚
m_pMux->Release();

m_pMC->Run();

return hr;
}

//捕获视频为mpeg4
HRESULT CCaptureVideo::CaptureVideoToMPEG4(CString inFileName)
{
HRESULT hr=0;

m_pMC->Stop();

m_pGB->AddFilter(m_pXviDCodec,L"99 Xvid MPEG-4 Codec");
m_pXviDCodec->Release();

hr = m_pCapGB->SetOutputFileName(&MEDIASUBTYPE_Avi, inFileName.AllocSysString(), &m_pMux, NULL );
hr = ConnectFilters(m_pGB,m_pSmartTee_1,m_pXviDCodec, 0); //0,连接capture引脚
hr = ConnectFilters(m_pGB,m_pXviDCodec,m_pMux, 2); //2,默认自然连接
m_pMux->Release();

m_pMC->Run();

return hr;
}


难道真的没办法达到实时保存的目的吗?谢谢赐教^_^
happyhhb 2011-08-11
  • 打赏
  • 举报
回复
谢谢 dream238 ,如何更改设置,让它实时保存呢?
同一个 m_pMux ,我连接保存为avi,不能实时,但如果连接 xvid 保存为 mpeg4,倒是可以基本实时保存,这是不是说明不是 m_pMux 的问题?

for_onxx,你说的情况很奇怪哦,是不是你的 mux 不对啊
for_onxx 2011-08-10
  • 打赏
  • 举报
回复
可以write filter 保存为AVI等视频文件,但我在录像的时候,明明是录了1分钟,视频的长度却为12分钟,而且有60M大,不明白是什么原因
ArcRain 2011-08-09
  • 打赏
  • 举报
回复
有些MUXER可能自己有缓冲区,直到缓冲区满了才会写入文件,你最终保存出来的文件有多大?
Dxtory 中文版功能 无损捕获 Dxtory 的编解码器可以原样记录原始像素数据。 您可以通过无损视频源获得最高质量。 分布写入 高比特率捕获的第一个瓶颈是存储的写入速度。 如果是具有两个或更多存储的环境,则可以使用此功能提高写入速度。 没有必要使用特殊的文件系统。 多次选择保存数据的文件夹,如果完成速度设置,将完成准备工作。 多个音频源录音 像游戏声音和麦克风输入一样,可以同录制两个或多个音频源。 它保存在 AVI 文件的独立流中,以后可以单独编辑。(在 Windows XP 中,需要两个或更多音频设备。) 支持的 VFW 编解码器 支持第三方 VFW 编解码器。 用户可以选择喜欢的视频编解码器。 DirectShow 输出 捕获数据可以作为 DirectShow 接口的视频源进行访问。 它可以被指定为广播的视频源。 截图 屏幕截图可以以各种格式保存。 支持 API DirectX12、DirectX11、DirectX10、DirectX9、DirectX8、DirectX7、DirectDraw、OpenGL、Vulkan 支持操作系统 Windows 10、Windows 10 x64、Windows 8.1、Windows 8.1 x64、Windows 8 、Windows 8 x64、Windows 7 、Windows 7 x64、Windows Vista、Windows Vista x64、Windows XP、Windows XP x64 支持的指令集 SSE2、SSE3、SSSE3、SSE4.1、AVX、AVX2 Dxtory 需要电脑上安装 .NET Framework 4.0 以上运行环境才可以正常运行。
TVideoGrabber_9.1.1.2官方demo,使用我资源中的lincese可以直接使用,用于图像解码功能强大,可支持各种摄像头和图像格式 TVideoGrabber是一个用于C#.NET,VB.NET,C ++,Delphi,C ++ Builder和ActiveX兼容应用程序开发的视频捕捉/媒体播放器SDK。 TVideoGrabber功能强大且直观,将帮助您节省间,金钱和精力,将视频和/或音频功能纳入您的项目中。 TVideoGrabber可捕获和记录来自大多数视频捕捉设备(如USB网络摄像头,USB模拟捕捉设备,IP摄像头,桌面以及用作视频源的一组位图)的视频和音频流。 通过安装我们的可选RTSP DirectShow源过滤器,您可以捕获RTSP,RTMP,HTTP,Shoucast和其他各种流源。 RTSP过滤器可让您将流媒体源保存文件而无需转码,并且在运行中生成新文件不会丢失帧。 TvideoGrabber还支持采用罗技C920(H264),Blackmagic Decklink,Hauppauge Colossus等硬件编码器捕捉设备。 大多数编码格式都是本地支持的,或者使用第三方编解码器。 您可以将音频/视频直接或通过Windows Media服务器流式传输到网络。 TVideoGrabber也是一个先进的媒体播放器,可以播放正常速度的音频/视频剪辑,更快,更慢,前进和后退,逐个或通过播放列表。 可以捕获帧,在预览,录制或播放过程中执行文本/图形叠加,从另一TVideoGrabber组件执行PIP视频,应用视频处理(如旋转,裁剪等)。 TVideoGrabber可以将多个剪辑合并为一个剪辑,将剪辑分割成更小的剪辑,并将其重新编码为不同的格式。 TVideoGrabber包含以下功能的单个组件: - 视频预览 - 视频录制, - 声音录制, - 媒体播放器, - 合并/分割视频和音频CLIPS, - 帧捕获, - 图形和文本覆盖, - 来自另一个TVIDEOGRABBER的PIP视频(画中画) - IP CAMERA SUPPORT, - 运动检测, - 网络音频/视频流媒体, - 视频处理, - 屏幕(或窗口)录制, - 视频剪辑从图像中建立, - 重新编码为其他格式, - ZOOM / CROP, - 音频VU米, - 双显示,
与 MPlayer 一样从 Linux 平台移植而来的 KMPlayer (简称KMP)几乎可以播放您系统上所有的影音文件。通过各种插件扩展 KMP 可以支持层出不穷的新格式。当然 KMPlayer 也推出了 Android 哦。KMPlayer 播放器作为一款经典的播放器是您电脑放电影不可缺少的工具哦。 来自韩国的影音全能播放器 KMPlayer 中文版来自韩国的影音全能播放器 KMPlayer 中文版 KMPlayer 简称 KMP,早期名叫WaSaVi播放器。作者姜龙喜(韩国),历七年自主开发的朝鲜语多媒体图形视窗工程免费项目。KMPlayer是一套将网络上所有能见得到的解码程式(Codec)全部收集于一身的影音播放软件;此外,KMPlayer还能够播放DVD与VCD、汇入多种格式的外挂字幕 档、使用普及率最高的WinAMP音效外挂与支援超多种影片效果调整选项等。 KMPlayer – The Professional Media Player!,它支持 Winamp 2/5 的输入、常规、DSP、视觉效果、媒体库插件。无须注册表支持直接调用 Directshow滤镜!FFdshow 的视觉特效系统~超强的 GUI 界面~安装电视卡后可以直接代替原软件直接收看电视~支持播放 DVD/VCD 以及绝大多数电脑的媒体文件(AVI 支持 Xvid/DivX/3vid/H264 OGG/OGM/MKV 容器/AC3/DTS 解码~Monkey Audio 解码~)此播放器除了会将自己的配置信息写入注册表外绝对绿色!KMplayer内置常见的所有解码器,包括real,QT等。 KMPlayer以其强大的操控功能在众多免费播放器中逐渐显示其开发实力。底层调用了WMP的内核DirectShow。外部同支持临挂接Windows下的全部解码器。通过各种插件扩展,KMP可以支持层出不穷的新格式。直接从Winamp继承的插件功能,能够直接使用winamp的音频 、输入、视觉效果插件;而通过其独有的扩展能力,只要你喜欢,可以选择使用不同解码器对各种格式进行解码。 只要安装了它,你不用再另外安装 一大堆转码程序,就能够顺利观赏所有特殊格式的影片了。 KMPlayer 优势介绍 KMPlayer把网络上所有能见得到的解码程式(Codec)全部收集,支持大多数的影片、音乐、图片等格式。播放影片可以作多种调整,例如影像过滤、声道、亮度、画面缩放、画面移动、跳转到5秒~10分钟等等。而在播放音乐可以设定音乐模式、Bass、立体声等等,也可载装Winamp的插件。支持自定按键,支持更换Skin。支持撷取影片画面和声音的功能,不再需要安装其他的软件就能把声音或影片画面撷取出来。 KMPlayer强大的档案支援功能深受用家欢迎,支持的影片档包括:AVI、RealMedia、MPEG 1/2/4.ASF、MKV、OGM、、FLV、VCD、SVCD、MP4等;AVI 支援 Xvid/DivX/3vid/H264 OGG/OGM/MKV 容器/AC3/DTS 解码Monkey Audio 解码等。支援的声音档:APE、MP3.WAV、MPC、Flac、MIDI等。支援的图片档:BMP、 GIF、JPEG、PNG等。支援BIN、ISO、IMG、NRG制成的音乐格式光碟影档。 捕获功能 Kmplayer可以说是影音播放器中的全能王。或许你只用它来听音乐、看电影,如果仅仅是这样的话,也真对不起开发者了。实际上Kmplayer有很多优点,捕获功能就是其中一个,下面我们来看看。 KMPlayer 中文版 1.捕获音频:选择此项后,会弹出“音频捕获”对话框,在这里可以指定输出路径及文件名,然后单击“开始”按钮,即可将当前正在播放的视频的音频信息保存在一个MP3文件当中,简单说就是将电影的声音提取出来。 优点:方便,声音捕获与电影观看同步,不影响观看效果,且无需占用额外间。 适用场合:当看到经典的外国原声大片,将音频信息捕获下来放到MP3中,对英语学习有帮助。 2.捕获视频文件:一般来说捕获视频文件视频选项最好选择直接复制视频流(仅对h.264/avc等编码的视频有效),因为kmplayer本身不安装编码器的情况下是无法正确重编码捕获视频的。音频自然推荐用ac3编码器。最好是下载一个x.264vfw编码器,这样的话即使是非h.264/avc等编码的视频在不能使用直接复制视频流的情况下也能通过重编码视频流来正常捕获视频文件了。 优点:同捕获音频类似,可实现边看边转换且无需额外的转换软件。 适用场合:从网上下载的影片大部分是RM或RMVB格式的,Nero不支持,就有必要将其转换成AVI格式。 3.“捕获画面(您所看到的)为…”:实现对影片截图。经常写稿的朋友可

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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