{"id":184,"date":"2008-11-04T16:10:14","date_gmt":"2008-11-05T00:10:14","guid":{"rendered":"http:\/\/fernyb.net\/blog\/?p=184"},"modified":"2008-11-04T16:10:14","modified_gmt":"2008-11-05T00:10:14","slug":"capturing-isight-from-macbook","status":"publish","type":"post","link":"http:\/\/fernyb.net\/blog\/2008\/11\/04\/capturing-isight-from-macbook\/","title":{"rendered":"Capturing iSight from Macbook"},"content":{"rendered":"<p>\nLately I&#8217;ve been writing Objective-C\/Cocoa code, and lately I&#8217;ve learned how-to capture video from an iSight on a Macbook. It&#8217;s actually easy. Here is the code. and I&#8217;ve also attached the example application I was writing so you can take a look at it.\n<\/p>\n<p>\n[<a href=\"\/downloads\/CameraSight-source.zip\">Download Source<\/a>]<br \/>\n[<a href=\"\/downloads\/CameraSight.zip\">Download Application<\/a>]\n<\/p>\n<div class=\"ruby\" style=\"width:490px;height:500px;overflow:scroll;padding:10px;background: #0d0e24;\">\n<pre><span class=\"comment\">#import &lt;Cocoa\/Cocoa.h&gt;<\/span>\r\n<span class=\"comment\">#import &lt;QTKit\/QTKit.h&gt;<\/span>\r\n\r\n\r\n<span class=\"attribute\">@interface<\/span> <span class=\"constant\">MyRecorderController<\/span> <span class=\"punct\">:<\/span> <span class=\"constant\">NSObject<\/span> <span class=\"punct\">{<\/span>\r\n  <span class=\"constant\">IBOutlet<\/span> <span class=\"constant\">QTCaptureView<\/span> <span class=\"punct\">*<\/span> <span class=\"ident\">mCaptureView<\/span><span class=\"punct\">;<\/span>\r\n  <span class=\"constant\">QTCaptureSession<\/span>       <span class=\"punct\">*<\/span> <span class=\"ident\">mCaptureSession<\/span><span class=\"punct\">;<\/span>\r\n  <span class=\"constant\">QTCaptureDeviceInput<\/span>   <span class=\"punct\">*<\/span> <span class=\"ident\">mCaptureDeviceInput<\/span><span class=\"punct\">;<\/span>\r\n<span class=\"punct\">}<\/span>\r\n\r\n<span class=\"punct\">-<\/span> <span class=\"punct\">(<\/span><span class=\"constant\">IBAction<\/span><span class=\"punct\">)<\/span><span class=\"ident\">startRecording<\/span><span class=\"punct\">: (<\/span><span class=\"ident\">id<\/span><span class=\"punct\">)<\/span><span class=\"ident\">sender<\/span><span class=\"punct\">;<\/span>\r\n<span class=\"punct\">-<\/span> <span class=\"punct\">(<\/span><span class=\"constant\">IBAction<\/span><span class=\"punct\">)<\/span><span class=\"ident\">stopRecording<\/span><span class=\"punct\">: (<\/span><span class=\"ident\">id<\/span><span class=\"punct\">)<\/span><span class=\"ident\">sender<\/span><span class=\"punct\">;<\/span>\r\n\r\n<span class=\"attribute\">@end<\/span>\r\n\r\n\r\n\r\n<span class=\"attribute\">@implementation<\/span> <span class=\"constant\">MyRecorderController<\/span>\r\n\r\n<span class=\"punct\">-<\/span> <span class=\"punct\">(<\/span><span class=\"constant\">IBAction<\/span><span class=\"punct\">)<\/span><span class=\"ident\">startRecording<\/span><span class=\"punct\">: (<\/span><span class=\"ident\">id<\/span><span class=\"punct\">)<\/span><span class=\"ident\">sender<\/span>\r\n<span class=\"punct\">{<\/span>\r\n  <span class=\"punct\">\/<\/span><span class=\"regex\"><\/span><span class=\"punct\">\/<\/span> <span class=\"constant\">Create<\/span> <span class=\"ident\">a<\/span> <span class=\"ident\">new<\/span> <span class=\"constant\">Capture<\/span> <span class=\"constant\">Session<\/span>\r\n  <span class=\"ident\">mCaptureSession<\/span> <span class=\"punct\">=<\/span> <span class=\"punct\">[[<\/span><span class=\"constant\">QTCaptureSession<\/span> <span class=\"ident\">alloc<\/span><span class=\"punct\">]<\/span> <span class=\"ident\">init<\/span><span class=\"punct\">];<\/span> \r\n  \r\n  <span class=\"punct\">\/<\/span><span class=\"regex\"><\/span><span class=\"punct\">\/<\/span><span class=\"constant\">Connect<\/span> <span class=\"ident\">inputs<\/span> <span class=\"keyword\">and<\/span> <span class=\"ident\">outputs<\/span> <span class=\"ident\">to<\/span> <span class=\"ident\">the<\/span> <span class=\"ident\">session<\/span>\r\n  <span class=\"constant\">BOOL<\/span> <span class=\"ident\">success<\/span> <span class=\"punct\">=<\/span> <span class=\"constant\">NO<\/span><span class=\"punct\">;<\/span>\r\n  <span class=\"constant\">NSError<\/span> <span class=\"punct\">*<\/span><span class=\"ident\">error<\/span><span class=\"punct\">;<\/span>\r\n  \r\n  <span class=\"punct\">\/<\/span><span class=\"regex\"><\/span><span class=\"punct\">\/<\/span> <span class=\"constant\">Find<\/span> <span class=\"ident\">a<\/span> <span class=\"ident\">video<\/span> <span class=\"ident\">device<\/span>\r\n  <span class=\"constant\">QTCaptureDevice<\/span> <span class=\"punct\">*<\/span><span class=\"ident\">device<\/span> <span class=\"punct\">=<\/span> <span class=\"punct\">[<\/span><span class=\"constant\">QTCaptureDevice<\/span> <span class=\"ident\">defaultInputDeviceWithMediaType<\/span><span class=\"symbol\">:QTMediaTypeVideo<\/span><span class=\"punct\">];<\/span>\r\n  <span class=\"keyword\">if<\/span><span class=\"punct\">(<\/span><span class=\"ident\">device<\/span><span class=\"punct\">)<\/span> <span class=\"punct\">{<\/span>\r\n    <span class=\"ident\">success<\/span> <span class=\"punct\">=<\/span> <span class=\"punct\">[<\/span><span class=\"ident\">device<\/span> <span class=\"ident\">open<\/span><span class=\"punct\">:&amp;<\/span><span class=\"ident\">error<\/span><span class=\"punct\">];<\/span>\r\n    <span class=\"keyword\">if<\/span><span class=\"punct\">(!<\/span><span class=\"ident\">success<\/span><span class=\"punct\">)<\/span> <span class=\"punct\">{<\/span>\r\n      <span class=\"punct\">\/<\/span><span class=\"regex\"><\/span><span class=\"punct\">\/<\/span> <span class=\"constant\">Handle<\/span> <span class=\"constant\">Error<\/span><span class=\"punct\">!<\/span>\r\n    <span class=\"punct\">}<\/span>\r\n    <span class=\"punct\">\/<\/span><span class=\"regex\"><\/span><span class=\"punct\">\/<\/span> <span class=\"constant\">Add<\/span> <span class=\"ident\">the<\/span> <span class=\"ident\">video<\/span> <span class=\"ident\">device<\/span> <span class=\"ident\">to<\/span> <span class=\"ident\">the<\/span> <span class=\"ident\">session<\/span> <span class=\"ident\">as<\/span> <span class=\"ident\">device<\/span> <span class=\"ident\">input<\/span>\r\n    <span class=\"ident\">mCaptureDeviceInput<\/span> <span class=\"punct\">=<\/span> <span class=\"punct\">[[<\/span><span class=\"constant\">QTCaptureDeviceInput<\/span> <span class=\"ident\">alloc<\/span><span class=\"punct\">]<\/span> <span class=\"ident\">initWithDevice<\/span><span class=\"symbol\">:device<\/span><span class=\"punct\">];<\/span>\r\n    <span class=\"ident\">success<\/span> <span class=\"punct\">=<\/span> <span class=\"punct\">[<\/span><span class=\"ident\">mCaptureSession<\/span> <span class=\"ident\">addInput<\/span><span class=\"symbol\">:mCaptureDeviceInput<\/span> <span class=\"ident\">error<\/span><span class=\"punct\">:&amp;<\/span><span class=\"ident\">error<\/span><span class=\"punct\">];<\/span>\r\n    <span class=\"keyword\">if<\/span><span class=\"punct\">(!<\/span><span class=\"ident\">success<\/span><span class=\"punct\">)<\/span> <span class=\"punct\">{<\/span>\r\n      <span class=\"punct\">\/<\/span><span class=\"regex\"><\/span><span class=\"punct\">\/<\/span> <span class=\"constant\">Handle<\/span> <span class=\"ident\">error<\/span>\r\n    <span class=\"punct\">}<\/span>\r\n    \r\n    <span class=\"punct\">\/<\/span><span class=\"regex\"><\/span><span class=\"punct\">\/<\/span> <span class=\"constant\">Associate<\/span> <span class=\"ident\">the<\/span> <span class=\"ident\">capture<\/span> <span class=\"ident\">view<\/span> <span class=\"keyword\">in<\/span> <span class=\"ident\">the<\/span> <span class=\"constant\">UI<\/span> <span class=\"ident\">with<\/span> <span class=\"ident\">the<\/span> <span class=\"ident\">session<\/span>\r\n    <span class=\"punct\">[<\/span><span class=\"ident\">mCaptureView<\/span> <span class=\"ident\">setCaptureSession<\/span><span class=\"symbol\">:mCaptureSession<\/span><span class=\"punct\">];<\/span>\r\n    \r\n    <span class=\"punct\">\/<\/span><span class=\"regex\"><\/span><span class=\"punct\">\/<\/span> <span class=\"constant\">Start<\/span> <span class=\"ident\">the<\/span> <span class=\"ident\">capture<\/span> <span class=\"ident\">session<\/span> <span class=\"ident\">runing<\/span>\r\n    <span class=\"punct\">[<\/span><span class=\"ident\">mCaptureSession<\/span> <span class=\"ident\">startRunning<\/span><span class=\"punct\">];<\/span>\r\n    \r\n  <span class=\"punct\">}<\/span> <span class=\"punct\">\/<\/span><span class=\"regex\"><\/span><span class=\"punct\">\/<\/span> <span class=\"constant\">End<\/span> <span class=\"keyword\">if<\/span> <span class=\"ident\">device<\/span>\r\n<span class=\"punct\">}<\/span>\r\n\r\n<span class=\"punct\">-<\/span> <span class=\"punct\">(<\/span><span class=\"constant\">IBAction<\/span><span class=\"punct\">)<\/span><span class=\"ident\">stopRecording<\/span><span class=\"punct\">: (<\/span><span class=\"ident\">id<\/span><span class=\"punct\">)<\/span><span class=\"ident\">sender<\/span>\r\n<span class=\"punct\">{<\/span>\r\n  <span class=\"keyword\">if<\/span><span class=\"punct\">([<\/span><span class=\"ident\">mCaptureSession<\/span> <span class=\"ident\">isRunning<\/span><span class=\"punct\">])<\/span> <span class=\"punct\">{<\/span>\r\n     <span class=\"punct\">[<\/span><span class=\"ident\">mCaptureSession<\/span> <span class=\"ident\">stopRunning<\/span><span class=\"punct\">];<\/span>\r\n     <span class=\"punct\">[<\/span><span class=\"ident\">mCaptureSession<\/span> <span class=\"ident\">release<\/span><span class=\"punct\">];<\/span>\r\n     <span class=\"punct\">[<\/span><span class=\"ident\">mCaptureDeviceInput<\/span> <span class=\"ident\">release<\/span><span class=\"punct\">];<\/span>\r\n  <span class=\"punct\">}<\/span>\r\n<span class=\"punct\">}<\/span>\r\n\r\n\r\n<span class=\"attribute\">@end<\/span><\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Lately I&#8217;ve been writing Objective-C\/Cocoa code, and lately I&#8217;ve learned how-to capture video from an iSight on a Macbook. It&#8217;s actually easy. Here is the code. and I&#8217;ve also attached the example application I was writing so you can take a look at it. [Download Source] [Download Application] #import &lt;Cocoa\/Cocoa.h&gt; #import &lt;QTKit\/QTKit.h&gt; @interface MyRecorderController : [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7,3],"tags":[120,61,62,121],"_links":{"self":[{"href":"http:\/\/fernyb.net\/blog\/wp-json\/wp\/v2\/posts\/184"}],"collection":[{"href":"http:\/\/fernyb.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/fernyb.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/fernyb.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/fernyb.net\/blog\/wp-json\/wp\/v2\/comments?post=184"}],"version-history":[{"count":4,"href":"http:\/\/fernyb.net\/blog\/wp-json\/wp\/v2\/posts\/184\/revisions"}],"predecessor-version":[{"id":188,"href":"http:\/\/fernyb.net\/blog\/wp-json\/wp\/v2\/posts\/184\/revisions\/188"}],"wp:attachment":[{"href":"http:\/\/fernyb.net\/blog\/wp-json\/wp\/v2\/media?parent=184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/fernyb.net\/blog\/wp-json\/wp\/v2\/categories?post=184"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/fernyb.net\/blog\/wp-json\/wp\/v2\/tags?post=184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}