C++下Directshow视频采集的问题(H.264,MP4)

xiangzi119 2014-04-23 11:23:27
现在要在一套系统中添加一个视频录制模块。
采集源是机器自带的采集卡。
经过Graphedit建模测试没有问题,系统中运行也貌似没有什么问题。

系统:Win7 64位、语言:C++
filter 如图(需要用IntelMedia SDK H.264编码,输出MP4文件)

现在需要解决的两个问题:
1) 如图相同的采集流程,在我们的系统中用代码方式实现相同的流程后,录出来的视频里面只有40到60分钟左右的样子,但是系统要求至少能录制8小时,不知道这个问题的原因是否跟下面这个问题是一个。
2) 录出来的视频在播放器中的进度跳上拖拽时很卡,用EsEye分析视频,发现只有第一帧时I-帧,判断可能是关键帧设置的问题,但是在filter的接口中,好像无法设置关键帧,求教如何设置关键帧。

希望能获得这方面专家的指点。多谢!

...全文
621 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellscythe 2015-04-29
  • 打赏
  • 举报
回复
请问一下你是怎么把采集到的视频流压缩为H.264?我不太会压缩,在自己的电脑上用DirectShow采集的自带摄像头,但是录像保存文件时,文件太大,请问该怎么压缩?
xiangzi119 2014-05-06
  • 打赏
  • 举报
回复
多谢各位的回答。 最终用了 Media Foundation 来做。 还是要好很多。 之前说的将write的framesize设置成1024*768后,MP4 的画质很差,原因是采集端的(采集卡连接一台电脑输出)分辨率设置时1920*1080的, 最后将framesize的设置直接copy 输入端的,就变成自适应了。 结果就是采集端分辨率设置多少,输出分辨率就是多少,画质OK。 但是framerate的设定不管怎么设置页设置不进去。 难道是根据当前压缩负荷来自适应的?
__cc__ 2014-04-28
  • 打赏
  • 举报
回复
5Mbps,压缩率很大了,未压缩的差不多80Mbps
xiangzi119 2014-04-28
  • 打赏
  • 举报
回复
引用 11 楼 neustar1 的回复:
额,那你有filter源码没?有的话,直接改filter内部初始化编码器设置就OK。
多谢回复。 可惜没有源码。 由于这个问题得不到解决,现在正在试验用Media Foundation 来做。 用了http://msdn.microsoft.com/zh-CN/library/windows/apps/aa371827#video_capture 这个例子。 但是将分辨率跳到1024*768后,画质很不好。不知道什么原因。 bitrate设置都改为5000000了。
__cc__ 2014-04-25
  • 打赏
  • 举报
回复
引用 6 楼 xiangzi119 的回复:
[quote=引用 5 楼 neustar1 的回复:] 参考 http://msdn.microsoft.com/en-us/library/windows/desktop/dd376011(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/dd376012(v=vs.85).aspx
非常感谢提供这个方法的信息。 非常激动的去debug了一下,发现我目前用的几个filter都不支持这个借口。。。。肿么办呢[/quote] 那这几个filter你是从哪得到的?
xiangzi119 2014-04-25
  • 打赏
  • 举报
回复
引用 5 楼 neustar1 的回复:
参考 http://msdn.microsoft.com/en-us/library/windows/desktop/dd376011(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/dd376012(v=vs.85).aspx
非常感谢提供这个方法的信息。 非常激动的去debug了一下,发现我目前用的几个filter都不支持这个借口。。。。肿么办呢
__cc__ 2014-04-25
  • 打赏
  • 举报
回复
引用 10 楼 xiangzi119 的回复:
[quote=引用 9 楼 neustar1 的回复:] 那就用SDK提供的接口设置参数,MFXVideoENCODE_Init
多谢回答! 我现在都是直接使用SDK封装好的filter,然后链接filter,输出文件。 中间没有太多其他操作,也就没有涉及到mfxSession的代码。 之前看到过这个接口,但是不知道该如何加入这段操作,最后放弃了。 如果能获得更详细的说明和指导,将不胜感激。[/quote] 额,那你有filter源码没?有的话,直接改filter内部初始化编码器设置就OK。
xiangzi119 2014-04-25
  • 打赏
  • 举报
回复
引用 9 楼 neustar1 的回复:
那就用SDK提供的接口设置参数,MFXVideoENCODE_Init
多谢回答! 我现在都是直接使用SDK封装好的filter,然后链接filter,输出文件。 中间没有太多其他操作,也就没有涉及到mfxSession的代码。 之前看到过这个接口,但是不知道该如何加入这段操作,最后放弃了。 如果能获得更详细的说明和指导,将不胜感激。
__cc__ 2014-04-25
  • 打赏
  • 举报
回复
引用 8 楼 xiangzi119 的回复:
[quote=引用 7 楼 neustar1 的回复:] 那这几个filter你是从哪得到的?
感谢你的及时回复,我这边 安装了 Intel Media SDK 2013。 因为要求要用H.264编码采集成Mp4格式的高清视频文件,所以用了这个SDK[/quote] 那就用SDK提供的接口设置参数,MFXVideoENCODE_Init
xiangzi119 2014-04-25
  • 打赏
  • 举报
回复
引用 7 楼 neustar1 的回复:
那这几个filter你是从哪得到的?
感谢你的及时回复,我这边 安装了 Intel Media SDK 2013。 因为要求要用H.264编码采集成Mp4格式的高清视频文件,所以用了这个SDK
__cc__ 2014-04-24
  • 打赏
  • 举报
回复
引用 4 楼 xiangzi119 的回复:
[quote=引用 3 楼 neustar1 的回复:] 两个问题应该不是一个原因,录制时间只有40-60分钟,说明系统停止运行了,打印日志跟踪一下看看哪里停了。 第二个问题,你使用了H.264Encoder,这个可以设置GOP信息
多谢回答,请问如何设置GOP信息[/quote] 参考 http://msdn.microsoft.com/en-us/library/windows/desktop/dd376011(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/dd376012(v=vs.85).aspx
xiangzi119 2014-04-24
  • 打赏
  • 举报
回复
引用 3 楼 neustar1 的回复:
两个问题应该不是一个原因,录制时间只有40-60分钟,说明系统停止运行了,打印日志跟踪一下看看哪里停了。 第二个问题,你使用了H.264Encoder,这个可以设置GOP信息
多谢回答,请问如何设置GOP信息
__cc__ 2014-04-24
  • 打赏
  • 举报
回复
两个问题应该不是一个原因,录制时间只有40-60分钟,说明系统停止运行了,打印日志跟踪一下看看哪里停了。 第二个问题,你使用了H.264Encoder,这个可以设置GOP信息
xiangzi119 2014-04-23
  • 打赏
  • 举报
回复


2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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