{"id":28511,"date":"2022-12-31T11:22:01","date_gmt":"2022-12-31T05:52:01","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/"},"modified":"2022-12-31T11:22:01","modified_gmt":"2022-12-31T05:52:01","slug":"solved-run-and-pause-an-arsession-in-a-specified-period-of-time","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/","title":{"rendered":"[Solved] Run and Pause an ARSession in a specified period of time"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-53839913\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"53839913\" data-parentid=\"53685090\" data-score=\"4\" data-position-on-page=\"2\" data-highest-scored=\"0\" data-question-has-accepted-highest-score=\"0\" itemprop=\"suggestedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>I don&#8217;t think the <code>run()<\/code> and <code>pause()<\/code> strategy is the way to go because the DispatchQueue API is not designed for realtime accuracy. Which means there will be no guarantee that the pause will be 16ms every time. On top of that, restarting a session might not be immediate and could add more delay.<\/p>\n<p>Also, the code you shared will at most capture only one image and as <code>session.run(configuration)<\/code> is asynchronous will probably capture no frame.<\/p>\n<p>As you&#8217;re not using <code>ARSCNView\/ARSKView<\/code> the only way is to implement the <code>ARSession<\/code> delegate to be notified of every captured frame.<\/p>\n<p>Of course the delegate will most likely be called every 16ms because that&#8217;s how the camera works. But you can decide which frames you are going to process. By using the timestamp of the frame you can process a frame every 32ms and drop the other ones. Which is equivalent to a 30 fps processing.<\/p>\n<p>Here is some code to get you started, make sure that <code>dispatchQueue<\/code> is not concurrent to process your buffers sequentially:<\/p>\n<pre><code>var lastProcessedFrame: ARFrame?\n\nfunc session(_ session: ARSession, didUpdate frame: ARFrame) {\n  dispatchQueue.async {\n    self.updateCoreML(with: frame)\n  }\n}\n\nprivate func shouldProcessFrame(_ frame: ARFrame) -&gt; Bool {\n  guard let lastProcessedFrame = lastProcessedFrame else {\n    \/\/ Always process the first frame\n    return true\n  }\n  return frame.timestamp - lastProcessedFrame.timestamp &gt;= 0.032 \/\/ 32ms for 30fps\n}\n\nfunc updateCoreML(with frame: ARFrame) {\n\n  guard shouldProcessFrame(frame) else {\n    \/\/ Less than 32ms with the previous frame\n    return\n  }\n  lastProcessedFrame = frame\n  let pixelBuffer = frame.capturedImage\n  let imageRequestHandler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:])\n  do {\n    try imageRequestHandler.perform(self.visionRequests)\n  } catch {\n    print(error)\n  }\n}\n<\/code><\/pre>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">1<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Run and Pause an ARSession in a specified period of time <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] I don&#8217;t think the run() and pause() strategy is the way to go because the DispatchQueue API is not designed for realtime accuracy. Which means there will be no guarantee that the pause will be 16ms every time. On top of that, restarting a session might not be immediate and could add more delay. &#8230; <a title=\"[Solved] Run and Pause an ARSession in a specified period of time\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/\" aria-label=\"More on [Solved] Run and Pause an ARSession in a specified period of time\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[5560,4304,5561,471,522],"class_list":["post-28511","post","type-post","status-publish","format-standard","hentry","category-solved","tag-arkit","tag-augmented-reality","tag-dispatch-queue","tag-ios","tag-swift"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Run and Pause an ARSession in a specified period of time - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Run and Pause an ARSession in a specified period of time - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] I don&#8217;t think the run() and pause() strategy is the way to go because the DispatchQueue API is not designed for realtime accuracy. Which means there will be no guarantee that the pause will be 16ms every time. On top of that, restarting a session might not be immediate and could add more delay. ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-31T05:52:01+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Run and Pause an ARSession in a specified period of time\",\"datePublished\":\"2022-12-31T05:52:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/\"},\"wordCount\":194,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"arkit\",\"augmented-reality\",\"dispatch-queue\",\"ios\",\"swift\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/\",\"name\":\"[Solved] Run and Pause an ARSession in a specified period of time - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-12-31T05:52:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Run and Pause an ARSession in a specified period of time\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Run and Pause an ARSession in a specified period of time - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Run and Pause an ARSession in a specified period of time - JassWeb","og_description":"[ad_1] I don&#8217;t think the run() and pause() strategy is the way to go because the DispatchQueue API is not designed for realtime accuracy. Which means there will be no guarantee that the pause will be 16ms every time. On top of that, restarting a session might not be immediate and could add more delay. ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/","og_site_name":"JassWeb","article_published_time":"2022-12-31T05:52:01+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Run and Pause an ARSession in a specified period of time","datePublished":"2022-12-31T05:52:01+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/"},"wordCount":194,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["arkit","augmented-reality","dispatch-queue","ios","swift"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/","url":"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/","name":"[Solved] Run and Pause an ARSession in a specified period of time - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-12-31T05:52:01+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-run-and-pause-an-arsession-in-a-specified-period-of-time\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Run and Pause an ARSession in a specified period of time"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/28511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=28511"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/28511\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=28511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=28511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=28511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}