当前位置: 代码迷 >> 多媒体/流媒体开发 >> window media 编码器是如何实现的
  详细解决方案

window media 编码器是如何实现的

热度:5475   发布时间:2013-02-26 00:00:00.0
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的机器一定要好,跟老板说一下不要太抠门儿
  相关解决方案