window media 编码器是怎么实现的?
最近用windows media format sdk 编码,
捕捉采集卡的数据,然后writesample。
在低分辨率下能正常工作,可是到了1280X720下,因为随着图像尺寸的变大,编码时间变长了,导致内存溢出。
可是用window media 编码器 在1280X720下确能正常的工作。
请问windows media 编码器是怎么实现编码的?
我的程序在运行时只有两个主要方法
一个是采集卡的回调 在其中保存图像buf
另一个是线程函数 一直从buf 提前数据 writesample
求指教!
[解决办法]
编码时间变长可以理解,内存溢出真心不理解。这filter怎么写的。。
[解决办法]
把内存做成链表或环形缓冲,如果采集太快,链表会越来越长,长到一定程度,或者暂停采集,或者清空链表。
[解决办法]
链表要加锁
[解决办法]
"消化没有采集快 "
丢失是必然的
解决的方法也有,一个线程采集,多开几个工作线程进行转码,不过逻辑上要把握好。
还有个方法,就是读出的来视频先保存在一个临时文件里,转码线程从这个文件里读数据,转码,再保存到另外文件里。类似边下载边播放。
对文件的读写比多线程对内存的操作稍容易一些,因为多线程还要考虑视频的顺序。你两个方法都试试看。
[解决办法]
其实临时文件就是个虚拟内存的文件,参考Windows核心编程。只不过不占用物理内存,视频数据再大也没关系,只要硬盘够用就可以。
[解决办法]
理论上windows media format sdk也是用 windows media encoder 核做编码,不应该有很大差别。
建议楼主确认一下同为 1280 x720 输入的情况下,输出分辨率,frame rate , bitrate。
另外跑media encoder的机器一定要好,跟老板说一下不要太抠门儿