代码之家  ›  专栏  ›  技术社区  ›  Zafer

如何优化我的屏幕播放工具?

  •  4
  • Zafer  · 技术社区  · 14 年前

    我正在开发一个C++中的屏幕编辑工具。

    它基本上捕获桌面框架并创建一个AVI文件。算法如下:

    1. this->m_hThread=CreateThread(NULL,0,thScreenCapture,this,0,NULL);
    2. 在中捕获桌面 thScreenCapture 每秒n次(如5 fps)。

      obj->Capture();

    3. 在Capture()中,将位图数据附加到avi文件。

      this->appendBitmapToAvi(this->avifile, bmp);

    此实用程序还记录声音。因此,在方法thscreenscapture中,声音数据也被附加到avi文件中。

    我在寻找一个优化算法的解决方案。一个解决方案可能是在内存中缓冲帧,而不是动态地将所有帧附加到avi文件中。但这使得代码更加复杂,因为我必须处理在不同线程中捕获的声音数据。

    您建议如何在不丢失同步的情况下增加此实用程序支持的fps值?

    4 回复  |  直到 14 年前
        1
  •  1
  •   user206705 user206705    14 年前

    你自己写AVI文件吗?这是一项崇高的工作,但是有一些api可以帮助完成这项任务。

    如果你在windows平台上工作,我建议你考虑使用 DirectShow Media Foundation 将音频和视频多路复用到磁盘的API。DirectShow是 这个 用于在windows平台上进行A/V捕获、流式传输和muxing的API。

    This article on CodeProject

    基本上,采用参考时钟,帧被加时间戳。

    有一个非常重要的问题 active DirectShow community TMH's website 很值得一看——他是微软MVP,是社区的活跃成员。

    我希望这有帮助!

        2
  •  1
  •   Billy ONeal IS4    14 年前

    你可以看一下来源 other screencasting software CamStudio ,看看他们是怎么做的。

    如果您的程序是磁盘绑定的(我怀疑是这样),那么使用压缩可能会有所改进(这就是著名的程序,如Camtasia Studio的操作方式)

        3
  •  1
  •   Vite Falcon    14 年前

        4
  •  0
  •   Dolphin    14 年前

    你的目标是什么?如果你是在WindowsXP上工作的话,我会看看下面的一些DirectShow代码 http://tmhare.mvps.org/downloads.htm

    推荐文章