可可屏幕捕捉?

non*_*237 1 cocoa objective-c

你如何在Cocoa中捕获屏幕的NSImage?我需要知道最快的方式,因为我正在尝试制作一个截屏视频应用.

Pet*_*sey 8

请参阅OpenGLCaptureToMovie示例.我要补充一点,你应该使用Quartz Display Services的刷新通知API而不是计时器.

请注意,OpenGL示例不会生成NSImage对象.这样做是没有意义的,因为你不能将它们放入电影中.好吧,我猜你可以在指定的帧时间分配一个NSImage,但我不知道它对压缩有多好.

说到压缩,请以最高质量使用动画编解码器进行录制.这提供了足够的压缩,以免压倒磁盘,当然也不会压倒处理器.然后,您可以提供转换选项,例如H.264,适用于iPhone的H.264和适用于iPod的H.264.您还应该允许用户保留原始文件; 一些网站,如Vimeo,将接受它并允许访问者下载它.

  • 老答案很老.今天,我将使用CGWindowList API进行捕获,并且只有在CGWindowList证明太慢的情况下才切换到OpenGL. (2认同)
  • @Noitidart:https://developer.apple.com/library/mac/documentation/Carbon/Reference/CGWindow_Reference/ (2认同)
  • @Noitidart:我认为它被删除是因为这是一种古老而肮脏的方式。是的,电影速度有点太快,无法使用 CGWindowList 进行屏幕截图。对于 10.7 及更高版本的屏幕录制,您需要 AVCaptureScreenInput:https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVCaptureScreenInput_Class/ (CGWindowList 仍然是捕获单个静态图像的理想选择。) (2认同)
  • (另外,我认为没有办法在 AVFoundation 中使用动画编解码器。除非您能找到使用其他支持的编解码器之一的理由,否则您将直接录制到 H.264。) (2认同)